Raspberry Pi 4

🔁 Загрузка с NVMe:
❗ Raspberry Pi 4 не поддерживает прямую загрузку с NVMe через USB, но может загрузиться через microSD, а потом использовать NVMe как rootfs.

Перенос системы на NVME

migrate_to_nvme.sh
#!/bin/bash
# == Перенос rootfs с microSD на NVMe ==
# Работает для Raspberry Pi 4 с подключенным NVMe-диском через USB
 
set -e
 
### Настройки
NVME_DEV="/dev/sda"
MOUNT_POINT="/mnt/nvme_root"
PARTITION="${NVME_DEV}1"
 
echo "🔍 Проверка текущей корневой файловой системы..."
CURRENT_ROOT=$(findmnt / -o SOURCE -n)
echo "✅ Сейчас rootfs: $CURRENT_ROOT"
 
if [[ "$CURRENT_ROOT" == "$PARTITION" ]]; then
  echo "⛔ Уже используется NVMe в качестве корня. Выход."
  exit 1
fi
 
echo "🧼 Подготовка раздела на NVMe-диске ($NVME_DEV)..."
sudo parted -s "$NVME_DEV" mklabel msdos
sudo parted -s "$NVME_DEV" mkpart primary ext4 1MiB 100%
sudo mkfs.ext4 "$PARTITION" -F -L rootfs-nvme
 
echo "📂 Монтируем $PARTITION в $MOUNT_POINT..."
sudo mkdir -p "$MOUNT_POINT"
sudo mount "$PARTITION" "$MOUNT_POINT"
 
echo "📦 Копируем текущую файловую систему на NVMe..."
sudo rsync -aAXv / "$MOUNT_POINT" \
  --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found","/boot/*"}
 
echo "🛠 Обновляем fstab на NVMe..."
UUID=$(sudo blkid -s UUID -o value "$PARTITION")
echo "UUID=$UUID  /  ext4  defaults,noatime  0  1" | sudo tee "$MOUNT_POINT/etc/fstab" > /dev/null
 
echo "💾 Резервное копирование и правка cmdline.txt..."
BOOT_PART="/boot"
CMDLINE="$BOOT_PART/cmdline.txt"
BACKUP="$BOOT_PART/cmdline.backup.txt"
 
sudo cp "$CMDLINE" "$BACKUP"
 
sudo sed -i "s|root=[^ ]*|root=UUID=$UUID|" "$CMDLINE"
 
echo "✅ Завершено! Теперь:"
echo " - Загрузка будет идти с SD"
echo " - RootFS — с NVMe"
echo " - Старый rootfs не удалён, можно откатиться"
echo " - Оригинальный cmdline.txt сохранён как cmdline.backup.txt"
 
echo "🔁 Перезагрузись командой: sudo reboot"