Cara memigrasi instalasi LVM terenkripsi ke disk baru

15

Saya memiliki instalasi laptop yang agak disesuaikan. Saya ingin pindah ke SSD secara langsung, tanpa harus menginstal ulang Ubuntu, instal ulang semua aplikasi dan buat semua perubahan lainnya lagi. SSD lebih kecil, jadi saya tidak bisa begitu saja dd.

Instalasi asli dilakukan dengan installer alternatif Ubuntu, memilih enkripsi disk lengkap dengan opsi LVM.

Langkah-langkah apa yang diperlukan dan bagaimana saya melakukannya? Saya berharap harus:

  • mengatur partisi disk, enkripsi dll
  • salin data ke seberang
  • instal grub dan aktifkan dengan nilai-nilai UUID baru dll.
Hamish Downer
sumber

Jawaban:

14

Mempartisi dan menyalin file - saat berjalan

Saya melakukan ini dengan mulai dengan sistem yang sedang berjalan. Saya menancapkan SSD baru ke adaptor USB SATA dan mempartisinya, mengatur LVM dan menyalin file.

# 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

Disk Anda sekarang akan terlihat seperti:

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

Langkah selanjutnya adalah meletakkan enkripsi pada partisi dan LVM di atas enkripsi.

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

Sekarang buat filesystem dan mount mereka dan salin sistem Anda.

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/

Hingga saat ini Anda dapat menjaga sistem tetap berjalan dan menggunakannya. Sekarang Anda perlu mematikan dan boot ke live CD / USB sehingga Anda bisa mendapatkan sistem dalam keadaan shutdown.

Mempartisi dan menyalin file - live CD / USB

Setelah Anda mem-boot, buka terminal dan:

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/

Mengubah UUID

Sekarang kita root di dalam chroot dan jalankan perintah berikut:

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

Sekarang Anda akan melihat semua UUID untuk berbagai disk di sistem. Anda perlu mengedit UUID /etc/fstabdan /etc/crypttabmencocokkan nilai untuk/dev/sdc?

Di dalam /etc/fstabAnda perlu menggunakan UUID untuk disk boot - /dev/sdc1jika disk Anda memiliki huruf yang sama dengan saya.

Dalam /etc/crypttabAnda perlu menggunakan UUID untuk partisi lain (besar) - /dev/sdc5jika disk Anda memiliki surat yang sama seperti saya.

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

Sekarang shutdown, masukkan SSD ke dalam laptop Anda, silangkan jari Anda dan boot.

Tautan yang bermanfaat

Panduan bagus untuk hal-hal cryptsetup di http://www.debian-administration.org/articles/577

Untuk menginstal grub pada partisi eksternal: /programming/247030/how-to-set-up-up-grub-in-a-cloned-hard-disk

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

Hamish Downer
sumber
Baru saja menemukan rsync mengecualikan sys mengecualikan beberapa direktori yang ingin saya sertakan. Saya akan datang dengan perintah rsync yang lebih cerdas dan memperbarui jawaban ini.
Hamish Downer
Sekadar pengingat: Anda menjanjikan pembaruan untuk jawaban yang luar biasa ini :-)
guntbert
Di bagian chroot, sebelum melakukan mount, saya harus membuat mount point: sudo mount -t proc proc /mnt/sdcroot/proc sudo mount -t sysfs sys /mnt/sdcroot/sys sudo mount -o bind /dev /mnt/sdcroot/devsebelumnya lakukan: sudo mkdir /mnt/sdcroot/proc sudo mkdir /mnt/sdcroot/sys--- Dalam kasus saya, perintah untuk membuat initramfs tidak berfungsi, karena versi kernel tidak cocok dan initramfs tidak bisa temukan kernel yang tepat di / boot, jadi saya tidak bisa menyelesaikan semuanya.
Blindfreddy
Saya telah mengikuti panduan "saat menjalankan", membuat beberapa penyesuaian (ext4) dan sejauh ini berhasil dengan sangat baik. Saya mengubah UUID untuk fstab untuk boot ke partisi baru. Saya juga mengubah mountpoint untuk root dan swap. Apakah ada hal lain selain fstab yang perlu diubah? Saya akan mencoba boot sekarang: D
Luka
Ketika Anda melakukan luksOpen, pastikan untuk menetapkan label yang sama yang digunakan di crypttab atau pengaturan grub tidak akan berfungsi dengan baik. Butuh saya selamanya untuk mencari tahu. Jawaban lain menyebutkan binding / run / lvm. Tidak tahu apakah itu diperlukan. Untuk debugging Anda dapat menghemat waktu dengan berlatih pada disk USB dan mencoba untuk mem-bootnya dengan kvm.
Dan Stahlke
3

Saya mencoba berkomentar, tetapi saya tidak memiliki reputasi :-)

Bagaimanapun, saya berhasil menggunakan panduan luar biasa oleh Hamish untuk bermigrasi ke ssd di laptop kerja terenkripsi luks berbasis linux saya. Hanya beberapa komentar:
1. Setelah membuat swap lv juga gunakan

# mkswap /dev/mapper/crypt-swap 

untuk menginisialisasi swap, jika tidak gagal saat boot, seperti yang ditunjukkan dalam komentar di atas.
2. rsyncPerintah itu terlalu ketat. Ketika saya menggunakannya --exclude run, saya bertemu dengan semua jenis alat aneh yang umumnya tidak terlihat oleh kesalahan internet. Proses harus dimasukkan . Sistem ini tetap kosong saat boot ke mode pemeliharaan, sehingga bisa tetap ada. Juga jika Anda mengecualikan tmp, yang baru dibuat pada target / tmp dan / var / tmp tidak mendapatkan bit yang lengket - jangan lupa untuk mengaturnya sendiri. Saya akhirnya menggunakan sesuatu seperti

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

Secara keseluruhan - panduan hebat, menunjukkan ikhtisar proses secara akurat! Mengajari Anda cara memancing, bisa dikatakan!

Sims
sumber
0

[Tidak dapat memberikan komentar, meskipun postingan ini memiliki komentar dan bukan pada jawaban]

Dengan menggunakan metode ini, Anda juga dapat memindahkan instalasi lvm terenkripsi ** non - ** yang ada ke instalasi lvm terenkripsi pada disk baru; Anda hanya perlu langkah-langkah tambahan (untuk menginstal cryptsetup saat chroot'ed ke disk target), sebagaimana disebutkan di http://blog.andreas-haerter.com/2011/06/18/ubuntu-full-disk-encryption-lvm -luks , khususnya:

apt-get install lvm2 cryptsetup

Perintah di atas juga menginstal lvm2 pada disk target, meskipun itu tidak perlu, itu akan berguna jika Anda memindahkan sistem non-lvm ke sistem lvm di SSD Anda, menggunakan Live CD / DVD. Perhatikan bahwa Anda juga perlu menyalin melalui /etc/resolve.conf ke chroot Anda agar Anda dapat menjalankan apt-get install dengan sukses: disebutkan di URL yang dirujuk di atas, bagian kode:sudo cp /etc/resolv.conf /mnt/sdcroot/etc/resolv.conf

Juga, lebih mudah untuk melakukan cp (menggunakan instalasi yang berbeda (bukan dari dalam instalasi sumber yang), misalnya, CD / DVD langsung) daripada rsync untuk partisi /, seperti yang dijelaskan pada Cara memindahkan Ubuntu ke SSD

Anda mungkin juga harus membuat swap menggunakan mkswapdi /dev/mapper/<swap-name-here>partisi Anda .

Seharusnya juga mengaktifkan dukungan TRIM pada saat yang sama, sebagaimana disebutkan di http://www.webupd8.org/2013/01/enable-trim-on-ssd-solid-state-drives.html

PERINGATAN: Teks lebih lanjut di bawah ini bukan untuk mereka yang menggunakan MBR, yang sepertinya berkaitan dengan topik / utas ini. Saya menemukan ini berguna, jadi saya memposting untuk kepentingan mereka yang dapat menyesuaikan instruksi di utas / topik ini ke disk GPT mereka.

Dan bagi mereka yang menggunakan GPT bukan MBR (menggunakan parted / gparted dan gdisk bukan fdisk), saya belajar dengan cara yang sulit bahwa partisi / boot Anda (yang tidak dienkripsi) tidak boleh diberi nomor setelah perangkat luks Anda dalam urutan GPT. Karena saya telah membuat partisi ESP setelah membuat partisi / boot dan perangkat luks menggunakan gparted, saya kemudian harus mengurutkan nomor partisi sehingga / boot masih bernomor lebih sedikit daripada perangkat luks.

Sebagai tambahan dan tidak terkait dengan tulisan ini, mereka yang menggunakan GPT dan UEFI dengan rEFInd, rEFInd mungkin memiliki masalah dalam memberikan Anda daftar partisi untuk di-boot dari jika Anda memiliki beberapa ESP di sistem Anda, saya memiliki satu per disk, jadi alih-alih saya memiliki satu ESP di sistem Anda, menggunakan rEFInd, saya menggunakan grub, yang berfungsi dengan baik.

pengguna2074854
sumber
0

Sebelum bagian initramfs dan grub Anda mungkin perlu:

vgscan
vgchange -a y
Ajeden
sumber
0

Agak terlambat, tetapi Anda harus memperbarui /etc/initramfs-tools/conf.d/resume file untuk mencerminkan modifikasi swap. Tanpa modifikasi ini Anda akan merusak fungsi hibernasi.

billdangerous
sumber