如何将加密的LVM安装迁移到新磁盘


15

我的笔记本电脑安装有某种程度的自定义,我想直接移至SSD,而无需重新安装Ubuntu,重新安装所有应用程序并再次进行所有其他更改。SSD较小,所以我不能这样做dd

原始安装是通过Ubuntu备用安装程序完成的,选择“使用LVM进行全盘加密”选项。

需要什么步骤,我该怎么做?我希望必须:

  • 设置磁盘分区,加密等
  • 复制数据
  • 安装grub并使其与新的UUID值等配合使用。

Answers:


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放入笔记本电脑中,用手指交叉并启动。

有用的链接

有关cryptsetup内容的良好指南,请访问http://www.debian-administration.org/articles/577

要在外部分区上安装grub:https : //stackoverflow.com/questions/247030/how-to-set-up-grub-in-a-cloned-hard-disk

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


刚刚发现sys的rsync排除排除了一些我想包括的目录。我将提出一个更挑剔的rsync命令并更新此答案。
Hamish Downer

提醒您:您答应对此最佳答案进行更新:-)
guntbert 2013年

在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 2014年

我遵循了您的“跑步时”指南,进行了一些调整(ext4),到目前为止,效果非常好。我更改了fstab UUID以引导到新分区,还更改了root和swap的安装点。除了fstab之外还需要更改吗?我现在要尝试启动:D
Luka,

当您执行luksOpen时,请确保分配与crypttab中使用的相同的标签,否则grub设置将无法正常工作。永远让我明白这一点。另一个答案提到绑定/ run / lvm。不知道是否需要。对于调试,您可以通过在USB磁盘上进行练习并尝试使用kvm进行引导来节省时间。
Dan Stahlke,

3

我试图发表评论,但我缺乏声誉:-)

无论如何,我成功地使用了Hamish出色的指南,将其迁移到基于Linux的luks加密工作笔记本电脑上的ssd中。仅作几点说明:
1.创建交换lv后还使用

# mkswap /dev/mapper/crypt-swap 

初始化交换,否则将在启动期间失败,如上面的注释所示。
2.该rsync命令的限制过于严格。当我将其与一起使用时--exclude run,我遇到了各种各样的veeeeeeery,这些奇怪的现象通常是互联网错误所看不到的。运行必须包括在内。引导进入维护模式时,sys始终为空,因此可以保留。另外,如果您排除了tmp,则在目标/ tmp和/ var / tmp上新创建的内容也不会令人发指-请记住自己进行设置。我最终使用了类似的东西

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

总体而言-出色的指南,可准确显示过程概述!可以教您如何钓鱼!


0

[无法发表评论,尽管此帖子属于评论而不是答案]

使用这种方法,您还可以将现有的**未**加密的lvm安装移动到新磁盘上的加密的lvm安装;您只需要执行其他步骤(将chroot插入目标磁盘时安装cryptsetup),如http://blog.andreas-haerter.com/2011/06/18/ubuntu-full-disk-encryption-lvm所述-luks,特别是:

apt-get install lvm2 cryptsetup

上面的命令还会在目标磁盘上安装lvm2,尽管这是不必要的,但是如果您要使用Live CD / DVD将非lvm系统移动到SSD上的lvm系统,这将很有用。请注意,您还需要将/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>分区上使用创建交换。

http://www.webupd8.org/2013/01/enable-trim-on-ssd-solid-state-drives.html所述,还应同时启用TRIM支持

警告:以下更多文字不适用于使用MBR的用户,而本主题/主题似乎与之相关。无论如何,我都觉得这很有用,因此发布帖子是为了使那些可以将此线程/主题中的指令适应其GPT磁盘的用户受益。

对于那些使用GPT而不是MBR的用户(使用parted / gparted和gdisk而不是fdisk),我学到了很难的方法,即/ boot分区(未加密)不应按lupt设备的GPT顺序编号。因为我是在使用gparted创建/ boot和luks设备分区之后创建了ESP分区的,所以我不得不对分区号进行排序,以使/ boot的编号仍小于luks设备的编号。

顺便说一句,从严格意义上来说,与本帖子无关,那些将gPT和UEFI与rEFInd,rEFInd结合使用的人,如果您的系统中有多个ESP,则每个磁盘都有一个,可能无法向您显示要启动的分区列表。使用rEFInd的过程中,我使用的是grub,效果很好。


0

initramfs和grub部分之前您可能需要:

vgscan
vgchange -a y

0

有点晚了,但是您必须更新/etc/initramfs-tools/conf.d/resume文件以反映交换修改。如果不进行此修改,您将破坏休眠功能。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.