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

927
Ioan

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

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

  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без успеха.

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

0

1 ответ на вопрос

0
Ioan

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

  1. Создайте виртуальную машину по желанию.
  2. Установите Linux, используя желаемую разметку разделов, и внесите все необходимые изменения. В этом случае он состоит из загрузочного раздела BTRFS и корневого раздела BTRFS с шифрованием LUKS. Другие макеты должны работать, если принять меры для правильного обновления ссылок во время передачи.
  3. Загрузите предыдущую виртуальную машину, используя Linux live ISO, чтобы получить доступ к установленной системе в автономном режиме.
  4. Подключите флешку к виртуальной машине для передачи. (Примечание. Вы можете создать 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. Bind /sys:sudo mount --bind /sys /media/flash_root/sys
    2. Bind /dev:sudo mount --bind /dev /media/flash_root/dev
    3. Bind /dev/pts:sudo mount --bind /dev/pts /media/flash_root/dev/pts
    4. Bind /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