Linux下Ramdisk根文件系统制作过程解析

来源:互联网 发布:宝宝涂鸦软件 编辑:程序博客网 时间:2024/06/05 00:10

http://www.soidc.net/articles/1215484977397/20080407/1215945405315_1.html

 

一、在一个已建好的文件系统上进行修改

    设已建立好的文件系统压缩文件为ramdisk.gz

    1、解压

    #cd ramdisk.gz所在目录

    #gunzip ramdisk.gz

    在解压后,得到文件系统镜象文件ramdisk, 覆盖了原来的压缩文件

    2、镜象文件挂载

    镜象文件必须经过挂载后才能看到文件系统中的各个目录和详细内容

    #mkdir /mnt/loop /* /mnt/loop 是文件系统要挂载到的目录

    #mount ?Co loop ramdisk /mnt/loop

    在挂载目录/mnt/loop下对文件系统进行操作

    #cd /mnt/loop

    #do_whatever_you_want_to_do /*根据需要增加、删减或是修改文件系统的内容

    4、卸装文件系统

    跳到/mnt/loop目录外,否则无法卸装,提示busy

    #cd ramdisk所在目录

    #umount /mnt/loop

    5、压缩文件系统

    #gzip ?Cv9 ramdisk /*生成ramdisk.gz压缩文件

    二、自己建立根文件系统

    1、建立loop设备的临时挂载点

    #mkdir /mnt/loop

    2、建立一个大小为15M的临时文件

    #dd if=/dev/zero of=/tmp/loop_tmp bs=1k count=15360

    注意可根据自己的需要建立大小合适的文件系统,更改count大小即可。

    此处以dd命令建立一个了一个15360KB文件系统映象,存于/tmp/loop/tmp,并以。dev/zero对它进行初始化。用这种方式对文件系统进行初始化,稍后当我们使用gzip命令压缩整个映象时,将让文件系统中未使用的部分获得最大压缩比。

    3、将设备文件与临时文件联系起来

    #losetup /dev/loop0 /tmp/loop_tmp

    把设备文件/dev/loop0与临时镜象文件/tmp/loop_tmp联系起来,/dev/loop0是个块设备

    如果出现“ioctl:LOOP_SET_FD:设备或资源忙”,说明/dev/loop0设备还和一文件联系,可用losetup /dev/loop0查看地,并可用-d 删除。

    4、将/dev/loop0格式化为ext2文件系统

    #mke2fs ?Cm 0 /dev/loop0

    -m 0指出不必在文件系统上为“超级用户”保留任何区块。

    Linux内核识别两种可以直接考贝的到ramdisk的文件系统,它们是minix和ext2,minix是linux早期版本所用的文件系统,从minix操作系统而来,ext2性能更好。

    5、把虚拟盘挂在节点/mnt/loop上

    #mount ?Ct ext2 /dev/loop0 /mnt/loop

    6、用cp ?Caf命令将所需要文件拷贝到虚拟盘上

    cp ?Chelp查看cp 用法。cp ?Carf … -r表示拷贝目录

    /bin, /dev, /etc, /lib, proc, /sbin, /usr都是不可或缺的目录,建议保留/tmp,/var,不过可以为空。而为多用户提供可扩展环境的所有目录(例如/home、/mnt、/opt、/root)都应该省略。

    用cp复制文件时,建议把已建立好的文件系统中的内容全部拷贝过来,这样比较简单,不需要再去编译安装busybox等。当然自己也可以那样去做。

    7、卸载文件系统,得到的/tmp/loop_tmp就是文件系统映象。

    #cd /mnt/loop以外的目录 (否则会提示无法卸载,设备busy)

    #umount /mnt/loop

    8、压缩文件系统映象

    #gzip ?Cv9 /tmp/loop_tmp >/tftpboot/ramdisk.gz

    在/tftpboot下生成了ramdisk.gz,这样一个内存文件镜象生成了。

    或只是#gzip ?Cv9 /tmp/loop_tmp,则就是在/tmp下生成loop_tmp.gz文件,一样的。

    在上述自己建立文件系统中,第3条用 losetup命令把块设备文件/dev/loop0与临时文件/tmp/loop_tmp联系起来了,我的理解是/tmp/loop_tmp必须是块设备文件,所以用/dev/loop0与之相关联,然后对/dev/loop0的操作和对其虚拟盘的操作,就间接作用在文件系统映象 /tmp/loop_tmp上。

    三、自己建立根文件系统(与二中不同)

    1、建立loop设备的临时挂载点

    #mkdir /mnt/loop

    2、建立文件系统映象

    #dd if=/dev/zero of=/tmp/loop_tmp bs=1k count=15360

    以上2条同二中是一样

    3、mke2fs ?CF ?Cv ?Cm 0 /tmp/loop_tmp

    此处-F选项将可迫使mkefs2在文件上运行。否则mke2fs会抱怨/tmp/loop_tmp不是个块设备(在上面说了,我的理解是/tmp/loop_tmp文件映象必须是块设备文件,前面的做法是用块设备文件/dev/loop0与之相关联)。-v 选项指出mke2fs应该以verbose模式执行,-m 0指出不必在文件系统上为“超级用户”保留任何区块,因为在嵌入式系统中通常是单用户系统,为“超级用户”保留区块没有意义。

    4、挂载映象文件

    #munt ?Co loop /tmp/loop_tmp /mnt/loop

    挂载后,在/mnt/loop下就可以对文件系统的内容进行操作。

    5、cp操作,同二中的第6条

    6、卸载映象文件

    #umount /mnt/loop

    7、压缩映象文件

    #gzip ?Cv9 /tmp/loop_tmp

    第三中的做法与第二中的做法不同,在第二中,把块设备文件/dev/loop0与映象文件/tmp/loop_tmp相关联,然后对/dev/loop0及虚拟盘进行操作,就作用在/ltmp/loop_tmp上。

    而第三中,是直接对映象文件/tmp/loop_tmp进行操作,用mke2fs ?CF …将其当作块设备文件进行操作。

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 尿不尽刺痛带血怎么办 狗狗拉肚子拉血怎么办 肾血肿怎么办才吸收快 体检尿蛋白高3怎么办 肾炎会引起脸肿怎么办 12小孩尿蛋白3是怎么办 肝癌介入手术后肝功能不好怎么办 屁多且臭便秘怎么办 肝癌术1年后复发怎么办 怀孕便秘怎么办或大便太干拉不出 肠鸣便秘怎么办多尿 奥司他韦过量怎么办 憋的时间长尿痛怎么办 手过敏了怎么办最简单 肾结石不痛但是有血尿怎么办 儿童医院血液科挂不到号怎么办 搬完重物手抖怎么办 弯腰搬重物腰疼怎么办 搬了重物后腰疼怎么办 例假不走公务员体检血尿怎么办 憋尿久了尿不出来怎么办 憋尿引起的总有尿意怎么办 如果孕妇憋尿了怎么办 孕妇憋尿半个月怎么办 尿憋久了排空后膀胱疼怎么办 胸疼肚子疼不规则流血怎么办 上小便下面会痛怎么办 两岁宝贝憋尿怎么办 打激素脸胖了怎么办 医生写的病历看不懂怎么办 怀孕尿蛋白3个加怎么办 两周岁宝宝牙齿坏掉怎么办 前列缐炎引起尿血怎么办 牙齿牙根长在神经里怎么办 牙齿杀完神经牙根发炎怎么办 牙齿有大洞好疼怎么办 大门牙有蛀牙了怎么办 大门牙蛀牙黑了怎么办 大门牙蛀牙有洞怎么办 大门牙的缝蛀了怎么办 最里面的牙烂了怎么办