在有些项目中,咱们不但愿系统的文件的被修改,如路由器的系统文件等等.咱们就须要使用只读文件系统来保护咱们的系统文件不被修改.node
常见的只读文件系统有:cramfs文件系统和squashfs文件系统(cramfs文件系统的继任者)算法
1、cramfs文件系统: http://sourceforge.net/projects/cramfs/
1. compressed ROM filesystem
主要用于嵌入式Linux系统中,简单与空间高效工具
2. 特性:
支持最大分区:272MB (256MB + 16MB)
支持最大文件:16MB
压缩格式: Zlib,压缩比通常能够达到1:2,每页单独进行压缩处理 ————> 支持随机读取
动态解压:访问数据时实时解压访问到的页到内存,节省内存空间
使用透明:解压缩以及解压缩以后的内存中数据存放位置都是由cramfs文件系统自己进行维护,对外部使用透明ui
2、squashfs文件系统: cramfs的替代
1. http://www.squashfs.org
为通用只读文件系统等设计
2. 特性:
支持最大分区: 16EB
支持最大文件: 2TB
支持多种压缩格式:GZIP LZMA/LZMA2(XZ) LZOspa
三,cramfs文件系统的制做.net
1,安装制做工具设计
sudo apt-get install cramfsprogsip
安装成功之后会有2个命令内存
mkcramfs:建立文件系统镜像
cramfsck:对文件系统镜像的一些操做路由
2,制做文件系统
mkcramfs 选项(能够没有) 目录名 镜像名称
cramfsck 镜像名 :验证是否正确
cramfsck -x 镜像名:解压该镜像
四,squashfs文件系统制做
1,制做工具的安装
sudo apt-get install squashfs-tools
mksquashfs:制做镜像
unsquashfs:对镜像的一些操做
2,制做文件系统
mksquashfs source1 source2 ... dest [options] [-e list of exclude dirs/files]
主要选项:
-comp <comp> 指定压缩算法:gzip (default)/lzo/xz
-b <block_size> 设置块大小,单位 Bytes,默认 131072 bytes (1MB)
-no-exports 不支持NFS文件系统导出
-no-sparse 不检测稀疏文件
-no-xattrs 不存储扩展文件属性(XATTR)
-xattrs 存储扩展文件属性(default)
-noI 不压缩Inode节点表
-noD 不压缩数据块
-noF 不压缩片断块
-noX 不压缩扩展文件属性
-no-fragments 不使用片断管理
-always-use-fragments 对比块大小大的文件也是用片断块
-no-duplicates 不对文件重复进行检查
-all-root 修改全部的文件拥有者为root
-force-uid uid 设置全部文件的uid为指定的uid
-force-gid gid 设置全部文件的gid为指定的gid
-nopad 不对文件系统进行4K字节对齐
-keep-as-directory 若是指定的源中有目录,在文件系统中建立根目录包含该目录,而不是包含目录内容
mksquashfs 目录名 镜像名 -no-exports -no-xattrs -all-root
内容提取:
unsquashfs [options] filesystem [directories or files to extract]
主要选项:
-d[est] <pathname> 解压到指定目录,默认为"squashfs-root"
-n[o-progress] 不显示进度条
-no[-xattrs] 不提取xattr属性,默认提取
-l[s] 列出文件系统内容,不进行解压缩提取
由于有些文件涉及到了管理员权限,因此建议使用管理员权限来制做和解压文件系统镜像以免一些权限错误.