projects:linux:manual_backup_scripts:create_img
Различия
Показаны различия между двумя версиями страницы.
| Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия | ||
| projects:linux:manual_backup_scripts:create_img [2025/04/10 12:13] – | projects:linux:manual_backup_scripts:create_img [2025/04/11 17:43] (текущий) – | ||
|---|---|---|---|
| Строка 11: | Строка 11: | ||
| # ==DIS/ | # ==DIS/ | ||
| # === Create Img === | # === Create Img === | ||
| - | # 04_create_image.sh — создание ограниченного образа | + | # 04_create_image.sh — создание ограниченного образа |
| - | # с возможностью сохранить на внешний диск или сетевой ресурс (NAS) | + | # с отключением журналов для минимизации записей |
| # | # | ||
| + | |||
| + | echo " | ||
| + | echo " | ||
| set -euo pipefail | set -euo pipefail | ||
| - | # --- Определение источника --- | + | # --- Поиск |
| - | echo " | + | |
| - | mapfile -t SOURCES < <( | + | |
| - | lsblk -nrpo NAME, | + | |
| - | mount=$4; label="" | + | |
| - | if (mount == "/" | + | |
| - | printf(" | + | |
| - | }' | + | |
| - | ) | + | |
| - | + | ||
| - | if [[ ${# | + | |
| - | echo "❌ Нет доступных источников." | + | |
| - | exit 1 | + | |
| - | fi | + | |
| - | + | ||
| - | i=1 | + | |
| - | echo "" | + | |
| - | for src in " | + | |
| - | IFS=":" | + | |
| - | echo "$i - $dev ($size, $fs, $mp)$label" | + | |
| - | ((i++)) | + | |
| - | done | + | |
| - | + | ||
| - | echo "0 - Отмена" | + | |
| - | read -rp "🔍 Выберите | + | |
| - | [[ " | + | |
| - | (( choice < 1 || choice > ${# | + | |
| - | + | ||
| - | SEL_SRC=" | + | |
| - | IFS=":" | + | |
| - | + | ||
| - | if [[ " | + | |
| - | SRC_PARENT=$(lsblk -no PKNAME " | + | |
| - | SRC_PARENT="/ | + | |
| - | else | + | |
| - | SRC_PARENT=" | + | |
| - | fi | + | |
| - | + | ||
| - | # Проверка, что SRC_PARENT определён | + | |
| - | if [[ -z " | + | |
| - | echo "❌ Не удалось определить родительское устройство." | + | |
| - | exit 1 | + | |
| - | fi | + | |
| - | + | ||
| - | # --- Выбор цели ( диск/ | + | |
| NAS_PATH="/ | NAS_PATH="/ | ||
| if mountpoint -q " | if mountpoint -q " | ||
| Строка 75: | Строка 34: | ||
| fi | fi | ||
| - | echo "💿 Выберите место для сохранения образа:" | + | echo "💾 Выберите место для сохранения образа:" |
| i=1 | i=1 | ||
| for dev in " | for dev in " | ||
| Строка 87: | Строка 46: | ||
| echo "0 - Отмена" | echo "0 - Отмена" | ||
| - | read -rp "🔍 Ваш выбор: " | + | read -rp "👉 Ваш выбор: " |
| - | [[ " | + | |
| - | (( dchoice < 1 || dchoice > ${# | + | |
| - | SEL_DEV=" | + | if ! [[ " |
| + | echo "❎ Отменено или неверный ввод." | ||
| + | exit 0 | ||
| + | fi | ||
| + | |||
| + | SEL_DEV=" | ||
| IFS=":" | IFS=":" | ||
| - | TEMP_MOUNTED=false | ||
| + | # Проверка на USB (влияние на сеть) | ||
| + | DEV_BUS=$(udevadm info -q property -n " | ||
| + | DEV_USB_DRIVER=$(udevadm info -q property -n " | ||
| + | if [[ " | ||
| + | echo " | ||
| + | echo " | ||
| + | echo " | ||
| + | echo "" | ||
| + | fi | ||
| + | |||
| + | # Определение целевого каталога | ||
| + | TEMP_MOUNTED=false | ||
| if [[ " | if [[ " | ||
| TARGET_DIR=" | TARGET_DIR=" | ||
| Строка 113: | Строка 86: | ||
| FIRST_PART=$(lsblk -nrpo NAME " | FIRST_PART=$(lsblk -nrpo NAME " | ||
| if [[ -z " | if [[ -z " | ||
| - | echo "❌ Не найден раздел." | + | echo "❌ Не найден раздел |
| exit 1 | exit 1 | ||
| fi | fi | ||
| if sudo mount " | if sudo mount " | ||
| + | echo "✅ Раздел $FIRST_PART примонтирован в $MNT_PATH" | ||
| TARGET_DIR=" | TARGET_DIR=" | ||
| TEMP_MOUNTED=true | TEMP_MOUNTED=true | ||
| else | else | ||
| - | echo "❌ Не удалось примонтировать." | + | echo "❌ Не удалось примонтировать |
| exit 1 | exit 1 | ||
| fi | fi | ||
| Строка 126: | Строка 100: | ||
| fi | fi | ||
| - | # --- Выбор имени файла --- | + | # --- Подготовка |
| DATE=$(date +%F_%H-%M-%S) | DATE=$(date +%F_%H-%M-%S) | ||
| echo "" | echo "" | ||
| Строка 153: | Строка 127: | ||
| ;; | ;; | ||
| esac | esac | ||
| - | |||
| - | |||
| FINAL_IMG=" | FINAL_IMG=" | ||
| - | END_SECTOR=$(sudo fdisk -l "$SRC_PARENT" | + | # --- Проверка перезаписи |
| - | SECTOR_SIZE=$(sudo blockdev --getss | + | if [[ -f "$FINAL_IMG" |
| - | TOTAL_BYTES=$(( (END_SECTOR + 1) * SECTOR_SIZE )) | + | echo "⚠️ Файл уже существует: |
| - | TOTAL_MB=$(( (TOTAL_BYTES + 1024*1024 - 1) / (1024*1024) + 16 )) | + | read -rp "❗ Перезаписать? |
| + | [[ "${overwrite,,}" != "y" | ||
| + | fi | ||
| - | # === Вставка | + | # --- Остановка |
| - | sync | + | echo "[*] Остановка логов и фоновых сервисов..." |
| - | SERVICES=(" | + | SERVICES=(" |
| for svc in " | for svc in " | ||
| if systemctl is-active --quiet " | if systemctl is-active --quiet " | ||
| echo " | echo " | ||
| - | sudo systemctl stop " | + | sudo systemctl stop " |
| fi | fi | ||
| - | |||
| done | done | ||
| + | sync | ||
| + | sudo sysctl -w vm.drop_caches=3 >/ | ||
| - | # === Конец | + | # --- Расчёт |
| + | echo "[*] Определение размера / | ||
| + | END_SECTOR=$(sudo fdisk -l / | ||
| + | SECTOR_SIZE=$(sudo blockdev --getss / | ||
| + | TOTAL_BYTES=$(( (END_SECTOR + 1) * SECTOR_SIZE )) | ||
| + | TOTAL_MB=$(( (TOTAL_BYTES + 1024*1024 - 1) / (1024*1024) + 16 )) | ||
| + | # --- Снятие образа --- | ||
| echo "[*] Снимаю образ: $FINAL_IMG ($TOTAL_MB МБ)..." | echo "[*] Снимаю образ: $FINAL_IMG ($TOTAL_MB МБ)..." | ||
| - | sudo dd if=" | + | sudo dd if=/ |
| sync | sync | ||
| + | # --- Проверка --- | ||
| if sudo fdisk -l " | if sudo fdisk -l " | ||
| echo "✅ Образ сохранён: | echo "✅ Образ сохранён: | ||
| Строка 187: | Строка 169: | ||
| fi | fi | ||
| - | # Корректная проверка на необходимость размонтирования | + | # --- Очистка --- |
| if $TEMP_MOUNTED; | if $TEMP_MOUNTED; | ||
| - | sudo umount " | + | sudo umount |
| fi | fi | ||
| - | + | # --- Восстановление сервисов | |
| - | # === Восстановление сервисов | + | echo "[*] Восстановление остановленных сервисов..." |
| for svc in " | for svc in " | ||
| echo " | echo " | ||
| sudo systemctl start " | sudo systemctl start " | ||
| done | done | ||
| - | # === Конец блока восстановления сервисов === | ||
| exit 0 | exit 0 | ||
| - | |||
| </ | </ | ||
| + | ===== ******* ===== | ||
| + | [[https:// | ||
projects/linux/manual_backup_scripts/create_img.1744276439.txt.gz · Последнее изменение: —
