Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1951508
  • 博文数量: 261
  • 博客积分: 8073
  • 博客等级: 中将
  • 技术积分: 2363
  • 用 户 组: 普通用户
  • 注册时间: 2006-04-10 15:23
文章分类

全部博文(261)

文章存档

2013年(1)

2012年(1)

2011年(50)

2010年(34)

2009年(4)

2008年(17)

2007年(55)

2006年(99)

分类:

2006-04-11 21:01:15

Ramdisk是分配了一部分内存作为一个分区来使用。对于系统运行时不断使用的程序,将它们放在Ramdisk中将加快计算机的操作,如大数据量的网络服务器、无盘工作站等。为了能够使用Ramdisk,我们在编译内核时须将block device中的Ramdisk支持选上,它下面还有两个选项,一个是设定Ramdisk的大小,默认是4096k;另一个是initrd的支持。它既可以直接编译进内核,也可以编译成模块,在需要的时候加载。如果在启动时就用它(例如加载ramdisk作为rootfs),就必须将它直接编译进内核。

在Linux下建立目录/myramdisk,将在此目录下创建的文件系统对应的文件结构。一般不需要对于系统运行是完全无用的文件,如帮助手册、信息页,头文件、内核源码等。

一些要包含在 Ramdisk 中的重要目录是:

/bin — 保存大多数象 init、busybox、shell、文件管理实用程序等二进制文件;
/sbin — 保存系统启动过程通常需要的命令,如e2fsck、mke2fs、fdisk、insmod、rmmod、depmod、modprobe、lsmod、shutdown、reboot、login、init、getty、mount、umount、等;
/dev — 包含用在设备中的所有设备节点;
/etc — 包含系统的所有配置文件;
/proc — 这是一个必须设置的特殊目录,在系统运行之后它下面有许多内容,这些内容是实时、不断跟踪系统内核和正在运行的进程的状态而产生的,但不占用任何磁盘空间,而是驻留在内存中;在某些情况下,可以通过它来进行系统设置,许多工具从这里获取信息,如dmesg、ps、top等;在内核编译选项文件系统选择中,我们选择对文件系统proc的支持;
/lib — 包含所有必需的库,根据/bin和/sbin目录下的可执行文件需要的动态链接库来确定lib目录下的内容。

文件系统制作完成,看看这个/myramdisk目录大小为多大,然后确定需要多大的Ramdisk,在内核编译的时候,修改Ramdisk大小(缺省为4096k)为所需要的尺寸。

现在我们以制作一个4M的Ramdisk为例子,步骤如下:

1. 在宿主机上编译运行在目标机linux内核时,将block device中的Ramdisk支持选上,设定Ramdisk的大小为缺省的4096K,对initrd的支持也选上。
2. 在宿主机上建立/myramdisk目录,按照上述的原则建立必要的目录和文件。
3. 执行下列步骤
在根目录下建立一个文件myram,从设备文件/dev/zero中读取数据填充文件myram(注:/dev/zero是一个特殊的设备文件,从这个文件读出来的数据全是0),以便后面得到更高的压缩率;
# dd if=/dev/zero of=/myram bs=1k count=4096
在Ramdisk上建立4M的ext2类型的文件系统;
# mke2fs -m0 -F /myram 4096
在/mnt下建立目录ram,将已格式化ext2类型文件系统的ramdisk挂载至目录/mnt/ram上;
# mount –o loop /myram /mnt/ram
将宿主机上/myramdisk目录下的文件结构拷贝至/mnt/ram目录中(这就相当于拷贝至文件myram中了);
# cp -av /myramdisk/* /mnt/ram
卸载掉/mnt/ram;
# umount /mnt/ram
产生一个压缩的映象文件。
# gzip –v9 /myram /myramdisk.img.gz


利用宿主机的/dev/ram代替自建的/myram文件来建立Ramdisk的方法:

1. 在宿主机上编译运行在目标机linux内核时,将block device中的Ramdisk支持选上,设定Ramdisk的大小为缺省的4096K,对initrd的支持也选上。
2. 在宿主机上建立/myramdisk目录,按照上述的原则建立必要的目录和文件。
3. 执行下列步骤
从设备文件/dev/zero中读取数据填充宿主机的设备文件/dev/ram(注:/dev/zero是一个特殊的设备文件,从这个文件读出来的数据全是0),以便后面得到更高的压缩率;
# dd if=/dev/zero of=/dev/ram bs=1k count=4096
在Ramdisk上建立4M的ext2类型的文件系统;
# mke2fs -m0 /dev/ram 4096
在/mnt下建立目录ram,将已格式化ext2类型文件系统的ramdisk挂载至目录/mnt/ram上;
# mount /dev/ram /mnt/ram
将宿主机上/myramdisk目录下的文件结构拷贝至/mnt/ram目录中(这就相当于拷贝至宿主机设备文件/dev/ram中了);
# cp -av /myramdisk/* /mnt/ram
卸载掉/mnt/ram;
# umount /mnt/ram
将Ramdisk写成映象文件ramdisk.img,
dd if=/dev/ram of=/ramdisk.img bs=1k count=4096
将映象文件ramdisk.img压缩,生成一个gzip压缩文件。
# gzip –v9 /ramdisk.img /myramdisk.img.gz

这种方式,有一个限制,即宿主机的kernel中必须支持ramdisk,而且在这个宿主机上制作的Ramdisk(运行在目标机上)的大小受宿主机kernel中指定的ramdisk大小的限制。

创建一个简单的基于 Ext2fs 的 Ramdisk
mke2fs -vm0 /dev/ram 4096
mount -t ext2 /dev/ram /mnt
cd /mnt
cp /bin, /sbin, /etc, /dev ... files in mnt
cd ../
umount /mnt
dd if=/dev/ram bs=1k count=4096 of=ext2ramdisk

mke2fs 是用于在任何设备上创建 ext2 文件系统的实用程序 — 它创建超级块、索引节点以及索引节点表等等。

在上面的用法中,/dev/ram 是上面构建有 4096 个块的 ext2 文件系统的设备。然后,将这个设备(/dev/ram)挂装在名为 /mnt 的临时目录上并且复制所有必需的文件。一旦复制完这些文件,就卸装这个文件系统并且设备(/dev/ram)的内容被转储到一个文件(ext2ramdisk)中,它就是所需的 Ramdisk(Ext2 文件系统)。

上面的顺序创建了一个 4 MB 的 Ramdisk,并用必需的文件实用程序来填充它。 一些要包含在 Ramdisk 中的重要目录是:

* /bin — 保存大多数象 init、busybox、shell、文件管理实用程序等二进制文件。
* /dev — 包含用在设备中的所有设备节点
* /etc — 包含系统的所有配置文件
* /lib — 包含所有必需的库,如 libc、libdl 等

如果此方法行不通,请试用下面的方法:

制作ramdisk的方法
(1)建立loop设备的临时挂接点和一个大小为6兆(大小可以调节)的临时文件,并将其清零:

  #mkdir /mnt/loop 2>/dev/null。
  #dd if=/dev/zero of=/tmp/loop_tmp bs=1k count=6144 >/dev/null。

(2)将loop设备与临时文件联系起来

  #losetup /dev/loop0 /tmp/loop_tmp

(3)Linux內核识别两种可以直接拷贝到RAMDISK的文件系统,它们是minix 和ext2,ext2性能更

  好:

  #mke2fs -m 0 /dev/loop0 2>/dev/null

  #mke2fs将会自动判断设备容量的大小并相应地配置自身, -m 0参数防止它给root保留空,

  这样会腾出更多地有用空间。

(4)接着把虚拟盘挂在节点/mnt上:

  #mount /dev/loop0 /mnt/loop -t ext2

(5)将制作好的root文件系统拷贝到所挂的节点上,卸下挂接点,刪除建立的挂接点。

  #cp -a /ramdisk/* /mnt/loop
  #umount /mnt/loop

现在制作的/tmp/loop_tmp就是一个6M的ramdisk文件

阅读(2635) | 评论(0) | 转发(0) |
0

上一篇:ABI/EABI

下一篇:嵌入式Linux开发资源大全

给主人留下些什么吧!~~