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

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

我有一台经过定制的笔记本电脑,我想直接将其移至 SSD,而不必重新安装 Ubuntu、重新安装所有应用程序并再次进行所有其他更改。SSD 较小,所以我不能这样做dd

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

需要哪些步骤?如何执行?我预计必须:

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

答案1

分区和文件复制 - 运行时

我通过从正在运行的系统开始执行此操作。我将新的 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,以便让系统处于关机状态。

分区和文件复制 - Live 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系统中各个磁盘的 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

答案2

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

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

# mkswap /dev/mapper/crypt-swap 

初始化交换,否则它会在启动过程中失败,如上面的注释所示。2
. 该rsync命令本身限制太多。当我将它与 一起使用时--exclude run,我遇到了各种非常奇怪的错误,这些错误通常在互联网上是看不到的。必须包括跑步。无论如何,在启动到维护模式时,系统是空的,因此它可以保留。此外,如果您排除 tmp,则在目标 /tmp 和 /var/tmp 上新创建的不会获得粘性位 - 请记住自行设置它们。我最终使用了类似

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

总体而言 - 很棒的指南,准确展示了流程概述!可以说教你如何钓鱼!

答案3

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

使用此方法,您还可以将现有的**非**加密 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>

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

警告:下面的文字不适用于使用 MBR 的用户,本主题/线索似乎与此有关。无论如何,我发现这很有用,所以我发帖是为了那些能够将此线索/主题中的说明改编为 GPT 磁盘的人的利益。

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

顺便说一下,严格来说与这篇文章无关,那些使用 GPT 和 UEFI 与 rEFInd 的人,如果您的系统中有多个 ESP,rEFInd 可能无法向您显示要从中启动的分区列表,我每个磁盘都有一个 ESP,因此我没有使用 rEFInd,而是使用 grub,效果很好。

答案4

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

相关内容