考虑到 GRUB 执行以下几行:
kernel /vmlinuz root=/dev/sda1 ro
initrd /initrd
Run Code Online (Sandbox Code Playgroud)
在启动时,Linux 内核如何找到/dev/sda1
设备节点?
我知道 initrd/initramfs 映像包含用于存储(等)设备的模块,这些模块被加载到内存中以启用对存储的访问。困扰我的是内核如何准确root=/dev/sda1
解析内核参数。
initrd/initramfs 中的/init
(或/linuxrc
)脚本是否先创建/dev
目录,然后在其中创建设备节点/dev/sda1
?或者“主要”和“次要”数字/dev/sda1
是在内核中硬编码的?
在将损坏的文件系统映像到另一个硬盘驱动器上的文件之前,我决定试运行ddrescue
(将救援的输出扔到/dev/null
)只是为了看看有多少数据不可读:
# ddrescue -d -b 4096 -r 3 -f /dev/sda1 /dev/null sda1.log
Run Code Online (Sandbox Code Playgroud)
最终花了3天的时间才完成。现在我已经准备好制作真实的图像,但我不想再等三天才能完成。但是,幸运的是,因为我有一个日志文件,是否可以强制ddrescue
仅救援好扇区而不触及坏扇区?
阅读了一些文档后,我提出了以下想法:
# ddrescue -d -b 4096 --fill=+ /dev/sda1 /mnt/sda1.img sda1.log
Run Code Online (Sandbox Code Playgroud)
这行得通吗?是否有另一种(首选)方法仅重读好扇区?