如何调试 initramfs 脚本?

如何调试 initramfs 脚本?

对于我的 Ubuntu 14.04 设置,我有 4 个 LUKS 分区,它们作为 BTRFS 根分区的备份块设备。使用默认设置,我无法在启动时解锁这 4 个加密分区,因此我编写了一个脚本来帮我解锁。

该脚本有点用,有时启动时没有问题,有时启动时会进入 initramfs 提示符。我认为解密 LUKS 分区、组装 BTRFS 分区和挂载根子卷之间存在时间问题,但我不知道如何调试/测试/修复此问题。有什么想法可以找出问题所在吗?

答案1

使用“debug”内核参数,您将在启动时看到更多的调试输出,并且 initramfs 会将启动日志写入 /run/initramfs/initramfs.debug。

调试实际的启动脚本通常是一项缓慢的工作。您需要获取 initramfs,将其解压(gzip -d init*.gz然后cpio -vid < init*),修改它(从开始/init),重新打包,然后使用它启动。在您想要检查某个点发生的情况的地方添加打印语句。竞争条件的问题在于添加调试打印可能会改变时间,从而导致不同的行为。除了阅读代码并了解它在做什么之外,没有简单的解决方案。话虽如此,脚本很短,应该很容易理解(/init只有大约 300 行代码)。

相关内容