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

765-4321-0
Page Size=2KB0 1
Block Size=128KB0 1
Spare Area Size=16/512 byte1
Serial Access Time = Reserved10
Organization=x80

第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可以查看是否一致:

参考链接:

https://www.cnblogs.com/linux-farmer/p/7379929.html

https://www.cnblogs.com/linux-farmer/p/14831677.html

留下评论

您的电子邮箱地址不会被公开。 必填项已用*标注