首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

Linux中的Ramdisk与Initrd

Linux中的Ramdisk与Initrd

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

mke2fs 1.38
(30-Jun-2005)


Filesystem 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

First data block=1

1 block group

8192 blocks per group,
8192 fragments per group


2048 inodes per group



Writing inode tables:
done


Writing superblocks and filesystem accounting information:
done




This filesystem will be automatically 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的可用空间。我们再试一下另外的文件系统,重新格式化成minix分区并挂接试一下:
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-scsi 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支持的格式包括:
继承事业,薪火相传
返回列表