131 lines
4.4 KiB
Bash
131 lines
4.4 KiB
Bash
#!/bin/bash
|
|
# Шаг 1 бэкапов: разметка 1 ТБ на /dev/sdb1, ФС ext4, монтирование в /mnt/backup, структура каталогов.
|
|
# Запускать на хосте Proxmox под root.
|
|
#
|
|
# Использование:
|
|
# ./backup-setup-sdb1-mount.sh --yes # разметить (если нужно), смонтировать, создать каталоги
|
|
# ./backup-setup-sdb1-mount.sh --structure-only # только fstab, mount и каталоги (раздел уже есть)
|
|
# ./backup-setup-sdb1-mount.sh # вывод действий без выполнения (без --yes)
|
|
#
|
|
set -e
|
|
|
|
BACKUP_MOUNT="/mnt/backup"
|
|
DEV_DISK="/dev/sdb"
|
|
DEV_PART="/dev/sdb1"
|
|
# 1 ТБ на диске 2 ТБ — первая половина
|
|
PART_END="50%"
|
|
|
|
if [ "$(id -u)" -ne 0 ]; then
|
|
echo "Запускайте под root."
|
|
exit 1
|
|
fi
|
|
|
|
if [ "$(uname -s)" != "Linux" ]; then
|
|
echo "Скрипт предназначен для запуска на хосте Proxmox (Linux)."
|
|
exit 1
|
|
fi
|
|
|
|
DO_IT=false
|
|
STRUCTURE_ONLY=false
|
|
for arg in "$@"; do
|
|
case "$arg" in
|
|
--yes) DO_IT=true ;;
|
|
--structure-only) STRUCTURE_ONLY=true ;;
|
|
esac
|
|
done
|
|
|
|
echo "=== Шаг 1: хранилище бэкапов (sdb1 → ${BACKUP_MOUNT}) ==="
|
|
echo ""
|
|
|
|
# Проверка наличия диска
|
|
if [ ! -b "$DEV_DISK" ]; then
|
|
echo "Ошибка: диск $DEV_DISK не найден."
|
|
exit 1
|
|
fi
|
|
|
|
# Проверка: раздел уже есть и примонтирован?
|
|
if mountpoint -q "$BACKUP_MOUNT" 2>/dev/null; then
|
|
echo "$BACKUP_MOUNT уже примонтирован. Создаём только структуру каталогов (если нет)."
|
|
DO_PART=false
|
|
DO_MOUNT=false
|
|
elif [ -b "$DEV_PART" ]; then
|
|
echo "Раздел $DEV_PART уже существует."
|
|
if [ "$STRUCTURE_ONLY" = true ]; then
|
|
DO_PART=false
|
|
DO_MOUNT=true
|
|
else
|
|
echo "Пропускаем разметку. Добавим fstab и монтирование."
|
|
DO_PART=false
|
|
DO_MOUNT=true
|
|
fi
|
|
else
|
|
DO_PART=true
|
|
DO_MOUNT=true
|
|
fi
|
|
|
|
# --- Разметка (при необходимости) ---
|
|
if [ "$DO_PART" = true ]; then
|
|
echo ""
|
|
echo "Будет выполнено:"
|
|
echo " 1. Создание GPT на $DEV_DISK"
|
|
echo " 2. Создание раздела $DEV_PART до $PART_END (1 ТБ)"
|
|
echo " 3. Создание ФС ext4 на $DEV_PART"
|
|
if [ "$DO_IT" != true ]; then
|
|
echo ""
|
|
echo "Для выполнения добавьте флаг: $0 --yes"
|
|
exit 0
|
|
fi
|
|
echo ""
|
|
parted -s "$DEV_DISK" mklabel gpt
|
|
parted -s "$DEV_DISK" mkpart primary ext4 0% "$PART_END"
|
|
partprobe "$DEV_DISK" || true
|
|
sleep 1
|
|
mkfs.ext4 -L backup "$DEV_PART"
|
|
echo "Разметка и ФС созданы."
|
|
fi
|
|
|
|
# --- Монтирование ---
|
|
mkdir -p "$BACKUP_MOUNT"
|
|
|
|
if [ "$DO_MOUNT" = true ] && ! mountpoint -q "$BACKUP_MOUNT" 2>/dev/null; then
|
|
UUID=$(blkid -s UUID -o value "$DEV_PART")
|
|
if [ -z "$UUID" ]; then
|
|
echo "Ошибка: не удалось получить UUID для $DEV_PART"
|
|
exit 1
|
|
fi
|
|
if ! grep -q "UUID=$UUID" /etc/fstab 2>/dev/null; then
|
|
if [ "$DO_IT" != true ] && [ "$STRUCTURE_ONLY" != true ]; then
|
|
echo ""
|
|
echo "Добавьте в /etc/fstab:"
|
|
echo " UUID=$UUID $BACKUP_MOUNT ext4 defaults,nofail 0 2"
|
|
echo ""
|
|
echo "Затем: mount $BACKUP_MOUNT"
|
|
echo "Для автоматического выполнения: $0 --yes или $0 --structure-only"
|
|
exit 0
|
|
fi
|
|
echo "UUID=$UUID $BACKUP_MOUNT ext4 defaults,nofail 0 2" >> /etc/fstab
|
|
echo "Добавлена запись в /etc/fstab."
|
|
fi
|
|
mount "$BACKUP_MOUNT"
|
|
echo "Смонтировано: $BACKUP_MOUNT"
|
|
fi
|
|
|
|
# --- Структура каталогов (всегда, если примонтировано) ---
|
|
if ! mountpoint -q "$BACKUP_MOUNT" 2>/dev/null; then
|
|
echo "Ошибка: $BACKUP_MOUNT не примонтирован. Сначала смонтируйте раздел."
|
|
exit 1
|
|
fi
|
|
|
|
mkdir -p "$BACKUP_MOUNT/proxmox/dump"
|
|
mkdir -p "$BACKUP_MOUNT/proxmox/etc-pve"
|
|
mkdir -p "$BACKUP_MOUNT/restic/local"
|
|
mkdir -p "$BACKUP_MOUNT/photos"
|
|
mkdir -p "$BACKUP_MOUNT/vps"
|
|
mkdir -p "$BACKUP_MOUNT/other"
|
|
|
|
echo ""
|
|
echo "Структура каталогов создана:"
|
|
ls -la "$BACKUP_MOUNT"
|
|
echo ""
|
|
echo "Готово. Точка монтирования: $BACKUP_MOUNT"
|