Как перенести зашифрованную установку LVM на новый диск

15

У меня несколько настроенная установка ноутбука, и я хочу перейти на SSD напрямую, без переустановки Ubuntu, переустановки всех приложений и повторного внесения всех остальных изменений. SSD меньше, поэтому я не могу просто сделать dd.

Первоначальная установка была сделана с помощью альтернативного установщика Ubuntu, выбрав полное шифрование диска с опцией LVM.

Какие шаги требуются и как мне их сделать? Я ожидаю, что придется:

  • настроить разделы диска, шифрование и т. д.
  • скопировать данные через
  • установить grub и заставить его работать с новыми значениями UUID и т. д.
Хэмиш Даунер
источник

Ответы:

14

Создание разделов и копирование файлов - во время работы

Я сделал это, начав с работающей системы. Я подключил новый SSD к USB-адаптеру SATA, разбил его на части, настроил LVM и скопировал файлы.

# confirm disk size is as expected for sdc
sudo fdisk -l /dev/sdc
# now partition - 500 MB partition as boot, the rest as a single (logical) partition
sudo cfdisk /dev/sdc

Ваш диск должен выглядеть следующим образом:

sudo fdisk -l /dev/sdc
Disk /dev/sda: 120.0 GB, 120034123776 bytes
255 heads, 63 sectors/track, 14593 cylinders, total 234441648 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *          63      979964      489951   83  Linux
/dev/sda2          979965   234441647   116730841+   5  Extended
/dev/sda5          980028   234441647   116730810   82  Linux swap / Solaris

Следующим шагом является наложение шифрования на раздел, а LVM поверх шифрования.

sudo cryptsetup -y luksFormat /dev/sdc5
sudo cryptsetup luksOpen /dev/sdc5 crypt
sudo vgcreate crypt-lvm /dev/mapper/crypt
sudo lvcreate -L4G -nswap crypt-lvm
sudo lvcreate -l100%FREE -nroot crypt-lvm

Теперь создайте файловые системы, смонтируйте их и скопируйте вашу систему.

sudo mkfs.ext2 /dev/sdc1
# you do ls /dev/mapper to check the name if different
sudo mkfs.ext4 /dev/mapper/crypt-root
sudo mkdir /mnt/boot
sudo mkdir /mnt/root
sudo mount -t ext2 /dev/sdc1 /mnt/boot
sudo mount -t ext4 /dev/mapper/crypt-root /mnt/root

# rsync files
sudo rsync -a /boot/* /mnt/boot/
sudo rsync -aHAX --devices --specials --delete --one-file-system --exclude proc --exclude run --exclude boot --exclude sys --exclude tmp /* /mnt/root/

До этого момента вы можете поддерживать работоспособность системы и использовать ее. Теперь вам нужно завершить работу и загрузиться с живого CD / USB, чтобы вы могли перевести систему в состояние выключения.

Разметка и копирование файлов - live CD / USB

После загрузки откройте терминал и:

sudo apt-get install lvm2

# mount old hard drive
sudo cryptsetup luksOpen /dev/sda5 sda5_crypt
sudo mkdir /mnt/sdaroot
# you can do ls /dev/mapper to check the name if it is different
sudo mount -t ext4 /dev/mapper/sda5_crypt--root /mnt/sdaroot

# mount new hard drive (over USB)
sudo cryptsetup luksOpen /dev/sdc5 sdc5_crypt
sudo mkdir /mnt/sdcroot
sudo mount -t ext4 /dev/mapper/sdc5_crypt--root /mnt/sdcroot

# final rsync
sudo rsync -aHAX --devices --specials --delete --one-file-system --exclude proc --exclude run --exclude boot --exclude sys --exclude tmp /mnt/sdaroot/* /mnt/sdcroot/

корневой

# prepare chroot
cd /mnt/sdcroot
sudo mkdir boot

# these directories are set up by the system and we need them inside the chroot
sudo mount -t proc proc /mnt/sdcroot/proc
sudo mount -t sysfs sys /mnt/sdcroot/sys
sudo mount -o bind /dev /mnt/sdcroot/dev

# now enter the chroot
sudo chroot /mnt/root/

Изменение UUID

Теперь мы root в chroot и запускаем следующие команды:

# inside chroot, as root
mount -t ext2 /dev/sdc1 /boot
blkid

Теперь вы увидите все UUID для различных дисков в системе. Вам нужно будет отредактировать UUID в /etc/fstabи /etc/crypttabсоответствовать значениям для/dev/sdc?

В /etc/fstabнеобходимо использовать UUID для загрузочного диска -/dev/sdc1 если диски имеют ту же букву , как и я.

В /etc/crypttabнеобходимо использовать UUID для другого (большого) раздела -/dev/sdc5 если ваши диски имеют ту же букву , как и я.

initramfs и grub

# now update initramfs for all installed kernels
update-initramfs -u -k all

# install grub and ensure it is up to date
grub-install /dev/sdc      # NOTE sdc NOT sdc1
update-grub

# hit Ctrl-D to exit chroot
sudo umount /mnt/root

Теперь выключите, поместите SSD в свой ноутбук, скрестите пальцы и загрузитесь.

Полезные ссылки

Хорошее руководство для вещей cryptsetup в http://www.debian-administration.org/articles/577

Для установки grub на внешний раздел: /programming/247030/how-to-set-up-grub-in-a-cloned-hard-disk

https://help.ubuntu.com/community/UsingUUID

Хэмиш Даунер
источник
Только что обнаружил, что rsync исключает sys, исключил некоторые каталоги, которые я хотел включить. Я придумаю более проницательную команду rsync и обновлю этот ответ.
Хэмиш Даунер
Просто напоминание: вы обещали обновление для этого превосходного ответа :-)
Гунтберт
В разделе chroot перед монтированием мне нужно было создать точки монтирования: sudo mount -t proc proc /mnt/sdcroot/proc sudo mount -t sysfs sys /mnt/sdcroot/sys sudo mount -o bind /dev /mnt/sdcroot/devbeforefor do: sudo mkdir /mnt/sdcroot/proc sudo mkdir /mnt/sdcroot/sys--- В моем случае команда для создания initramfs не работала, потому что версии ядра не совпадали и поэтому initramfs не мог найти правильное ядро ​​в / boot, так что я не смог заставить все это работать.
Blindfreddy
Я следовал вашему руководству «во время работы», внес несколько изменений (ext4), и до сих пор он работал замечательно. Я изменил в fstab UUID для загрузки на новый раздел, я также изменил точки монтирования для root и swap. Есть ли что-то еще, кроме fstab, которое нужно изменить? Я сейчас попробую загрузиться: D
Лука
Когда вы делаете luksOpen, убедитесь, что вы присвоили ту же самую метку, которая используется в crypttab, иначе установка grub не будет работать должным образом. Взял меня навсегда, чтобы понять это. В другом ответе упоминается связывание / запуск / lvm. Не знаю, нужно ли это. Для отладки вы можете сэкономить время, практикуясь на USB-диске и пытаясь загрузить его с помощью kvm.
Дэн Шталке,
3

Я пытался комментировать, но мне не хватает репутации :-)

В любом случае, я успешно использовал удивительное руководство Хэмиша для перехода на ssd на моем рабочем ноутбуке с шифрованием на основе Linux. Несколько замечаний:
1. После создания swap lv также используйте

# mkswap /dev/mapper/crypt-swap 

инициализировать своп, в противном случае он завершится неудачно во время загрузки, как указано в комментарии выше.
2. Команда rsyncслишком ограничительная, как есть. Когда я использовал его --exclude run, я столкнулся со всевозможными странными, обычно невидимыми интернет-ошибками. Пробег должен быть включен . Система в любом случае пуста при загрузке в режиме обслуживания, поэтому она может оставаться. Также, если вы исключите tmp, вновь созданные в target / tmp и / var / tmp не получат залипания - не забудьте установить их самостоятельно. Я закончил тем, что использовал что-то вроде

# rsync -aHAX --devices --specials --delete --one-file-system --exclude proc --exclude boot /mnt/sdaroot/* /mnt/sdcroot/

В целом - отличное руководство, показывает обзор процесса точно! Научит, как ловить рыбу, так сказать!

Sims
источник
0

[Не могу добавить комментарий, хотя это сообщение относится не к ответу, а к комментарию]

Используя этот метод, вы также можете переместить существующую ** не - ** зашифрованную установку lvm ​​в зашифрованную установку lvm ​​на новом диске; вам просто нужны дополнительные шаги (чтобы установить cryptsetup, в то время как chroot'ed на целевой диск), как упомянуто по адресу http://blog.andreas-haerter.com/2011/06/18/ubuntu-full-disk-encryption-lvm -люкс , а именно:

apt-get install lvm2 cryptsetup

Приведенная выше команда также устанавливает lvm2 на целевой диск, хотя это не является необходимым, было бы полезно, если бы вы перемещали систему не lvm в систему lvm ​​на вашем SSD, используя Live CD / DVD. Обратите внимание, что вам также нужно скопировать /etc/resolve.conf в ваш chroot, чтобы вы могли успешно запустить apt-get install: он указан по указанному выше URL-адресу, фрагмент кода:sudo cp /etc/resolv.conf /mnt/sdcroot/etc/resolv.conf

Кроме того, проще сделать cp (используя другую установку (не из исходной установки, например, с живого CD / DVD) вместо rsync для раздела /, как описано в разделе Как переместить Ubuntu на SSD

Вы также должны, возможно, создать своп с использованием mkswapна вашем/dev/mapper/<swap-name-here> раздела.

Также следует включить поддержку TRIM одновременно, как указано на http://www.webupd8.org/2013/01/enable-trim-on-ssd-solid-state-drives.html.

ВНИМАНИЕ: Дальнейший текст ниже не предназначен для тех, кто использует MBR, к которой, похоже, относится эта тема / тема. В любом случае я нашел это полезным, поэтому публикую сообщения для тех, кто может адаптировать инструкции в этой теме / теме к своему GPT-диску.

А для тех, кто использует GPT вместо MBR (используя parted / gparted и gdisk вместо fdisk), я усвоил трудный путь, что ваш раздел / boot (который не зашифрован) не должен быть пронумерован после вашего luks-устройства в порядке GPT. Поскольку я создал раздел ESP после создания разделов устройства / boot и luks с помощью gparted, мне пришлось отсортировать номера разделов так, чтобы / boot по-прежнему был пронумерован меньше, чем устройство luks.

Кроме того, если говорить строго об этом посте, у тех, кто использует GPT и UEFI с rEFInd, rEFInd, возможно, возникли проблемы с представлением вам списка разделов для загрузки, если в вашей системе несколько ESP, у меня по одному на диск, поэтому вместо использования REFInd, я использую Grub, который работает нормально.

user2074854
источник
0

Перед разделом initramfs и grub вам может понадобиться:

vgscan
vgchange -a y
Ajeden
источник
0

Немного поздно, но вы должны обновить файл /etc/initramfs-tools/conf.d/resume, чтобы отразить изменение подкачки. Без этой модификации вы нарушите функцию гибернации.

billdangerous
источник