在鸟叔的书上这么说:所谓的挂载,就是利用一个目录当成进入点,将磁盘分区的数据放在该目录下;也就是说,进入该目录就可以读取该分区的意思。
我们称这个操作为挂载,这个目录为“挂载点".
在鸟叔的书上说,因为每种操作系统所设置的文件属性/权限并不相同,为了存放这些文件所需的数据,因此需要讲分区进行格式化,以成为操作系统能够利用的文件系统格式。
因为新技术的应用,格式化不再是针对分区进行的,也就是说一个分区可以格式化为多个文件系统。所以,我们称呼一个可以被挂载的数据为一个文件系统而不是一个分区。
第一步,安装工具:
sudo apt-get install android-tools-fsutils
第二步,执行命令:(其中,512M为文件系统的大小,test为文件系统的名字,tmp为提前创建好的文件夹,里面可以有文件。)
make_ext4fs -l 512M test tmp
如果得到一个文件系统,并且知道格式,那么可以奖其挂载并且访问里面的内容。挂载的命令为:(其中,a为上面提到的”挂载点”,也就是目录。)
sudo mount -t ext4 test a
直接上命令:
sudo umount a
接下来主要是写一下ext4文件系统。从spec的角度介绍一下。
在ext4文件系统中,每个文件都会有一个inode与之对应。一个inode结构体,会有以下信息:属性、长度、文件内容的所在位置…
inode号可以通过命令查看:ls -i
先看一张大图。ext4文件系统从前到后就是按照下面的结构排放。一个文件系统由n个Block Group组成。有些比较小的文件系统只有一个block group。下面就分析一个block group 结构。
对于block group 0前面的1024个字节,是没有被使用的。用二进制查看就是全0。
ext4文件系统是以block为存储单位的。 从上面的图中可以看出block group 0 的superblock的起始偏移是1024个字节。
如果每个block的size是1024个字节,那么block group 0 的superblock就是block1.
如果每个block的size大于1024个字节,那么block group 0 的superblock是block0.
(因为block size最常见的是4096字节,后文中,如果没有特别强调,都默认size是4096)
而其他的block group的前面没有这个1024个字节的Padding,所以,上图将它拎出来。
superblock在每一个block group的第一个block。superblock中有很多非常重要的信息。包括block的size,block数量,inode的数量,文件系统支持的特征等。其中,superblock的有效内容为1024个字节。
superblock中的信息包括以下部分:
顾名思义,这个部分是用来描述这个block group。具体会有哪些内容呢?
可能看着这个表格没什么感觉,那么看一下下面的图:
上面的图的下部分是直接截取的block group descriptition的二进制图。
因为blocksize是4096,1024个字节是padding,1024-2047字节是superblock,后面是unused,一直到4095个字节,也就是为什么block group descriptition是从0x1000开始的。
前面说了,ext4文件系统是以block为存储单位的。所以这些结构在什么位置,也是用block号来标志的。比如,block group descriptition在此处就是block1。而从总结构里面可以看到,block group descriptition的大小不是确定为几个block,因此,它后面的结构是在第几个block,这个就是根据block group descriptition中的内容得到的。比如,第一个数值是data block bitmap的block号。第二个数值是inode bitmap的block号。第三个值是inode table 所在的block的block号。