系统篇: squashfs 文件系统

Posted 旧年不在cd

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了系统篇: squashfs 文件系统相关的知识,希望对你有一定的参考价值。

一、squashfs简介

Squashfs是一套基于Linux内核使用的压缩只读文件系统。该文件系统能够压缩系统内的文档,inode以及目录,文件最大支持2^64字节

特点:

  • 数据(data),节点(inode)和目录(directories)都被压缩
  • 保存了全部的32位uid/gids和文件的创建时间
  • 支持多达4G的文件系统
  • 节点和目录都是高度压缩, 所有压缩的节点长度平均在8个字节左右
  • squashfs可以有更大的块大小, 这样可以达到比4K块大小更大的压缩率
  • squashfs引进了碎片块(fragment blocks)的概念: 一种将许多比块小的文件存储在一个块中, 以达到更大的压缩率
  • 重复的文件会被检测并删除掉
  • 同时支持big和little endian架构

编译使用SQ的基本步骤:

  • 重新打包和编译linux内核, 使之支持SQ
  • 编译mksquashfs工具
  • 使用mksquashf创建压缩文件系统
  • 挂载: mount suqash文件系统到一个临时目录
  • 如果需要自动挂载,更改/etc/fstab 或者起始脚本, 以使linux操作系统自动加载新的 squashfs 文件系统

二、flash分区

  • fdisk是用来查看硬盘分区的,不能查看flash分区,因为flash是没有所谓的分区表
  • 查看flash分区使用命令cat /proc/partitions
  • 不像硬盘通过命令分区,flash分区是Linux内核中实现的
  • Uboot没有对Nandflash进行分区,通过bootargs参数将分区信息传递给内核
setenv bootargs 'mem=64M console=ttyAMA0,115200 rw root=/dev/mtdblock2 rootfstype=squanshfs mtdparts=hi_sfc:1M(boot),4M(kernel),12M(rootfs)'

参考链接:https://blog.csdn.net/wesleyluo/article/details/8102361

三、文件系统镜像制作

mksquashfs source dest [options] [-e list of exclude dirs/files]:

  • eg:mksquashfs xxx.squashfs -b 64K -comp xz
  • -b <block_size>:设置块大小,单位 Bytes,默认 131072 bytes (1MB)
  • -comp:指定压缩算法:gzip (default)/lzo/xz

参考链接:https://blog.csdn.net/qq_40083589/article/details/82948536

四、镜像使用

提取镜像中的文件:

unsquashfs xxx.squashfs

将镜像文件转换为一个块设备:

sudo losetup /dev/myloop xxx.squashfs

将块设备挂载到主文件系统的目录:

sudo mount /dev/myloop dirname

就可以进入dirname目录,对该虚拟磁盘进行操作了,就像使用真实磁盘一样

卸载该镜像:

sudo umount /dev/myloop
sudo losetup -d /dev/myloop

参考链接:https://blog.csdn.net/qq_40083589/article/details/82948536

以上是关于系统篇: squashfs 文件系统的主要内容,如果未能解决你的问题,请参考以下文章

squashfs文件系统

Linux--SquashFS

linux中常用文件系统介绍——cramfs JFFS2 NFS initrd yaffs2 Ext4 squashfs

运行无根 Podman 时如何在容器中挂载 squashfs 文件?

linux挂载iso,u盘,分区,squashfs压缩文件

提取路由器固件中的squashfs