本质上,我关注的是这答案是将具有全盘加密的系统的未加密内容从实时存储棒克隆到新的(较小的)SSD。我以为这只包括映射加密分区,然后进行通常的操作dd
,但没有……
这些是所涉及的分区/设备:
/dev/sda: Old disc, with encrypted partition
/dev/sda1: FAT32 with boot flag
/dev/sda2: EXT2, containing some EFI and grub stuff
/dev/sda3: LUKS partition I want to clone (about 460 GiB);
contains a swap and an ecrypted EXT4 with about 20 GiB used
/dev/sdc: New SSD
首先,我使用 gparted 将/dev/sda1
和复制/dev/sda2
到/dev/sdc{1,2}
,这似乎可行(两者都可挂载)。然后,我创建了一个足够大的新 EXT4 分区,以容纳 上的加密 EXT4 的内容/dev/sdc3
,并在 上的剩余空间上创建了一个新的交换分区/dev/sdc4
。
然后我/dev/sda3
用解密
sudo cryptsetup luksOpen /dev/sda3 crypt1
并复制其内容,使用
sudo dd if=/dev/mapper/ubuntu--vg-root of=/dev/sdc3
(其中/dev/mapper/ubuntu--vg-root
包含原始根分区并且可以正确安装)。在加密分区上实际使用的 19 GiB 左右之后,此操作完成。
从那一刻起,似乎有些东西失败了;我无法再安装它/dev/sdc3
,因为它似乎坏了。
ubuntu@ubuntu:~$ sudo mount /dev/sdc3 /mnt
mount: wrong fs type, bad option, bad superblock on /dev/sdc3,
missing codepage or helper program, or other error
In some cases useful info is found in syslog - try
dmesg | tail or so
ubuntu@ubuntu:~$ sudo fsck /dev/sdc3
fsck from util-linux 2.20.1
e2fsck 1.42.9 (4-Feb-2014)
Error reading block 60325888 (Invalid argument). Ignore error<y>? yes
Force rewrite<y>? yes
Superblock has an invalid journal (inode 8).
Clear<y>? yes
*** ext3 journal has been deleted - filesystem is now ext2 only ***
Superblock has_journal flag is clear, but a journal inode is present.
Clear<y>? yes
The filesystem size (according to the superblock) is 120880128 blocks
The physical size of the device is 14848000 blocks
Either the superblock or the partition table is likely to be corrupt!
Abort<y>? yes
Error writing block 60325888 (Invalid argument). Ignore error<y>? yes
/dev/sdc3: ***** FILE SYSTEM WAS MODIFIED *****
这就是建议dmesg | tail
产生的结果:
[ 51.575179] EXT4-fs (sdc2): mounting ext2 file system using the ext4 subsystem
[ 51.580102] EXT4-fs (sdc3): bad geometry: block count 120880128 exceeds size of device (14848000 blocks)
[ 51.582477] EXT4-fs (sdc2): warning: mounting unchecked fs, running e2fsck is recommended
[ 51.587740] EXT4-fs (sdc2): mounted filesystem without journal. Opts: (null)
[ 51.633994] FAT-fs (sdc1): Volume was not properly unmounted. Some data may be corrupt. Please run fsck.
[ 107.969122] EXT4-fs (sdc3): bad geometry: block count 120880128 exceeds size of device (14848000 blocks)
我其实不太了解分区,但我想它不喜欢直接复制未加密的内容——也许这与旧的分区表不兼容?似乎涉及到一些错误的大小。也许我需要先调整加密内容的大小?
那么,我能以某种方式解决这个问题吗?或者,我应该怎么做才能达到同样的效果——本质上将加密的 EXT4 根克隆到 SSD 上并获得旧系统的可启动、未加密副本?(如果调整大小然后克隆整个/dev/sda
和加密变得容易得多,我也可以这样做;我最初的假设是,以未加密的方式克隆它将使我解决整个加密调整大小的麻烦......)
答案1
事实证明整个过程比我想象的要简单。受@Xen2050 评论的启发,我基本上能够将rsync
整个系统重新安装到系统中:
- 用活棍开机
- 在新磁盘上安装全新的 Ubuntu(使用单独的 efi 启动分区)
- 将新的 Ubuntu 根分区挂载到
/mnt/new-root
- 通过以下方式解密旧系统
cryptsetup luksOpen /dev/sdXY crypt1
- 通过以下方式挂载旧的根分区
mount /dev/mapper/ubuntu--vg-root /mnt/old-root
- 复制所有内容:
rsync -aAXv --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"} /mnt/old-root /mnt/new-root
- 编辑 fstab
/mnt/new-root/etc/fstab
以包含新磁盘上分区的 UUID(可通过获取gparted
)
令人惊讶的是,仅此而已。重新启动,您就可以从新磁盘启动,所有内容与以前相同(只是没有加密并且速度更快)。