linux文件系统知识介绍
1. 什么是文件系统
文件系统是对一个存储设备上的数据和元数据进行组织的机制。文件系统是操作系统用于明确磁盘或分区上的文件的方法和数据结构;即在磁盘上组织文件的方法。文件系统是存储文件或数据的方法,目的是易于查询和存取数据。
unix/linux的文件系统有很多种实现,如UFS,ext3,ext4,ZFS和Reiserfs等。
硬盘的最小存储单位是扇区,而数据最小的单位不是扇区,因为扇区的存储效率很低。一个扇区的大小为512字节,读数据时,磁头是一个扇区扇区地读取,如果文件是10M,那么为了读这个文件,磁头必须要进行读取(10M=1024102410字节) /512字节=20480次IO,这样效率是极其低下的。
2. 什么是块设备?
块设备就是以块为单位收发数据的设备,它们支持缓冲随机访问(不是顺序读取块,而是可以在任何时候访问任何块)等特性。块设备包括硬盘、CD-ROM和RAM盘。与块设备相对的是字符设备,字符设备没有可以进行物理寻址的媒体。字符设备包括串行端口和磁带设备,只能逐字符地读取这些设备中的数据。
3. 什么是逻辑块设备?
为了提高硬盘读取数据效率,就有了逻辑块(Block)的概念,也叫做数据块。逻辑块是在分区进行文件系统格式化时所指定的"最小存储单位",这个最小存储单位是以扇区为基础的,所有逻辑块的大小总是扇区的2的n次方倍。
10M=10240K/4K=2560次IO
逻辑块并不是越大越好。因为一个逻辑块最多只能存储一个文件。如果逻辑块划分太大,那么会很浪费磁盘空间。如一个逻辑块为4KB,而一个文本文件只有0.1KB,而这个文件仍要占用一个逻辑块,因此会浪费3.9KB的空间。
所以在规划磁盘时,要考虑到主机的用途。比如BBS,blog主机,由于文章短小,文件图片较小,那么逻辑块分小一点好=>4K。
如果主机主要用在存储大容量的文件(如视频文件),那么考虑到数据读取效率,逻辑块大一点好,如16-32k。
考试题:往10M的一块硬盘里写0.1K的文件,能写多少个?
解答:要看inode数和block的大小。
[root@A-server ~]# dumpe2fs /dev/sda2 | grep -i "Block size"
dumpe2fs 1.39 (29-May-2006)
Block size: 4096
4. 磁盘的组成
磁盘=分区+分区+分区…
每个分区有且仅有一个文件系统
分区=自举块+超级块+若干块组
每个块组又包含:……
5. 磁盘分区
每个分区是由多个柱面组成
分区的相关管理信息记录在MBR的分区表中。
6. 文件系统的磁盘布局
ext2文件系统
我们知道,一个磁盘可以划分成多个分区,每个分区必须先用格式化工具(例如某种mkfs命令)格式化成某种格式的文件系统,然后才能存储文件,格式化的过程会在磁盘上写一些管理存储布局的信息。下图是一个磁盘分区格式化成ext2文件系统后的存储布局。
mke2fs的-b选项可以设定块大小为1024,2048或4096字节。
启动块(Boot Block)的大小是确定的,就是1KB,启动块是由PC标准规定的,用来存储磁盘分区信息和启动信息,任何文件系统都不能使用启动块。启动块之后才是ext2文件系统的开始,ext2文件系统将整个分区划成若干个同样大小的块组(Block Group),每个块组都由以下部分组成:
6.1. 超级块(super Block)
超级块描述整个分区的文件系统信息,例如块大小、文件系统版本号、上次mount的时间等等。
超级块位于每个块组的最前面,每个块组包含超级块的内容是相同的(超级块在每个块组的开头都有一份拷贝);
超级块是记录整个文件系统相关信息的地方,它的作用是存储文件系统的大小,空的和填满的块,以及它们各自的总数和和其它诸如此类的信息。要使用一个分区来进行数据访问,那么第一个要访问的就是超级块。如果超级块环了,那么硬盘也就基本没救了,换名话,没有超级块就没有这个文件系统。
6.2. 数据块(Data Block)
根据不同的文件类型有以下几种情况
- 对于常规文件,文件的数据存储在数据块中。
- 对于目录,该目录下的所有文件名和目录名存储在数据块中,注意文件名保存在它所在目录的数据块中,除文件名之外,ls -l命令看到的其它信息都保存在该文件的inode中。注意这个概念:目录也是一种文件,是一种特殊类型的文件。
- 对于符号链接,如果目标路径名较短则直接保存在inode中以便更快地查找,如果目标路径名较长则分配一个数据块来保存。
- 设备文件、FIFO和socket等特殊文件没有数据块,设备文件的主设备号和次设备号保存在inode中。
6.3. inode索引节点
inode是EXT2基本构件,表示文件系统树型结构的节点。
EXT2文件系统中的每个文件由一个inode描述,且只能由一个inode描述。
inode与文件一起存放在外存,系统运行时,把inode写入内存建立映像,加快文件系统速度。