你是否了解Linux中的Ramdisk与Initrd?

 R     amd      isk简介

先简单介绍一下     ram   disk,Ramdisk是虚拟于RAM中的盘(Disk)。对于用户来说,可以把RAM disk与通常的硬盘分区(如/dev/hda1)同等对待来使用,例如:

 你是否了解Linux中的Ramdisk与Initrd?_设计制作_模拟技术

redice # mkfs.ext2 /dev/ram0
mke2fs 1.38 (30-Jun-2005)
Filesys     te   m label=
OS type:     Linux  
Block size=1024 (log=0)
Fragment size=1024 (log=0)
2048 inodes, 8192 blocks
409 blocks (4.99%) reserved for the super user
Fi     rs   t data block=1
1 block group
8192 blocks per group, 8192 fragments per group
2048 inodes per group

Wri     ti   ng inode tables: done
Wri  TI ng superblocks and filesystem accoun  TI ng informa  TI on: done

This filesystem will be automa  TI cally checked every 24 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

redice # mount /dev/ram0 /mnt/rd
redice # ls /mnt/rd
lost+found
redice # mount
/dev/hda2 on / type ext3
proc on /proc type proc (rw)
/dev/ram0 on /tmp/xxx type ext2 (rw)

当然,Ramdisk与硬盘分区有其不同的地方,例如RAM disk不适合作为长期保存文件的介质,掉电后Ramdisk的内容会随内存内容的消失而消失。Ramdisk的其中一个优势是它的读写速度高,可以被用 作需要高速读写的文件。但在2.6版本后,Ramdisk的这一作用开始被tmpfs(Virtual memory file system support)取代。

回到上面的例子,我们格式化了一个ramdisk(/dev/ram0)并且将其mount到/mnt/rd目录下,那么这个Ramdisk有多大呢?先看一下:

redice # df -h /dev/ram2
Filesystem            容量  已用 可用 已用% 挂载点
/dev/ram0             7.8M  1.0K  7.4M   1% /mnt/rd

从上面的信息看出,ramdisk有大约7.8M的可用空间。我们再试一下另外的文件系统,重新格式化成     mi   nix分区并挂接试一下:

redice # umount /mnt/rd
redice # mkfs.minix /dev/ram0
2752 inodes
8192 blocks
Firstdatazone=90 (90)
Zonesize=1024
Maxsize=268966912

redice # mount /dev/ram0 /mnt/rd
redice # df -h /dev/ram0
Filesystem            容量  已用 可用 已用% 挂载点
/dev/ram0             8.0M  1.0K  8.0M   1% /mnt/rd

现在看出来了,的确是8M(这同时说明,EXT2文件系统本身要占用一定的存储空间,相比之下minix文件系统要少些),这个空间是在编译核心时就确定下来了,在配置Ramdisk时,有一个叫Default RAM disk size的参数决定默认情况下Ramdisk的大小。可以通过核心命令行参数(ramdisk_size)来改变这个值,例如要设置Ramdisk的大小为16M,在grub中可以用:

# grub.conf -
default=0
timeout=10
splashimage=(hd0,0)/grub/splash.xpm.gz
title Redice Linux
root (hd0,0)
kernel /vmlinuz ro root=LABEL=/ hdc=ide-s     csi   ramdisk_size=16384
initrd /initrd

这样,Ramdisk的大小就变成16M了。这个参数是Ramdisk直接编译到核心时才能使用的,如果Ramdisk编译为模块,则应该使用模块参数来设置Ramdisk的大小:

redice # insmod rd rd_size=16384

编译到核心时,可以通过下面的一些核心命令行参数来配置Ramdisk:

·         ramdisk_size - ramdisk的大小(Kbytes);

·         ramdisk - 与ramdisk_size的作用相同;

·         ramdisk_blocksize - ramdisk的块大小,默认情况为1024;

当以模块的形式译时,模块支持以下几个加载参数:

·         rd_size - 同上面的ramdisk_size或ramdisk参数;

·         rd_blocksize - 同上面的ramdisk_blocksize;

initrd

上面已经提到,Ramdisk需要先格式化然后理能使用。那么,如果核心希望使用ramdisk该如何做呢?于是initrd产生了,initrd全称是initial RAM disk,它提供一种让核心可以简单使用Ramdisk的能力,简单的说,这些能力包括:

1.    格式化一个 Ramdisk;

2.    加载文件系统内容到Ramdisk;

3.    将Ramdisk作为根文件系统;

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

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

52
72
0
37

相关资讯

  1. 1、乌鲁木齐签约16个重点项目,新松机器人拟20亿元建设产业园1442
  2. 2、福安市供电公司利用无人机巡山1352
  3. 3、充磁机易损坏的原因,如何进行改善?2871
  4. 4、​LED显示行业步入“智能互联”掀智能显示新风潮4006
  5. 5、三星宣布将注销44亿美元股票,手机DRAM价格下跌趋势强1465
  6. 6、博世发布MEMS加速度传感器BMA400,适用于物联网和可穿戴应用4312
  7. 7、三菱电机研发新感知技术可提高恶劣天气中汽车传感器的探测精度2006
  8. 8、Bi2212上的单层CuO2面:多轨道引起的全能隙无节点高温超导体2615
  9. 9、英国等研究团队开发出关键光子组件,有望制造量子级联激光器3970
  10. 10、北科大团队凭借磁敏传感技术荣获“军转民大赛”团队组项目一等奖3902
全部评论(0)
我也有话说
0
收藏
点赞
顶部