制作ramdisk的内核文档翻译

 
 
翻译linux-2.6.16.9/Documentation/ramdisk.txt
原作:Paul Gortmaker
翻译:LL
在linux中使用RAM disk块设备
-------------------------------------
目录:
    
        1)概述
        2)内核命令行参数
        3)使用“rdev -r"命令
        4)一个“创建压缩ram disk”的例子
1)概述
-------------
RAMdisk驱动器是一种可以让用户象使用块设备那样使用主存的技术。在启动初始磁盘(initrd)技术中用到。启动初始磁盘可以让用户在系统启动的时候向内核里加载模块以访问根文件分区。RAMdisk也可以在做一些保密的操作时用来提供一个临时文件系统,因为在系统重新引导之后,所有的临时文件都不存在了。
RAMdisk是在有需要的时候才动态分配空间的。这通过使用系统缓存中的RAM(Read Only Memory)来实现。驱动程序直接标记使用中的缓存,这样虚拟内存子系统将不会再试图使用这些内存。
而且,RAMdisk默认最多可以支持到16个RAM磁盘设备,并且可以通过修改内核源码里面/drivers/block/rd.c里面的"#define NUM_RAMDISKS"这个宏并重新编译内核来重新配置可以支持的RAMdisk的数目上限,最到到255个RAMdisk。
通过在/dev目录下运行"./MAKEDEV ram"可以在你的系统里面使用RAMdisk的支持。RAM磁盘的主设备号都是1,并且从设备号从0开始,/dev/ram0的从设备号为0,依次类推。如果你的系统已经使用了RAMdisk的支持,现代的内核使用/dev/ram0作为初始化磁盘(initrd)。
旧的"ramdisk="已经更新为”ramdisk_size=“,以使得其意义更明确。而原先的”ramdis="仅仅是为了兼容性的原因才得以保留,但可能在将来予以放弃。
现在新的RAM disk还拥有可以加载压缩的RAM磁盘镜像的能力,这将可是支持将更多的程序放到通用安装磁盘或急救软盘中。
2)内核命令行参数
-----------------------------------
    ramdisk_size=N
    ==============
    这个参数告诉RAM磁盘驱动将RAM磁盘的大小设置为N k。默认是4096(4 MB)(在s390上是8192(8 MB))
    ramdisk_blocksize=N
    ===================
    这个参数告诉RAM磁盘驱动一个块(block)里面使用多少个字节。默认是512。
3)使用"rdev -r"
------------------
命令"rdev -r"设置内核镜像文件中的两个字节(32bit),这两个字节中各个位的含义如下:
    低11位(0 -> 10)指定了一个偏移量(以1K的块为单位),最到能寻址到2M,用以指定到何处去寻找RAM磁盘。
    第14位指示RAM磁盘是否被加载。
    第15位指示是否在加载RAM磁盘之前给出一个提示并等待用户指令。
    如果随着数据被写入RAM磁盘,RAM磁盘的大小是动态增长的,那么指定RAM磁盘的大小的域将被忽略。
    11到13位没有被使用,所以可以为0。
    上面所列的数据并非什么秘密,可以在参照下列地方:
    进入内核源码所在目录:
    ./arch/i386/kernel/setup.c:#define RAMDISK_IMAGE_START_MASK 0x07FF
    ./arch/i386/kernel/setup.c:#define RAMDISK_PROMPT_FLAG 0x8000
    ./arch/i386/kernel/setup.c:#define RAMDISK_LOAD_FLAG 0x4000
考察一个典型的"两张软盘启动",内核在第一张软盘上,并且已经将一个RAM磁盘镜像文件放到了第二张软盘上。
    所以你希望将0到13位设置为0,这将意为着你的RAM磁盘处于从软盘起始地址偏移量为0KB的地方。相同功能的命令行参数为:"ramdisk_start=0"
    你希望第14位为1,即声明加载RAM磁盘。相同功能的命令行参数为:"load_ramdisk=1"
    你希望第15位为1,这是声明希望显示一个提示并等待用户的按键以得到一个提示机会来更换软盘。形同功能的命令行参数为:"prompt_ramdisk=1"
将上述的标志位综合在一起得到:2^15 + 2^14 + 0 = 49152
作为参数传递给rdev用来设置内核镜像里的两个字节。所以如果创建上述的第一个磁盘,你需要进行如下操作:
    /usr/src/linux# cat arch/i386/boot/zImage > /dev/fd0
    /usr/src/linux# rdev /dev/fd0 /dev/fd0
    /usr/src/linux# rdev -r /dev/fd0 49152
如果你创建一个使用了lilo的启动磁盘,为了得到上面说明的那些效果,你需要使用下列lilo的参数:
    append = "ramdisk_start=0 load_ramdisk=1
    prompt_ramdisk=1"考虑到默认的start = 0和prompt = 1,你可以简化lilo的命令行参数为:
    append = "load_ramdisk=1"
4)一个创建压缩RAM磁盘的例子
---------------------------
为了创建一个RAM磁盘的镜像,你需要你一个单独的块设备。这个块设备可以是一个RAM磁盘设备本身,也可以是一个未使用的磁盘分区(比如一个没有被挂载的交换分区)。在这个例子中,我们将使用RAM磁盘设备:"/dev/ram0"。
注意:这种技术不应该在内存容量小于8MB的系统上应用。如果采用使用单独的磁盘分区而不是/dev/ram0,那么就不再有任何限制。
a)确定你希望使用的RAM磁盘的容量。比如,在本例中我们设为2MB。通过写入RAM磁盘设备来创建。(这一步现在不是必须的,但将来可能是。)最好写入0。这样下一步创建镜像时进行最大比例压缩的时候比较方便压缩未使用的块。命令为:
    dd if=/dev/zero of=/dev/ram0 bs=1k count=2048
b)创建一个文件系统。在本例中使用ext2fs。命令为:
    mke2fs -vm0 /dev/ram0 2048
c)挂载这个磁盘设备(无论是一个RAM磁盘设备,还是一个单独的分区),向里面拷贝你需要的文件(比如:/etc/* /dev/* ...)。然后卸载这个设备(umount)。
d)压缩这个RAM磁盘镜像。压缩之后,被实际使用的空间大约能压缩到原来的50%并且未被使用的空间几乎被完全压缩到0。命令为:
    dd if=/dev/ram0 bs=1k count=2048 | gzip -v9 > /tmp/ram_image.gz
e)将内核放入软盘。命令为:
    dd if=zImage of=/dev/fd0 bs=1k
f)将RAM磁盘镜像放入软盘。使用一个比内核所占空间略大的偏移量。之所以要有一个略大的偏移量,可以方便以后更换内核,而不会覆盖到RAM磁盘的镜像。比如,如果内核占用了350KB,那么写入RAM磁盘镜像的时候使用400KB的偏移量是比较合理的。注意:确定"偏移量+RAM磁盘镜像的体积"不会超出软盘的容量(通常是1440KB)。命令为:
    dd if=/tmp/ram_image.gz of=/dev/fd0 bs=1k seek=400
g)使用rdev命令设置启动设备,RAM磁盘偏移量,是否提示换磁盘标志,等等。
    比如设置:prompt_ramdisk=1, load_ramdisk=1,ramdisk_start=400,这些标志时,可以计算出来:
    2^15 + 2^14 + 400 = 49552
    使用的命令可能为:
    rdev /dev/fd0 /dev/fd0
    rdev -r /dev/fd0 49552
到此为止,你已经获得了你自己的启动/根压缩RAM磁盘(软盘),你也可以将步骤d和步骤f通过管道一步执行。
-------------------------------------------------------------
                        Paul Gortmaker 12/95
更改日志:
---------
10-22-04 :更新了想到的命令行选项,删除废旧索引(references),全面清理。
    James Nelson (james4765@gmail.com)
12-95 : 原来的文档
    译的地方不尽完善,以后有了新的理解再修改吧
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值