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

Прежде всего, некоторые связанные вопросы:

Моя ситуация выглядит следующим образом:

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

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

Если я разделю флешку вручную с загрузочным разделом EXT4 и корневым разделом LUKS BTRFS, извлечение UUID будет работать нормально. Я тогда использовал rsync -aEXS --progress перенести файлы с каждого смонтированного раздела (образ виртуальной машины -> флешка). я chrootвбил флешку и побежал 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. Корень УДАЧИ: 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. Root (при условии, что он уже был отображен с помощью 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. Корень УДАЧИ: sudo cryptsetup close orig_luks
    3. Ботинки: sudo umount /media/orig_boot
    4. kpartx: sudo kpartx -d <flash dd image file>
  10. Загрузите флешку.
    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. корневой: 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 (Примечание: вы можете воссоздать все initrds, используя 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
Другие вопросы по тегам