Migrieren einer verschlüsselten LVM-Installation auf eine neue Festplatte

15

Ich habe eine etwas angepasste Laptop-Installation. Ich möchte direkt auf eine SSD umsteigen, ohne Ubuntu neu installieren zu müssen, alle Apps neu installieren und alle anderen Änderungen erneut vornehmen zu müssen. Die SSD ist kleiner, also kann ich das nicht einfach machen dd.

Die ursprüngliche Installation wurde mit dem alternativen Ubuntu-Installationsprogramm durchgeführt, wobei die Option für die vollständige Festplattenverschlüsselung mit LVM ausgewählt wurde.

Welche Schritte sind erforderlich und wie mache ich sie? Ich erwarte zu müssen:

  • Richten Sie die Festplattenpartitionen, die Verschlüsselung usw
  • Kopieren Sie die Daten über
  • Installiere grub und bringe es zum Laufen mit neuen UUID-Werten usw.
Hamish Downer
quelle

Antworten:

14

Partitionierung und Dateikopie - während des Betriebs

Ich habe das gemacht, indem ich mit dem laufenden System angefangen habe. Ich habe die neue SSD in einen USB-SATA-Adapter gesteckt und partitioniert, LVM eingerichtet und die Dateien kopiert.

# 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

Ihre Festplatte sollte jetzt so aussehen:

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

Der nächste Schritt besteht darin, die Verschlüsselung auf die Partition und LVM auf die Verschlüsselung zu setzen.

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

Erstellen Sie nun die Dateisysteme und hängen Sie sie ein und kopieren Sie Ihr System über.

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/

Bis zu diesem Punkt können Sie das System am Laufen halten und verwenden. Jetzt müssen Sie das System herunterfahren und von einer Live-CD / USB booten, damit das System heruntergefahren werden kann.

Partitionierung und Dateikopie - Live-CD / USB

Sobald Sie gebootet haben, öffnen Sie ein Terminal und:

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/

UUIDs ändern

Jetzt sind wir root in der Chroot und führen die folgenden Befehle aus:

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

Jetzt sehen Sie alle UUIDs für die verschiedenen Datenträger im System. Sie müssen die UUIDs in bearbeiten /etc/fstabund /etc/crypttabmit den Werten für übereinstimmen/dev/sdc?

In müssen /etc/fstabSie die UUID für die Startdiskette verwenden - /dev/sdc1wenn Ihre Datenträger den gleichen Buchstaben wie ich haben.

In müssen /etc/crypttabSie die UUID für die andere (große) Partition verwenden - /dev/sdc5wenn Ihre Festplatten den gleichen Buchstaben wie ich haben.

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

Fahren Sie jetzt herunter, legen Sie die SSD in Ihren Laptop, drücken Sie die Daumen und booten Sie.

Nützliche Links

Guter Leitfaden für das Cryptsetup-Material unter http://www.debian-administration.org/articles/577

Zum Installieren von grub auf einer externen Partition: /programming/247030/how-to-set-up-grub-in-a-cloned-hard-disk

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

Hamish Downer
quelle
Ich habe gerade herausgefunden, dass der rsync-Ausschluss von sys einige Verzeichnisse ausschließt, die ich einschließen wollte. Ich werde einen anspruchsvolleren rsync-Befehl ausarbeiten und diese Antwort aktualisieren.
Hamish Downer
Nur zur Erinnerung: Du hast ein Update für diese exzellente Antwort versprochen :-)
guntbert
Im chroot-Bereich musste ich vor dem Mounten die Mount-Punkte erstellen: sudo mount -t proc proc /mnt/sdcroot/proc sudo mount -t sysfs sys /mnt/sdcroot/sys sudo mount -o bind /dev /mnt/sdcroot/devbefore do: sudo mkdir /mnt/sdcroot/proc sudo mkdir /mnt/sdcroot/sys--- In meinem Fall funktionierte der Befehl zum Erstellen des initramfs nicht, da die Kernel-Versionen nicht übereinstimmten und initramfs daher nicht konnten finde den richtigen Kernel in / boot, so dass ich nicht alles zum Laufen bringen kann.
Blindfreddy
Ich habe Ihre Anleitung "beim Laufen" befolgt, ein paar Anpassungen vorgenommen (ext4) und bisher hat es wunderbar funktioniert. Ich habe in fstab die UUID für das Booten auf die neue Partition geändert. Ich habe auch die Mountpunkte für root und swap geändert. Muss außer fstab noch etwas geändert werden? Ich werde jetzt versuchen zu booten: D
Luka
Wenn Sie luksOpen ausführen, achten Sie darauf, dass Sie die gleiche Bezeichnung wie in crypttab verwenden, da sonst das Grub-Setup nicht ordnungsgemäß funktioniert. Ich habe ewig gebraucht, um das herauszufinden. In einer anderen Antwort wird binding / run / lvm erwähnt. Weiß nicht, ob das nötig ist. Zum Debuggen können Sie Zeit sparen, indem Sie auf einem USB-Laufwerk üben und versuchen, es mit kvm zu starten.
Dan Stahlke
3

Ich habe versucht zu kommentieren, aber mir fehlt der Ruf :-)

Wie auch immer, ich habe die erstaunliche Anleitung von Hamish erfolgreich verwendet, um auf meinem Linux-basierten, mit luks verschlüsselten Arbeitslaptop auf eine SSD zu migrieren. Nur ein paar Anmerkungen:
1. Nach dem Erstellen des Swap lv auch verwenden

# mkswap /dev/mapper/crypt-swap 

um den Swap zu initialisieren, andernfalls schlägt er beim Booten fehl, wie im obigen Kommentar angegeben.
2. Der rsyncBefehl ist zu restriktiv. Wenn ich es mit benutzte --exclude run, traf ich auf alle Arten von Veeeeeeery, die im Allgemeinen von Internetfehlern unbemerkt blieben. Der Lauf muss enthalten sein . Das sys ist beim Booten im Wartungsmodus ohnehin leer, so dass es bleiben kann. Auch wenn Sie tmp ausschließen, erhalten die neu auf dem Ziel / tmp und / var / tmp erstellten Dateien kein Sticky-Bit. Vergessen Sie nicht, sie selbst festzulegen. Am Ende habe ich so etwas benutzt

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

Insgesamt - ein guter Leitfaden, zeigt den Überblick über den Prozess genau! Bringt dir sozusagen das Angeln bei!

Sims
quelle
0

[Konnte keinen Kommentar einfügen, obwohl dieser Beitrag eher in einen Kommentar als in eine Antwort gehört.]

Mit dieser Methode können Sie auch eine vorhandene ** nicht ** verschlüsselte lvm-Installation in eine verschlüsselte lvm-Installation auf der neuen Festplatte verschieben. Sie müssen nur die zusätzlichen Schritte ausführen (um Cryptsetup zu installieren, während es auf der Zieldiskette gespeichert ist), wie unter http://blog.andreas-haerter.com/2011/06/18/ubuntu-full-disk-encryption-lvm erwähnt -luks , speziell:

apt-get install lvm2 cryptsetup

Der obige Befehl installiert auch lvm2 auf dem Zieldatenträger. Dies ist zwar nicht erforderlich, wäre jedoch hilfreich gewesen, wenn Sie ein System ohne lvm mithilfe einer Live-CD / DVD auf ein lvm-System auf Ihrer SSD verschoben hätten. Beachten Sie, dass Sie auch die Datei /etc/resolve.conf in Ihre Chroot kopieren müssen, damit Sie apt-get install erfolgreich ausführen können. Sie wird unter der oben genannten URL (Codefragment) angegeben:sudo cp /etc/resolv.conf /mnt/sdcroot/etc/resolv.conf

Außerdem ist es einfacher, eine cp (mit einer anderen Installation (nicht aus der Quellinstallation), z. B. einer Live-CD / DVD), anstelle von rsync für die / -Partition auszuführen, wie unter Verschieben von Ubuntu auf eine SSD beschrieben

Sie sollten Swap möglicherweise auch mit mkswapauf Ihrer /dev/mapper/<swap-name-here>Partition erstellen .

Sollte gleichzeitig auch die TRIM-Unterstützung aktivieren, wie unter http://www.webupd8.org/2013/01/enable-trim-on-ssd-solid-state-drives.html erwähnt

WARNUNG: Weiter unten stehender Text ist nicht für Benutzer von MBR gedacht, auf die sich dieses Thema / dieser Thread zu beziehen scheint. Ich fand das trotzdem nützlich, also poste ich für diejenigen, die Anweisungen in diesem Thread / Thema an ihre GPT-Festplatte anpassen können.

Und für diejenigen, die GPT anstelle von MBR verwenden (mit parted / gparted und gdisk anstelle von fdisk), habe ich gelernt, dass Ihre / boot-Partition (die unverschlüsselt ist) nicht nach Ihrem luks-Gerät in der GPT-Reihenfolge nummeriert werden sollte. Da ich nach dem Erstellen der Partitionen / boot und luks mit gparted eine ESP-Partition erstellt hatte, musste ich die Partitionsnummern sortieren, sodass / boot immer noch weniger nummeriert war als das luks-Gerät.

Abgesehen davon und nicht im Zusammenhang mit diesem Beitrag, haben diejenigen, die GPT und UEFI mit rEFInd verwenden, möglicherweise Probleme, eine Liste der Partitionen anzuzeigen, von denen gebootet werden kann, wenn Sie mehrere ESPs in Ihrem System haben. Ich habe also stattdessen eine pro Festplatte Wenn ich rEFInd benutze, benutze ich grub, was gut funktioniert.

user2074854
quelle
0

Vor dem Abschnitt initramfs und grub müssen Sie möglicherweise:

vgscan
vgchange -a y
Ajeden
quelle
0

Ein bisschen zu spät, aber Sie müssen die Datei /etc/initramfs-tools/conf.d/resume aktualisieren, um die Swap-Änderung wiederzugeben. Ohne diese Änderung wird der Ruhezustand unterbrochen.

billdangerous
quelle