linux下ramdisk测试脚本,Linux中的RAMDISK和INITRD

Norton Ghost

备份的硬盘分区,而Linux启动阶段的Ramdisk相当于一个未格式化的硬盘分区,核心能直接将initrd的内容释放到一个未初始化的Ramdisk里,这个过程和Ghost恢复一个分区的过程十分相似。于是,相应的内容被加载到相应的Ramdisk中,同时,这个Ramdisk也被格式化成某种由initrd格式所表达的分区格式。

initrd和Ghost备份的分区有许多相似之处,例如,他有一定的大小,包含分区上的文件系统格式等。initrd支持的格式包括:

Ext2文件系统;

Romfs文件系统;

cramfs文件系统;

minix文件系统;

如果核心选择了Gzip支持(通常这是默认的,在init/do_mounts_rd.c中定义的BUILD_CRAMDISK宏)还能使用Gzip压缩的initrd。相关的代码能在核心源码 drivers/block/rd.c:identify_ramdisk_image 中找到。

制作initrd

制作initrd传统的作法是通过软盘(显然过时了,不介绍了)、ramdisk或loop设备(/dev/loop)。通过ramdisk来制作的方法比较简单(以ext2文件系统为例):

redice # mkfs.ext2 /dev/ram0

redice # mount /dev/ram0 /mnt/rd

redice # cp _what_you_like_  /mnt/rd    # 把需要的文件复制过去

redice # dd if=/dev/ram0 of=/tmp/initrd

redice # gzip -9 /tmp/initrd

这个过程也最能够解释initrd的本质,对于Linux来说,Ramdisk的一个块设备,而initrd是这个块设备上所有内容的“克隆”(由命令dd来完成)而生成的文件。核心中加载initrd相关的代码则用于完成将相反的过程,即将这一个文件恢复到Ramdisk中去。

通过loop设备来制作initrd的过程:

redice # dd if=/dev/zero of=/tmp/initrd bs=1024 count=4096 # 制作一个4M的空白文件

redice # losetup /dev/loop0 /tmp/initrd                    # 映射到loop设备上;

redice # mkfs.ext2 /dev/loop0                              # 创建文件系统;

redice # mount /dev/loop0 /mnt/rd

redice # cp _what_you_like_ /mnt/rd                        # 复制需要的文件;

redice # umount /mnt/rd

redice # losetup -d /dev/loop0

redice # gzip -9 /tmp/initrd

不过,目前已有了一些更好的工具来完成这些工作,包括genromfs(uClinux里常用的工具),genext2fs,mkcramfs等。这些工具提供了一些方便研发的新特性,例如,不必上面烦索的过程,只要将文件复制到某个目录中,将其作为根目录,即可生成initrd;另一个重要的改进是,这些工具都能以普通用户的身份来生成initrd。

22/2<12

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值