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

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

  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 ответ1

0

Первоначальные шаги были в основном правильными, но по какой-то причине я продолжал заканчивать с испорченным 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 для root.
      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. Отформатируйте root с помощью 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. Root LUKS: sudo cryptsetup -r open --type luks /dev/mapper/loop0p2 orig_luks
    5. Root: 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. Root: sudo rsync -aEXS --progress /media/orig_root/ /media/flash_root
  9. Размонтировать исходное изображение.
    1. Root: sudo umount /media/orig_root
    2. Root LUKS: 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. Перемонтировать внутри root: 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 (Примечание. Вы можете воссоздать все 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .