Перенос ОС Linux с одного диска на другой с другими разделами

Перенос ОС Linux с одного диска на другой с другими разделами

Прежде всего, несколько сопутствующих вопросов:

Моя ситуация такова:

  1. Создайте виртуальную машину (VBox) для установки Linux (Debian testing, ядро ​​3.14).
  2. Один загрузочный раздел BTRFS, один корневой раздел LUKS BTRFS.
  3. Для ускорения вносите в виртуальную машину изменения, требующие интенсивного ввода-вывода.
  4. Перенесите установку на USB-флеш-накопитель.

Моя первая попытка заключалась в использовании жесткого диска в виртуальной машине того же размера, что и флэш-накопитель, и всего ddэтого. По какой-то причине UUID загрузочного раздела не может быть получен и, следовательно, использован для загрузки с флэш-накопителя.

Если я вручную разбиваю флэш-накопитель на загрузочный раздел EXT4 и корневой раздел LUKS BTRFS, то извлечение UUID работает нормально. Затем я использовал rsync -aEXS --progressдля переноса файлов из каждого смонтированного раздела (образ виртуальной машины -> флэш-накопитель). Я chrootвыполнил команду -ed на флэш-накопитель и запустил его grub-installна флэш-накопителе, а также update-grubдля обновления UUID файловой системы. Это не сработало. Он не смог правильно обнаружить/использовать зашифрованный раздел для получения root-доступа. Я пытался, но update-initramfs -uбезуспешно.

Что я упустил или мог бы сделать лучше при реализации этого сценария?

решение1

Первоначальные шаги были в основном правильными, но по какой-то причине я продолжал получать поврежденный initrd. Ниже приведены все шаги, которые должны привести к рабочему сценарию для тех, кто заинтересован в том, чтобы сделать то же самое:

  1. Создайте виртуальную машину по желанию.
  2. Установите Linux, используя желаемую схему разделов, и внесите все желаемые изменения. В этом случае он состоит из загрузочного раздела BTRFS и корневого раздела BTRFS, зашифрованного LUKS. Другие схемы должны работать, если вы позаботитесь о том, чтобы правильно обновить ссылки во время переноса.
  3. Загрузите предыдущую виртуальную машину с помощью Linux Live ISO, чтобы иметь возможность получить доступ к установленной системе в автономном режиме.
  4. Подключите USB-флеш-накопитель к виртуальной машине для передачи данных. (Примечание: вы можете создать ddобраз установленного диска и сохранить его вне виртуальной машины, а затем использовать из обычной системы Linux.)
  5. Подготовьте разделы флешки.
    1. Вариант: ddисходный образ на флэш-накопитель и перейти к шагу 7, а затем к шагу 10. (Примечание: похоже, в моем случае по неизвестной причине пришлось пересоздать разделы, так как blkidне удалось перечислить UUID загрузочного раздела BTRFS.)
    2. Вариант: создать новые разделы, используя те же UUID, что и исходные. Предполагая, /dev/sda1что для загрузки и /dev/sda2для корня.
      1. Для загрузочного раздела BTRFS:sudo mkfs.btrfs -f -L BOOT -U <original UUID> /dev/sda1
      2. Для корневого раздела LUKS:sudo cryptsetup --uuid=<original UUID> luksFormat /dev/sda2
      3. Сопоставить корневой раздел:sudo cryptsetup --allow-discards open --type luks /dev/sda2 flash_luks
      4. Форматируем корень с помощью BTRFS:sudo mkfs.btrfs -f -L ROOT -U <original UUID> /dev/mapper/flash_luks
    3. Вариант: создать новые разделы, используя новые UUID. Повторите те же шаги, что и в варианте 2, но удалите аргументы, относящиеся к UUID/uuid. Обратите внимание на новые UUID, используя sudo blkid.
  6. Смонтируйте исходные разделы образа.
    1. Создайте петлевые устройства только для чтения для каждого раздела:. sudo kpartx -ar <flash dd image file>Предполагая, что kpartx подключается к loop0.
    2. Создайте каталоги для точек монтирования:sudo mkdir -p /media/orig_boot /media/orig_root
    3. Ботинок:sudo mount -r /dev/mapper/loop0p1 /media/orig_boot
    4. Корневые LUKS:sudo cryptsetup -r open --type luks /dev/mapper/loop0p2 orig_luks
    5. Корень:sudo mount -r /dev/mapper/orig_luks /media/orig_root
  7. Монтируем разделы флешки. Предполагаем /dev/sda1загрузку.
    1. Создайте каталоги для точек монтирования:sudo mkdir -p /media/flash_boot /media/flash_root
    2. Ботинок:sudo mount -t btrfs -o nodiratime,noatime,compress=zlib,discard,ssd,space_cache /dev/sda1 /media/flash_boot
    3. Корень (предполагается, что он уже был сопоставлен с помощью cryptsetup ранее):sudo mount -t btrfs -o relatime,compress=zlib,discard,ssd,space_cache /dev/mapper/flash_luks /media/flash_root
  8. Копировать содержимое:
    1. Ботинок:sudo rsync -aEXS --progress /media/orig_boot/ /media/flash_boot
    2. Корень:sudo rsync -aEXS --progress /media/orig_root/ /media/flash_root
  9. Размонтировать исходный образ.
    1. Корень:sudo umount /media/orig_root
    2. Корневые LUKS:sudo cryptsetup close orig_luks
    3. Ботинок:sudo umount /media/orig_boot
    4. kpartx:sudo kpartx -d <flash dd image file>
  10. Chroot на флешку.
    1. Связывать /sys:sudo mount --bind /sys /media/flash_root/sys
    2. Связывать /dev:sudo mount --bind /dev /media/flash_root/dev
    3. Связывать /dev/pts:sudo mount --bind /dev/pts /media/flash_root/dev/pts
    4. Связывать /proc:sudo mount --bind /proc /media/flash_root/proc
    5. Размонтировать загрузчик:sudo umount /media/flash_boot
    6. Перемонтировать внутри корня:sudo mount -t btrfs -o relatime,compress=zlib,discard,ssd,space_cache /dev/sda1 /media/flash_root/boot
    7. Chroot-окружение:sudo chroot /media/flash_root
  11. Обновлять /etc/fstab.
    1. Строка загрузки:UUID=<btrfs boot uuid> /boot btrfs nodiratime,noatime,compress=zlib,discard,ssd,space_cache 0 2
    2. Корневая линия:UUID=<btrfs root uuid> / btrfs nodiratime,noatime,compress=zlib,discard,ssd,space_cache 0 1
  12. Обновлять /etc/crypttab:flash_luks UUID=<luks root uuid> none discard,luks
  13. Установить btrfs-tools(если не установлено):sudo apt-get install btrfs-tools
  14. Обновите загрузочные данные.
    1. Initrd (использует fstab/crypttab для определения того, что необходимо перед монтированием, и для запроса пароля LUKS при загрузке): sudo update-initramfs -u -k all(Примечание: вы можете пересоздать все initrd с помощью sudo update-initramfs -c -k all, но я не пробовал это делать, чтобы быть уверенным.)
    2. Grub (использует fstab для обновления параметров загрузки ядра и монтирования правильных разделов):sudo update-grub
    3. Установите grub в MBR (предположим /dev/sda):sudo grub-install --recheck /dev/sda
    4. Выйти из chroot-окружения:exit
  15. Размонтируйте все.
    1. sudo umount /media/flash_root/boot
    2. sudo umount /media/flash_root/proc
    3. sudo umount /media/flash_root/dev/pts
    4. sudo umount /media/flash_root/dev
    5. sudo umount /media/flash_root/sys
    6. sudo umount /media/flash_root
    7. sudo cryptsetup close flash_luks

Связанный контент