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

我有一个有点定制的笔记本电脑安装我想直接转移到SSD,而不必重新安装Ubuntu,重新安装所有的应用程序,并再次进行所有其他更改。 SSD较小,所以我不能只做dd

原始安装是使用Ubuntu备用安装程序完成的,选择带有LVM选项的完整磁盘加密。

需要哪些步骤以及如何执行这些步骤? 我希望不得不:

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

分区和文件复制 – 运行时

我是从运行系统开始做到这一点的。 我将新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中的root用户并运行以下命令:

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

现在,您将看到系统中各种磁盘的所有UUID 。 您需要编辑/etc/fstab/etc/crypttab的UUID以匹配/dev/sdc?的值/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放入笔记本电脑内,交叉手指并启动。

有用的链接

http://www.debian-administration.org/articles/577上有关于cryptsetup的好指南

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

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

我试着评论,但我缺乏声誉:-)

无论如何,我成功地使用了Hamish的惊人指南迁移到基于Linux的luks加密工作笔记本电脑上的ssd。 只是几点评论:
1.创建交换后lv也使用

 # mkswap /dev/mapper/crypt-swap 

初始化交换,否则在引导期间失败,如上面的注释所示。
2. rsync命令过于严格。 当我使用它--exclude run ,我遇到了各种各样的因为互联网错误而看不到的奇怪的东西。 必须包括运行 。 启动到维护模式时,sys无论如何都是空的,所以它可以保留。 此外,如果排除tmp,则在目标/ tmp和/ var / tmp上新创建的内容不会产生粘滞 – 请记住自己设置它们。 我最终使用了类似的东西

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

总体而言 – 一个很棒的指南,准确地显示了过程的概述! 教你如何钓鱼,所以说!

[无法发表评论,虽然这篇文章属于评论而不是答案]

使用此方法,您还可以将现有的**非**加密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)而不是/ partition的rsync,如如何将Ubuntu移动到SSD中所述

您也可以在/dev/mapper/分区上使用mkswap创建交换。

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

警告:下面的更多文本不适用于使用MBR的人,这个主题/主题似乎与此有关。 无论如何我发现这很有用,所以我发布的post是为了让那些能够将这个主题/主题中的说明适应他们的GPT磁盘的人的利益。

对于那些使用GPT而不是MBR(使用parted / gparted和gdisk而不是fdisk)的人,我了解到你的/ boot分区(未加密的)不应该按照GPT顺序在你的luks设备之后编号。 因为我在使用gparted创建/ boot和luks设备分区后创建了一个ESP分区,所以我不得不对分区号进行排序,以使/ boot仍然编号小于luks设备。

严格来说,与此post无关,那些使用GPT和UEFI与rEFInd,rEFInd的人可能会遇到问题,如果您的系统中有多个ESP,则会向您显示要启动的分区列表,我每个磁盘都有一个,所以相反使用rEFInd,我使用grub,工作正常。

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

 vgscan vgchange -ay 

有点晚了,但你必须更新/etc/initramfs-tools/conf.d/resume文件以反映交换修改。 如果没有这个修改,你将破坏hibernatefunction。