我有一个从系统中移除的 SSD。它有通过 LUKS 进行全盘加密(不使用 LVM)。
我想将该驱动器重新用于不同的目的(在不同的系统中)。我将一个未加密的 Arch Linux 系统(众所周知,它很好并且可以启动)克隆(使用 dd)到这个之前加密的驱动器。但是,克隆的驱动器将无法启动。
我使用的 dd 命令是:
dd if=/dev/sda of=/dev/sdb bs=1M status=progress
(我的输入和输出设备也正确。)我克隆的磁盘回到了原来的硬件,并且可以正常启动和运行。新的(克隆的)磁盘具有相同的硬件。
新克隆的磁盘具有相同的分区结构,并且 UUID 也相同(如预期)。此外,当我安装新磁盘并浏览目录时,所有文件都按预期显示。经过检查,新克隆的磁盘看起来完全相同,并且没有明显损坏。例如,我可以打开并读取 UEFI 加载程序配置文件来检查 UUID 编号。我还可以运行blkid
来验证 UUID 是否正确(它们是)。
两个系统都使用 UEFI 启动。 vfat EFI 分区位于新克隆的驱动器上,看起来很正常。如前所述,默认加载程序配置具有适当的 UUID(因为克隆的驱动器没有任何更改)。
尝试从克隆磁盘启动时出现的错误是:
:: running early hook udev
starting version 231
:: running hook [udev]
Waiting 10 seconds for device /dev.. (it lists the partition ID)
ERROR: device [partition UUID] not found. Skipping fsck.
ERROR: unable to find root device [partition UUID]
You are being dropped into a rescue shell
然后阿奇掉进了救援壳里。
编辑:
克隆的驱动器通过 USB 连接到系统。当我将连接更改为 SATA 时,问题就消失了。驱动器工作并且系统按预期启动。
我预计克隆驱动器在通过 USB 安装时能够正常工作,因为该系统已经过测试,可以从 USB 驱动器上的 btrfs 快照启动,并且可以正常工作。
答案1
您的系统启动到尝试查找根文件系统的位置,并在此时失败。这通常表明内核缺少必要的驱动程序。由于您的系统(与大多数非嵌入式系统一样)使用 initramfs,因此此处的“内核”是指在内核映像(/boot/bzImage
或它位于的任何位置)中编译的驱动程序集以及 initramfs 上存在的驱动程序集。必要的驱动程序包括访问文件系统所需的一切:总线控制器、磁盘控制器、磁盘类型、分区、软件 RAID 层、加密层、LVM、文件系统……在您的情况下,显然存在更高层,但如果您连接了如果将磁盘连接到不同的接口(例如 USB 而不是 SATA,或者不同控制器上的不同 SATA 端口等),则可能缺少该接口的驱动程序。你可能需要重新生成 initramfs。
正如上面所说拱门维基:
在一台机器上启动成功,在另一台机器上启动失败
(…) 如果您将
/boot
目录转移到另一台计算机,并且在早期用户空间期间引导顺序失败,则可能是因为由于缺少内核模块而未检测到新硬件。 (…) 尝试手动将模块添加到 initramfs。