您的位置:首页 > 其它

制作任意大小的根文件系统镜像ramdisk.image.gz

2017-10-31 19:50 435 查看
之前因为原厂带的根文件系统只有8m,空间太小就想去扩展,于是看了文件系统的制作过程

大致过程是一致的但是又有出现的问题

 
本文讲述了Linux下Ramdisk根文件系统制作过程。
    一、在一个已建好的文件系统上进行修改
    设已建立好的文件系统压缩文件为ramdisk.gz
    1、解压
    #cd ramdisk.gz所在目录
    #gunzip ramdisk.gz
    在解压后,得到文件系统镜象文件ramdisk, 覆盖了原来的压缩文件
    2、镜象文件挂载
    镜象文件必须经过挂载后才能看到文件系统中的各个目录和详细内容
    #mkdir /mnt/loop /* /mnt/loop 是文件系统要挂载到的目录
    #mount –o 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 –v9 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 删除。
  如:losetup -d /dev/loop0 即可删除。
    4、将/dev/loop0格式化为ext2文件系统
    #mke2fs –m 0 /dev/loop0(当时出现问题我把–m 0去了就行了,必不可少的不转为ext2文件系统格式就不是文件系统)
    -m 0指出不必在文件系统上为“超级用户”保留任何区块。
    Linux内核识别两种可以直接考贝的到ramdisk的文件系统,它们是minix和ext2,minix是linux早期版本所用的文件系统,从minix操作系统而来,ext2性能更好。
    5、把虚拟盘挂在节点/mnt/loop上
    #mount –t ext2 /dev/loop0 /mnt/loop(貌似我去了–t ext2)
    6、用cp –af命令将所需要文件拷贝到虚拟盘上
    cp –help查看cp 用法。cp –arf … -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 –v9 /tmp/loop_tmp >/tftpboot/ramdisk.gz
    在/tftpboot下生成了ramdisk.gz,这样一个内存文件镜象生成了。
或只是#gzip –v9 /tmp/loop_tmp,则就是在/tmp下生成loop_tmp.gz文件,一样的。
我ramdisk.gz解压然后重命名为ramdisk.image.gz这样反正是能用(我感觉必须转为ext2格式的)
    出现的错误:
 1、
## Booting kernel from Legacy Image at 01000000 ...                             

                                                                                

   Image Name:   Linux-2.6.35+                                                  

                                                                                

   Created:      2011-02-18   7:31:27 UTC                                       

                                                                                

   Image Type:   PowerPC Linux Kernel Image (gzip compressed)                   

                                                                                

   Data Size:    3384101 Bytes = 3.2 MiB                                        

                                                                                

   Load Address: 00000000                                                       

                                                                                

   Entry Point:  00000000                                                       

                                                                                

   Verifying Checksum ... OK                                                    

                
Wrong Ramdisk Image Format  Ramdisk image is corrupt or invalid 
解决方式 
  mkimage -n 'uboot ext2 ramdisk rootfs' -A ppc -O linux -T ramdisk -C gzip -d rootfs.ext2.gz rootfs.ext2.gz.uboot
    具体参看mkimage 的用法 及原因
 
2、系统启动后登录用户不正确
  删除etc/securetty 文件即可
    三、自己建立根文件系统(与二中不同)
    1、建立loop设备的临时挂载点
    #mkdir /mnt/loop
    2、建立文件系统映象
    #dd if=/dev/zero of=/tmp/loop_tmp bs=1k count=15360
    以上2条同二中是一样
    3、mke2fs –F –v –m 0 /tmp/loop_tmp
    此处-F选项将可迫使mkefs2在文件上运行。否则mke2fs会抱怨 /tmp/loop_tmp不是个块设备(在上面说了,我的理解是/tmp/loop_tmp文件映象必须是块设备文件,前面的做法是用块设备文件 /dev/loop0与之相关联)。-v 选项指出mke2fs应该以verbose模式执行,-m 0指出不必在文件系统上为“超级用户”保留任何区块,因为在嵌入式系统中通常是单用户系统,为“超级用户”保留区块没有意义。
    4、挂载映象文件
    #munt –o loop /tmp/loop_tmp /mnt/loop
    挂载后,在/mnt/loop下就可以对文件系统的内容进行操作。
    5、cp操作,同二中的第6条
    6、卸载映象文件
    #umount /mnt/loop
    7、压缩映象文件
    #gzip –v9 /tmp/loop_tmp
    第三中的做法与第二中的做法不同,在第二中,把块设备文件/dev/loop0与映象文件/tmp/loop_tmp相关联,然后对/dev/
9856
loop0及虚拟盘进行操作,就作用在/ltmp/loop_tmp上。
    而第三中,是直接对映象文件/tmp/loop_tmp进行操作,用mke2fs –F …将其当作块设备文件进行操作。
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: