mount命令技巧之巧解文件系统
Linux mount命令是经常会使用到的命令,它用于挂载Linux系统外的文件。命令示例如下:
mount [-hV] mount -a [-fFnrsvw] [-t vfstype] mount [-fnrsvw] [-o options [,...]] device | dir mount [-fnrsvw] [-t vfstype] [-o options] device dir |
其中命令中用的比较多的参数解释如下:
-a:将 /etc/fstab 中定义的所有档案系统挂上。 -t:指定档案系统类型,通常不必指定。mount 会自动选择正确的类型。 -o remount:将一个已经挂下的档案系统重新用不同的方式挂上。例如原先是唯读的系统,现在用可读写的模式重新挂上。 -o ro:用唯读模式挂上。 -o rw:用可读写模式挂上。 -o loop:使用 loop 模式用来将一个档案当成硬盘分割挂上系统。 |
对于设备固件包,如使用jffs2、ubi打包的固件,除了使用神器binwalk来解包以外,还可以使用Linux的mount命令进行解包:
首先,你得安装一些依赖工具:
sudo apt-get install mtd-utils |
对于JFFS2文件系统的固件,如rootfs.jffs2,执行如下命令后,在/mnt/jffs2目录就能找到挂载的文件系统目录及对应文件:
modprobe nandsim first_id_byte=0x2c second_id_byte=0xda third_id_byte=0x00 fourth_id_byte=0x15
modprobe mtdblock
modprobe mtdchar
modprobe mtd mtd=0
dd if=rootfs.jffs2 of=/dev/mtd0
mkdir /mnt/jffs2
mount -t jffs2 /dev/mtdblock0 /mnt/jffs2
对于UBI文件系统,同理:
modprobe nandsim first_id_byte=0x2c second_id_byte=0xda third_id_byte=0x00 fourth_id_byte=0x15
modprobe ubi mtd=0
ubidetach /dev/ubi_ctrl -m 0
ubiformat /dev/mtd0 -s 2048 -f rootfs.ubi
ubiattach /dev/ubi_ctrl -m 0 -O 2048
mkdir /mnt/ubi
mount -t ubifs ubi0 /mnt/ubi
对于EXT2、EXT4等等文件系统,Linux mount能够自动识别并挂载:
mkdir /mnt/ext2 mount -o loop rootfs.ext2 /mnt/ext2 |
想要查看mount支持哪些文件系统类型,可以查看/lib/modules/内核版本/kernel/fs目录,里面列出来的就是系统支持的mount类型,如下图所示:

当然也可以查看/proc/filesystems来知晓支持的mount类型:

类似智能设备会经常出现一些特殊的挂载,不用指定设备(nodev),如:
mount -t proc proc /proc mount -t tmpfs mdev /dev mount -t sysfs sysfs /sys mount -t devpts devpts /dev/pts |
如果要重新挂载某一分区可以这样:
# 挂载为可写权限 mount -o remount,rw /mnt # 挂载为只读权限 mount -o remount,ro /mnt |
附:
如何修改模拟的nand闪存参数,可以参考对应芯片的资料,如S34ML02G200BHI000。
ID的每一字节的含义,可以看出1、2字节为厂商、设备的信息定义,第3、4、5字节为参数的定义:

ID的每一字节的定义:

第3字节参数的定义:

第4字节参数的定义:

比如比如我需要以下定义的flash闪存,那么值应该为二进制1 0 01 0 1 01 = 十六进制0x95
7 | 6 | 5-4 | 3 | 2 | 1-0 | |
Page Size=2KB | 0 1 | |||||
Block Size=128KB | 0 1 | |||||
Spare Area Size=16/512 byte | 1 | |||||
Serial Access Time = Reserved | 1 | 0 | ||||
Organization=x8 | 0 |
第5字节参数的定义:

比如我需要大小为2Gbit=256MB、块大小为128KB、页大小为2KB的闪存,可以使用如下命令(不需要填写第5字节值):
modprobe nandsim first_id_byte=0x01 second_id_byte=0xda third_id_byte=0x90 fourth_id_byte=0x95
使用mtdinfo可以查看是否一致:

参考链接: