Jak migrować zaszyfrowaną instalację LVM na nowy dysk

15

Mam nieco spersonalizowaną instalację laptopa Chcę przejść bezpośrednio na dysk SSD, bez konieczności ponownej instalacji Ubuntu, ponownej instalacji wszystkich aplikacji i ponownego wprowadzenia wszystkich pozostałych zmian. Dysk SSD jest mniejszy, więc nie mogę tego zrobić dd.

Oryginalnej instalacji dokonano za pomocą alternatywnego instalatora Ubuntu, wybierając pełne szyfrowanie dysku z opcją LVM.

Jakie kroki są wymagane i jak je wykonać? Oczekuję, że będę musiał:

  • skonfigurować partycje dysku, szyfrowanie itp
  • kopiuj dane w poprzek
  • zainstaluj grub i spraw, aby działał z nowymi wartościami UUID itp.
Hamish Downer
źródło

Odpowiedzi:

14

Partycjonowanie i kopiowanie plików - podczas działania

Zrobiłem to, zaczynając od działającego systemu. Podłączyłem nowy dysk SSD do adaptera USB SATA i podzieliłem go na partycje, skonfigurowałem LVM i skopiowałem pliki.

# 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

Twój dysk powinien teraz wyglądać następująco:

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

Następnym krokiem jest umieszczenie szyfrowania na partycji i LVM na wierzchu szyfrowania.

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

Teraz utwórz systemy plików i zamontuj je, a następnie skopiuj swój system.

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/

Do tego momentu możesz utrzymać działanie systemu i korzystać z niego. Teraz musisz zamknąć i uruchomić z dysku CD / USB na żywo, aby system mógł zostać zamknięty.

Partycjonowanie i kopiowanie plików - CD na żywo / USB

Po uruchomieniu otwórz terminal i:

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/

Zmiana UUID

Teraz jesteśmy rootem w chroot i uruchamiamy następujące polecenia:

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

Teraz zobaczysz wszystkie UUID dla różnych dysków w systemie. Musisz edytować UUID /etc/fstabi /etc/crypttabdopasować wartości dla/dev/sdc?

W /etc/fstabmusisz użyć UUID dla dysku rozruchowego - /dev/sdc1jeśli twoje dyski mają taką samą literę jak ja.

W /etc/crypttabmusisz użyć UUID dla drugiej (dużej) partycji - /dev/sdc5jeśli twoje dyski mają taką samą literę jak ja.

initramfs i 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

Teraz wyłącz, włóż dysk SSD do laptopa, trzymaj kciuki i uruchom komputer.

Przydatne linki

Dobry przewodnik po cryptsetup na stronie http://www.debian-administration.org/articles/577

Aby zainstalować GRUB na zewnętrznej partycji: /programming/247030/how-to-set-up-grub-in-a-cloned-hard-disk

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

Hamish Downer
źródło
Właśnie odkryłem, że rsync wykluczenie sys wykluczyło niektóre katalogi, które chciałem dołączyć. Wymyślę bardziej wymagające polecenie rsync i zaktualizuję tę odpowiedź.
Hamish Downer
Przypominamy: obiecałeś aktualizację tej doskonałej odpowiedzi :-)
guntbert,
W sekcji chroot przed montażem musiałem utworzyć punkty montowania: sudo mount -t proc proc /mnt/sdcroot/proc sudo mount -t sysfs sys /mnt/sdcroot/sys sudo mount -o bind /dev /mnt/sdcroot/devwcześniej wykonaj: sudo mkdir /mnt/sdcroot/proc sudo mkdir /mnt/sdcroot/sys--- W moim przypadku polecenie utworzenia initramfs nie działało, ponieważ wersje jądra nie pasowały i dlatego initramfs nie mógł znajdź odpowiednie jądro w katalogu / boot, więc nie mogłem sprawić, żeby wszystko działało.
Blindfreddy
Postępowałem zgodnie z twoim przewodnikiem „podczas pracy”, wprowadziłem kilka poprawek (ext4) i jak dotąd działało to cudownie. Zmieniłem w fstab UUID do rozruchu na nową partycję, zmieniłem również punkty montowania dla roota i wymiany. Czy jest coś jeszcze oprócz fstab potrzebnych do zmiany? Spróbuję teraz uruchomić: D
Luka
Kiedy robisz luksOpen, pamiętaj, aby przypisać tę samą etykietę, która jest używana w crypttab, inaczej konfiguracja grub nie będzie działać poprawnie. Trwało to wieczność, żeby to rozgryźć. Inna odpowiedź wspomina binding / run / lvm. Nie wiem czy to jest potrzebne. Podczas debugowania możesz zaoszczędzić czas, ćwicząc na dysku USB i próbując uruchomić go za pomocą kvm.
Dan Stahlke,
3

Próbowałem skomentować, ale brakuje mi reputacji :-)

W każdym razie z powodzeniem wykorzystałem niesamowity przewodnik Hamisha do migracji do SSD na moim laptopie roboczym z szyfrowaniem Luks. Kilka uwag:
1. Po utworzeniu zamiany lv również użyj

# mkswap /dev/mapper/crypt-swap 

aby zainicjować zamianę, w przeciwnym razie nie powiedzie się podczas rozruchu, jak wskazano w komentarzu powyżej.
2. rsyncPolecenie jest zbyt restrykcyjne. Kiedy go użyłem --exclude run, natknąłem się na różnego rodzaju dziwne rzeczy, na ogół niewidoczne przez błędy internetowe. Przebieg musi zostać uwzględniony . System jest zresztą pusty podczas uruchamiania w trybie konserwacji, więc może pozostać. Ponadto, jeśli wykluczysz tmp, nowo utworzone na docelowym / tmp i / var / tmp nie dostaną lepkiej warstwy - pamiętaj, aby ustawić je samodzielnie. Skończyło się na czymś takim

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

Ogólnie rzecz biorąc - świetny przewodnik, dokładnie pokazuje przegląd procesu! Nauczy cię, jak to powiedzieć, łowić ryby!

Simowie
źródło
0

[Nie można wstawić komentarza, chociaż ten post należy raczej do komentarza niż do odpowiedzi]

Korzystając z tej metody, możesz również przenieść istniejącą ** niezaszyfrowaną instalację lvm do zaszyfrowanej instalacji lvm na nowym dysku; potrzebujesz tylko dodatkowych kroków (aby zainstalować cryptsetup podczas chroot'owania na dysku docelowym), jak wspomniano na http://blog.andreas-haerter.com/2011/06/18/ubuntu-full-disk-encryption-lvm -luks , w szczególności:

apt-get install lvm2 cryptsetup

Powyższe polecenie instaluje również lvm2 na dysku docelowym, chociaż nie jest to konieczne, byłoby przydatne, gdybyś przeniósł system inny niż lvm do systemu lvm na dysku SSD, używając Live CD / DVD. Zauważ, że musisz również skopiować plik /etc/resolve.conf do swojego chroota, aby móc pomyślnie uruchomić instalację apt-get: jest on wymieniony pod adresem URL, o którym mowa powyżej, fragment kodu:sudo cp /etc/resolv.conf /mnt/sdcroot/etc/resolv.conf

Ponadto łatwiej jest zrobić cp (używając innej instalacji (nie z instalacji źródłowej, to znaczy), np. Live CD / DVD) zamiast rsync dla partycji /, jak opisano w Jak przenieść Ubuntu na dysk SSD

Być może powinieneś także utworzyć swap za pomocą mkswapna /dev/mapper/<swap-name-here>partycji.

Powinien także włączyć obsługę TRIM w tym samym czasie, jak wspomniano na stronie http://www.webupd8.org/2013/01/enable-trim-on-ssd-solid-state-drives.html

OSTRZEŻENIE: Dalszy tekst poniżej nie jest przeznaczony dla osób używających MBR, do których ten temat / wątek wydaje się odnosić. I tak mi się to przydało, więc piszę dla tych, którzy mogą dostosować instrukcje w tym wątku / temacie do swojego dysku GPT.

A dla tych, którzy używają GPT zamiast MBR (używając parted / gparted i gdisk zamiast fdisk), nauczyłem się, w jaki sposób twoja partycja / boot (która nie jest zaszyfrowana) nie powinna być numerowana po twoim urządzeniu Luks w kolejności GPT. Ponieważ utworzyłem partycję ESP po utworzeniu partycji urządzenia / boot i luks za pomocą gparted, musiałem następnie posortować numery partycji, aby / boot wciąż był ponumerowany mniej niż urządzenie luks.

Na marginesie i nie odnosząc się ściśle do tego postu, ci, którzy używają GPT i UEFI z rEFInd, rEFInd może mieć problemy z wyświetleniem listy partycji do rozruchu, jeśli masz wiele ESP w twoim systemie, mam jedną na dysk, więc zamiast tego używając rEFInd, używam gruba, który działa dobrze.

użytkownik2074854
źródło
0

Przed sekcją initramfs i grub może być konieczne:

vgscan
vgchange -a y
Ajeden
źródło
0

Trochę za późno, ale musisz zaktualizować plik /etc/initramfs-tools/conf.d/resume, aby odzwierciedlić modyfikację wymiany. Bez tej modyfikacji przerwiesz funkcję hibernacji.

niebezpieczny
źródło