![如何调试 initramfs 脚本?](https://linux22.com/image/973446/%E5%A6%82%E4%BD%95%E8%B0%83%E8%AF%95%20initramfs%20%E8%84%9A%E6%9C%AC%EF%BC%9F.png)
对于我的 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 行代码)。