分类:
2006-04-11 21:01:15
在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文件