#!/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"