Files
homelab-docs/scripts/backup-setup-sdb1-mount.sh

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"