Инструменты пользователя

Инструменты сайта


projects:linux:manual_backup_scripts:create_img_sd_usb

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

projects:linux:manual_backup_scripts:create_img_sd_usb [2025/04/11 10:30] – создано projects:linux:manual_backup_scripts:create_img_sd_usb [2025/04/11 10:32] (текущий)
Строка 10: Строка 10:
 export LC_ALL=en_US.UTF-8 export LC_ALL=en_US.UTF-8
 # ==DIS/AUTOEXEC== # ==DIS/AUTOEXEC==
-# === Create Img === +# === Create Img from selected device === 
-04_create_image.sh — создание ограниченного образа текущей системы Raspberry Pi +04.2_create_image.sh — создание образа выбранного внешнего устройства апример, SD-карты) 
-с отключением журналов для минимизации записей на SD карту + 
-#+echo "снятие образа с выбранного устройства" 
 +echo "───────────────────────────────────────"
  
 set -euo pipefail set -euo pipefail
 +
 +# --- Выбор устройства-источника ---
 +echo "📦 Доступные устройства-источники для создания образа:"
 +mapfile -t SOURCE_DEVS < <(lsblk -dnrpo NAME,SIZE,MODEL | grep -E "/dev/sd|/dev/mmcblk" | grep -v "/dev/mmcblk0")
 +if [[ ${#SOURCE_DEVS[@]} -eq 0 ]]; then
 +  echo "❌ Не найдено подходящих устройств."
 +  exit 1
 +fi
 +
 +i=1
 +for dev in "${SOURCE_DEVS[@]}"; do
 +  echo "$i - $dev"
 +  ((i++))
 +done
 +
 +echo "0 - ❌ Отмена"
 +read -rp "👉 Выберите устройство-источник: " src_choice
 +
 +if ! [[ "$src_choice" =~ ^[0-9]+$ ]] || (( src_choice < 1 || src_choice > ${#SOURCE_DEVS[@]} )); then
 +  echo "❎ Отменено или неверный ввод."
 +  exit 0
 +fi
 +
 +SRC_LINE="${SOURCE_DEVS[$((src_choice-1))]}"
 +SRC_DEV=$(echo "$SRC_LINE" | awk '{print $1}')
 +SRC_SIZE=$(echo "$SRC_LINE" | awk '{print $2}')
  
 # --- Поиск целевых устройств (включая NAS) --- # --- Поиск целевых устройств (включая NAS) ---
Строка 53: Строка 80:
 IFS=":" read -r DEV_NAME DEV_SIZE DEV_MNT <<< "$SEL_DEV" IFS=":" read -r DEV_NAME DEV_SIZE DEV_MNT <<< "$SEL_DEV"
  
-# Проверка на USB (влияние на сеть)+# Проверка на USB
 DEV_BUS=$(udevadm info -q property -n "$DEV_NAME" 2>/dev/null | grep ID_BUS= | cut -d= -f2 || true) DEV_BUS=$(udevadm info -q property -n "$DEV_NAME" 2>/dev/null | grep ID_BUS= | cut -d= -f2 || true)
 DEV_USB_DRIVER=$(udevadm info -q property -n "$DEV_NAME" 2>/dev/null | grep ID_USB_DRIVER= | cut -d= -f2 || true) DEV_USB_DRIVER=$(udevadm info -q property -n "$DEV_NAME" 2>/dev/null | grep ID_USB_DRIVER= | cut -d= -f2 || true)
 if [[ "${DEV_BUS:-}" == "usb" && "${DEV_USB_DRIVER:-}" =~ "usb-storage" ]]; then if [[ "${DEV_BUS:-}" == "usb" && "${DEV_USB_DRIVER:-}" =~ "usb-storage" ]]; then
   echo "⚠️ Внимание: Устройство подключено через USB."   echo "⚠️ Внимание: Устройство подключено через USB."
-  echo "   Если используется USB 3.0 — возможны отказы сети (Ethernet) во время записи." +  echo "   Возможны отказы сети при записи."
-  echo "   Рекомендуется использовать NAS или USB 2.0 для надёжности."+
   echo ""   echo ""
 fi fi
Строка 134: Строка 160:
 fi fi
  
-# --- Остановка сервисов --- +# --- Снятие образа --- 
-echo "[*] Остановка логов и фоновых сервисов..." +echo "[*] Снимаю образ: $FINAL_IMG (с $SRC_DEV)..."
-SERVICES=("rsyslog" "systemd-journald" "apt-daily.timer" "docker"+
-for svc in "${SERVICES[@]}"; do +
-  if systemctl is-active --quiet "$svc"; then +
-    echo "⏸️  Останавливаю $svc..." +
-    sudo systemctl stop "$svc" || true +
-  fi +
-done+
 sync sync
-sudo sysctl -w vm.drop_caches=3 >/dev/null || true +sudo dd if="$SRC_DEV" of="$FINAL_IMG" bs=4M status=progress conv=fsync
- +
-# --- Расчёт объёма --- +
-echo "[*] Определение размера /dev/mmcblk0..." +
-END_SECTOR=$(sudo fdisk -l /dev/mmcblk0 | awk '/mmcblk0p[0-9]+/ { end=$3 } END { print end }') +
-SECTOR_SIZE=$(sudo blockdev --getss /dev/mmcblk0) +
-TOTAL_BYTES=$(( (END_SECTOR + 1) * SECTOR_SIZE )) +
-TOTAL_MB=$(( (TOTAL_BYTES + 1024*1024 - 1) / (1024*1024) + 16 )) +
- +
-# --- Снятие образа --- +
-echo "[*] Снимаю образ: $FINAL_IMG ($TOTAL_MB МБ)..." +
-sudo dd if=/dev/mmcblk0 of="$FINAL_IMG" bs=1M count="$TOTAL_MB" status=progress+
 sync sync
  
Строка 170: Строка 178:
   sudo umount "$TARGET_DIR" && sudo rmdir "$TARGET_DIR"   sudo umount "$TARGET_DIR" && sudo rmdir "$TARGET_DIR"
 fi fi
- 
-# --- Восстановление сервисов --- 
-echo "[*] Восстановление остановленных сервисов..." 
-for svc in "${SERVICES[@]}"; do 
-  echo "▶️  Запуск $svc..." 
-  sudo systemctl start "$svc" || echo "⚠️  Не удалось запустить $svc" 
-done 
  
 exit 0 exit 0
- 
 </code> </code>
projects/linux/manual_backup_scripts/create_img_sd_usb.txt · Последнее изменение: 2025/04/11 10:32 —

Если не указано иное, содержимое этой вики предоставляется на условиях следующей лицензии: CC Attribution 4.0 International
CC Attribution 4.0 International Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki