Як перенести зашифровану установку 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, щоб ви могли перевести систему в стан вимкнення.

Розбиття розділів та копіювання файлів - живий 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/

chroot

# 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

Тепер ми вкорінюємося всередині 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 всередину ноутбука, схрестіть пальці та завантажте.

Корисні посилання

Хороший посібник для матеріалів криптовалюти за адресою 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 та оновлю цю відповідь.
Гаміш Даунер

Нагадуємо: ви пообіцяли оновити цю чудову відповідь :-)
guntbert

У розділі 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заздалегідь виконайте: 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.
Dan Stahlke

3

Я спробував прокоментувати, але мені не вистачає репутації :-)

У всякому разі, я успішно використав дивовижний посібник від Hamish, щоб перейти до ssd на своєму робочому ноутбуці на основі Linux, зашифрованого в Luks. Лише кілька зауважень:
1. Після створення своп 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/

Загалом - чудовий посібник, точно показує огляд процесу! Вчить як рибалити, так би мовити!


0

[Не вдалося поставити коментар, хоча ця публікація належить до коментаря, а не до відповіді]

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

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, який прекрасно працює.


0

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

vgscan
vgchange -a y

0

Трохи запізнюємось, але вам доведеться оновити /etc/initramfs-tools/conf.d/resume файл, щоб відобразити зміни swap. Без цієї модифікації ви порушите сплячу функцію.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.