Cách di chuyển cài đặt LVM được mã hóa sang đĩa mới


15

Tôi có một bản cài đặt máy tính xách tay tùy chỉnh, tôi muốn chuyển trực tiếp sang SSD, mà không phải cài đặt lại Ubuntu, cài đặt lại tất cả các ứng dụng và thực hiện lại tất cả các thay đổi khác. SSD nhỏ hơn, vì vậy tôi không thể làm được dd.

Quá trình cài đặt ban đầu được thực hiện với trình cài đặt thay thế Ubuntu, chọn mã hóa toàn bộ đĩa với tùy chọn LVM.

Những bước cần thiết và làm thế nào để tôi làm chúng? Tôi hy vọng sẽ phải:

  • thiết lập phân vùng đĩa, mã hóa, vv
  • sao chép dữ liệu trên
  • cài đặt grub và làm cho nó hoạt động với các giá trị UUID mới, v.v.

Câu trả lời:


14

Phân vùng và sao chép tệp - trong khi chạy

Tôi đã làm điều này bằng cách bắt đầu với hệ thống đang chạy. Tôi đã cắm SSD mới vào bộ điều hợp USB SATA và phân vùng nó, thiết lập LVM và sao chép các tập tin qua.

# 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

Đĩa của bạn bây giờ trông giống như:

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

Bước tiếp theo là đặt mã hóa trên phân vùng và LVM lên trên mã hóa.

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

Bây giờ làm cho các hệ thống tập tin và gắn kết chúng và sao chép hệ thống của bạn trên.

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/

Cho đến thời điểm này, bạn có thể giữ cho hệ thống chạy và sử dụng nó. Bây giờ bạn cần tắt máy và khởi động vào đĩa CD / USB trực tiếp để bạn có thể đưa hệ thống về trạng thái tắt máy.

Phân vùng và sao chép tệp - CD / USB trực tiếp

Khi bạn đã khởi động, hãy mở một thiết bị đầu cuối và:

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/

Thay đổi UUID

Bây giờ chúng tôi đã root bên trong chroot và chạy các lệnh sau:

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

Bây giờ bạn sẽ thấy tất cả các UUID cho các đĩa khác nhau trong hệ thống. Bạn sẽ cần chỉnh sửa các UUID trong /etc/fstab/etc/crypttabđể khớp với các giá trị cho/dev/sdc?

Trong /etc/fstabbạn cần sử dụng UUID cho đĩa khởi động - /dev/sdc1nếu đĩa của bạn có cùng chữ cái với tôi.

Trong /etc/crypttabbạn cần sử dụng UUID cho phân vùng (lớn) khác - /dev/sdc5nếu các đĩa của bạn có cùng chữ cái với tôi.

initramfs và 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

Bây giờ tắt máy, đặt SSD vào máy tính xách tay của bạn, bắt chéo ngón tay của bạn và khởi động.

Liên kết hữu ích

Hướng dẫn tốt cho công cụ cryptsetup tại http: //www.debian-adftime.org/articles/577

Để cài đặt grub trên một phân vùng bên ngoài: /programming/247030/how-to-set-up-grub-in-a-clenced-hard-disk

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


Chỉ cần phát hiện ra rsync loại trừ sys loại trừ một số thư mục tôi muốn đưa vào. Tôi sẽ đưa ra một lệnh rsync sáng suốt hơn và cập nhật câu trả lời này.
Hamish Downer

Xin nhắc lại: bạn đã hứa cập nhật cho câu trả lời xuất sắc này :-)
guntbert

Trong phần chroot, trước khi cài đặt, tôi phải tạo các điểm gắn kết: sudo mount -t proc proc /mnt/sdcroot/proc sudo mount -t sysfs sys /mnt/sdcroot/sys sudo mount -o bind /dev /mnt/sdcroot/devtrước đó: sudo mkdir /mnt/sdcroot/proc sudo mkdir /mnt/sdcroot/sys--- Trong trường hợp của tôi, lệnh tạo initramfs không hoạt động, vì các phiên bản kernel không khớp và vì vậy initramfs không thể tìm đúng kernel trong / boot, vì vậy tôi không thể làm cho toàn bộ hoạt động.
Blindfreddy

Tôi đã làm theo hướng dẫn "trong khi chạy" của bạn, thực hiện một vài điều chỉnh (ext4) và cho đến nay nó đã hoạt động tuyệt vời. Tôi đã thay đổi trong fstab UUID để khởi động sang phân vùng mới. Tôi cũng đã thay đổi mountpoint cho root và trao đổi. Có điều gì khác ngoài fstab cần thay đổi không? Tôi sẽ thử khởi động ngay bây giờ: D
Luka

Khi bạn thực hiện luksOpen, hãy đảm bảo gán cùng nhãn được sử dụng trong crypttab hoặc thiết lập grub sẽ không hoạt động chính xác. Mất tôi mãi mãi để tìm ra điều đó. Một câu trả lời khác đề cập đến ràng buộc / chạy / lvm. Không biết nếu cần. Để gỡ lỗi, bạn có thể tiết kiệm thời gian bằng cách thực hành trên đĩa USB và cố gắng khởi động nó bằng kvm.
Dan Stahlke

3

Tôi đã cố gắng bình luận, nhưng tôi thiếu danh tiếng :-)

Dù sao, tôi đã sử dụng thành công hướng dẫn tuyệt vời của Hamish để chuyển sang ssd trên máy tính xách tay làm việc được mã hóa luks dựa trên linux của tôi. Chỉ cần một vài lưu ý:
1. Sau khi tạo lv trao đổi cũng sử dụng

# mkswap /dev/mapper/crypt-swap 

để khởi tạo trao đổi, nếu không nó bị lỗi trong khi khởi động, như đã nêu trong nhận xét ở trên.
2. rsyncLệnh này quá hạn chế. Khi tôi sử dụng nó --exclude run, tôi đã gặp phải tất cả các loại veeeeeeery lạ thường không thấy được bởi các lỗi internet. Việc chạy phải được bao gồm . Các sys dù sao cũng trống khi khởi động vào chế độ bảo trì, vì vậy nó có thể ở lại. Ngoài ra, nếu bạn loại trừ tmp, cái mới được tạo trên đích / tmp và / var / tmp sẽ không nhận được một chút dính - hãy nhớ tự đặt chúng. Tôi đã kết thúc bằng cách sử dụng một cái gì đó như

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

Nhìn chung - một hướng dẫn tuyệt vời, cho thấy tổng quan của quá trình một cách chính xác! Dạy bạn cách câu cá, có thể nói như vậy!


0

[Không thể đưa ra nhận xét, mặc dù bài đăng này thuộc về một nhận xét thay vì trong câu trả lời]

Sử dụng phương pháp này, bạn cũng có thể chuyển cài đặt lvm được mã hóa ** không - ** hiện có sang cài đặt lvm được mã hóa trên đĩa mới; bạn chỉ cần các bước bổ sung (để cài đặt cryptsetup trong khi chroot'ed vào đĩa đích), như đã đề cập tại http://blog.andreas-haerter.com/2011/06/18/ubfox-full-disk-encoding-lvm -luks , cụ thể:

apt-get install lvm2 cryptsetup

Lệnh trên cũng cài đặt lvm2 trên đĩa đích, mặc dù điều đó là không cần thiết, nhưng sẽ rất hữu ích nếu bạn chuyển hệ thống không lvm sang hệ thống lvm trên SSD, sử dụng Live CD / DVD. Lưu ý rằng bạn cũng cần sao chép /etc/resolve.conf vào chroot của bạn để bạn có thể chạy cài đặt apt-get thành công: nó được đề cập tại URL được đề cập ở trên, đoạn mã:sudo cp /etc/resolv.conf /mnt/sdcroot/etc/resolv.conf

Ngoài ra, việc tạo cp dễ dàng hơn (sử dụng cài đặt khác (không phải từ cài đặt nguồn), ví dụ: CD / DVD trực tiếp) thay vì rsync cho phân vùng /, như được mô tả trong Cách chuyển Ubuntu sang SSD

Bạn cũng có thể nên tạo trao đổi bằng cách sử dụng mkswaptrên /dev/mapper/<swap-name-here>phân vùng của bạn .

Cũng nên kích hoạt hỗ trợ TRIM cùng một lúc, như được đề cập tại http://www.webupd8.org/2013/01/enable-trim-on-ssd-solid-state-drive.html

CẢNH BÁO: Văn bản khác bên dưới không dành cho những người sử dụng MBR, mà chủ đề / chủ đề này dường như liên quan đến. Dù sao tôi cũng thấy điều này hữu ích, vì vậy tôi đang đăng bài vì lợi ích của những người có thể điều chỉnh hướng dẫn trong chủ đề / chủ đề này vào đĩa GPT của họ.

Và đối với những người sử dụng GPT thay vì MBR (sử dụng parted / gparted và gdisk thay vì fdisk), tôi đã học được một cách khó khăn là phân vùng / boot của bạn (không được mã hóa) không nên được đánh số sau thiết bị luks của bạn theo thứ tự GPT. Vì tôi đã tạo phân vùng ESP sau khi tạo phân vùng / boot và luks bằng gparted, sau đó tôi phải sắp xếp các số phân vùng để / boot vẫn được đánh số ít hơn thiết bị luks.

Nói một cách rõ ràng và không liên quan đến bài đăng này, những người sử dụng GPT và UEFI với rEFInd, rEFInd có thể gặp sự cố khi đưa ra danh sách các phân vùng để khởi động nếu bạn có nhiều ESP trong hệ thống của mình, vì vậy thay vào đó tôi có một ESP sử dụng rEFInd, tôi đang sử dụng grub, hoạt động tốt.


0

Trước phần initramfs và grub, bạn có thể cần phải:

vgscan
vgchange -a y

0

Hơi muộn một chút, nhưng bạn phải cập nhật tệp /etc/initramfs-tools/conf.d/resume để phản ánh sửa đổi hoán đổi. Nếu không có sửa đổi này, bạn sẽ phá vỡ chức năng ngủ đông.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.