Ramdisk和initrd是否相同?


10

在阅读ramfs-rootfs-initramfs.txt中 ramdisk的内核文档时, 我有一个疑问,就像ramdisk解释的那样,它与post -difference-between-initrd-and-initramfs中描述的initrd功能相同。

有人可以澄清一下吗?

如果相同的话,我读到它有很多缺点,但是仍然在我的fedora PC中,我看到

的initrd-2.6.29.4-167.fc11.i686.PAE.img

在我的启动文件夹中。与上面提到的initrd不同吗?

UPDATE_EDIT:
文章中,我什至看到了类似的命令
# update-initramfs -u all
update-initramfs: Generating /boot/initrd.img-2.6.18-5-amd64

那么,这个initramfs如何链接到initrd.img呢?

Answers:


13

ramdisk是一组块,它们被复制到分配的内存块中,然后被视为块设备。在ramdisk上创建一个普通的文件系统。initrd(初始ramdisk)是在引导过程中安装的ramdisk。

initramfs有所不同。这是在启动过程中加载的文件的cpio存档。内核将内容加载到称为rootfs的虚拟文件系统中。与ramdisk不同,删除文件直接释放了内存,并且没有额外的文件系统和块层。

两种方法都会导致文件在引导时在加载任何设备之前可供内核使用,因此在实践中,您可以通过两种方法获得相似的结果。较旧的系统使用initrd(它是在initramfs之前创建的),但是现代系统应该都使用initramfs。您可能仍然会看到initrd一词,它实际上是一个initramfs。只是出于兼容性考虑而命名。


谢谢,我想知道您所说的“ ramdisk是一组块”的意思。复制后如何将其视为块设备?

@Sen:有一个rd模块(后来重命名为brd,并且可以内置在内核中),该模块分配一堆内存,创建一个块设备,并将去往/来自该块设备的请求映射到内存中的读/写。
短暂

您能给我更多关于这个rd / brd模块的想法吗?

我还想知道,如果我按照以下步骤创建了ramdisk映像:mke2fs -vm0 / dev / ram 4096; 挂载-t ext2 / dev / ram / mnt; cd / mnt; cp / bin,/ sbin,/ etc,/ dev ... mnt中的文件;cd ../; umount / mnt; dd if = / dev / ram bs = 1k count = 4096 of = ext2ramdisk; 我将如何在设备中引导此ext2ramdisk?只需将其加载到ram上,行得通吗?

@Sen:引导加载程序负责将内核和init(rd | ramfs)都加载到RAM中;请参阅引导加载程序的文档。但是,即使您是手动构建它(为什么?),也应该使用find /bin /sbin /etc /dev ... | cpio -o | gzip -c > initramfs而不是initrd。
短暂
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.