只读文件系统
在有些项目中,我们不希望系统的文件的被修改,如路由器的系统文件等等.我们就需要使用只读文件系统来保护我们的系统文件不被修改.
常见的只读文件系统有:cramfs文件系统和squashfs文件系统(cramfs文件系统的继任者)
一、cramfs文件系统: http://sourceforge.net/projects/cramfs/
1. compressed ROM filesystem
主要用于嵌入式Linux系统中,简单与空间高效
2. 特性:
支持最大分区:272MB (256MB + 16MB)
支持最大文件:16MB
压缩格式: Zlib,压缩比一般可以达到1:2,每页单独进行压缩处理 ————> 支持随机读取
动态解压:访问数据时实时解压访问到的页到内存,节省内存空间
使用透明:解压缩以及解压缩之后的内存中数据存放位置都是由cramfs文件系统本身进行维护,对外部使用透明
二、squashfs文件系统: cramfs的替代
1. http://www.squashfs.org
为通用只读文件系统等设计
2. 特性:
支持最大分区: 16EB
支持最大文件: 2TB
支持多种压缩格式:GZIP LZMA/LZMA2(XZ) LZO
三,cramfs文件系统的制作
1,安装制作工具
sudo apt-get install cramfsprogs
安装成功以后会有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] 列出文件系统内容,不进行解压缩提取
因为有些文件涉及到了管理员权限,所以建议使用管理员权限来制作和解压文件系统镜像以避免一些权限错误.