linux基础学习--linux磁盘与文件管理系统
linux磁盘与文件管理系统
1.认识linux系统
1.1 磁盘组成与分区的复习
首先了解磁盘的物理组成,主要有:
- 圆形的碟片(主要记录数据的部分)。
- 机械手臂,与在机械手臂上的磁头(可擦写碟片上的内容)。
- 主轴马达,可以转动碟片,让机械手臂的磁头在碟片上读写数据。
数据存储与读取的重点在于碟片,而碟片上的物理组成为: - 扇区切最小的物理存储单位,且根据磁盘设计的不同,目前有512B和4KB两种格式。
- 将扇区组成一个圆,就是柱面。
- 早期分区主要以柱面作为最小的分区单位,现在的分区通常使用扇形作为最小分区单位(每个扇区都有其号码,就好像座位一样)。
- 磁盘分区主要有两种格式,一种是限制较多的MBR分区表,一种是较新且限制较少的GPT分区表;
- MBR分区表中,第一个扇区最为重要,里面有:主引导记录,及分区表,其中MBR占有446B,而分区表则占有64B。
- GPT分区表除了分区数量扩充较多之外,支持的磁盘空间也可以超过2TB。
基本上所有物理磁盘的文件都被模拟成/dev/sd[a-p]
的格式,第一块磁盘名为/dev/sda,分区的文件名以第一块磁盘为例,为/dev/sda[1-28]
,除物理磁盘下,虚拟机的磁盘通常为/dev/vd[a-p]
的格式。如果有使用到软件磁盘阵列的话,还有/dev/md[0-128]
的磁盘文件名。使用LVM时,文件名则为/dev/VGANE/LVNAME
。我们这里主要学习物理磁盘和虚拟磁盘。 /dev/sd[a-p][1-128]:为物理磁盘的文件名。
/dev/vd[a-d][1-128]:为虚拟磁盘的文件名。
1.2 文件系统特性
在磁盘分区完毕后,还需要进行格式化,之后操作系统才能使用这个文件系统。
这是因为每种操作系统所设置的文件属性/权限并不相同,为了存放这些文件所需数据,因此就需要将分区进行格式化,已成为操作系统能够利用的文件系统格式。
通常我们称一个可被挂载的数据为一个文件系统而不是一个分区。
在操作系统的文件中,除了实际内容外,还有很多属性,如Linux操作系统的文件权限(rwx)与文件属性(拥有者,用户组,时间参数等)。文件系统通常会将这两部分的数据分别存放在不同的区块,权限与属性放置到inode中,至于实际数据则放置到数据区块中。此外,还有一个超级区块(superblock)会记录整个文件系统的整体信息,包括inode与数据区块的总量,使用量,剩余量等
每个inode与区块都有编号,至于这三个数据的意义简略说明如下:
- 超级区块 :记录此文件系统的整体信息,包括inode与数据区块的总量,使用量,剩余量,以及文件系统的格式与相关信息等。
- inode :记录文件的属性,一个文件占用一个inode,同时记录此文件的数据所在的区块号码。
- 数据区块 :实际记录文件的内容,如果文件太大,会占用多个区块。
每个inode与数据区块都有编号,每个文件都占用一个inode,inode内有文件数据放置的区块号码。因此找到了文件的inode,就找到了文件数据区块的号码,就能读出文件的实际数据。
这种数据存取方式称为索引式文件系统。
还有其他常用的文件系统,比如U盘使用的FAT格式的文件系统,
因为这种文件系统中没有inode存在,如果一个文件数据写入的区块太松散,需要读取磁盘好几次才能完整读取这个文件。
所谓碎片整理,就是因为文件写入的区块太过于离散,文件读取的性能会变的很差,需要通过碎片整理将同一个文件所属的区块都集合到一起,这样数据的读取会比较容易。
1.3 Linux的ext2文件系统(inode)
标准的ext2文件系统就是这种含有inode,数据区块,超级区块等,以inode为基础的Linux文件系统。
文件系统一开始就将inode和数据区块规划好了,除非重新格式化(或利用resize2fs等命令修改其大小),否则inode与数据区块固定后就不再变动了。
当文件系统有数百GB,再将所有inode和数据区块都放在一起就很不易管理了。
因此,ext2文件系统格式化时基本上是区分成多个区块群组(block group),每个区块都有独自的inode,数据区块,超级区块系统。
在ext2文件系统中,最前面有一个启动扇区,这个启动扇区可以安装启动引导程序。
每一个区块群组的六个内容如下:
- 数据区块(data block)
数据区块是用来放置文件数据的地方,在ext2文件系统中所支持的区块大小有1K,2K及4K三种。格式化是区块大小就被固定了,且每个区块都有编号。而区块大小也会产生差异:
Block 大小 | 1 KB | 2 KB | 4 KB |
---|---|---|---|
最大单一文件大小 | 16 GB | 256 GB | 2 TB |
最大文件系统总容量 | 2 TB | 8 TB | 16 TB |
ext2文件系统还有一些限制:
- 原则上,区块的大小和数量在格式化完成后就不能再修改(除非重新格式化)。
- 每个区块内最多只能放置一个文件的数据。
- 承上,如果文件大于区块的大小,则一个文件会占用多个区块数量。
- 承上,如果文件小于区块,则该区块的剩余容量就不能够再被使用了(磁盘空间被浪费了)。
由于这些限制,当小文件较多时,而区块较大,例如区块为4KB,而小文件仅为50B,那么每个区块都将浪费4046B的空间。
那么将区块设置为1KB呢?这样但文件会占用很多区块,而每个区块的inode都需要被记录,造成读写性能不佳。 - inode table(inode表)
基本上,inode记录文件的属性及文件数据放置区块的编号,至少有下面的: - 该文件的读写属性(read,write,excute)。
- 该文件的拥有者与用户组(owner,group)。
- 该文件的大小。
- 该文件建立或状态改变的时间(ctime)。
- 最近一次的读取时间(atime)。
- 最近修改的时间(mtime)。
- 定义文件特性的标识(flag),如SetUID。
- 该文件真正内容的指向(pointer)。
inode的数量与大小也是在格式化时就已经固定了,除此之外还有一些特点: - 每个inode大小均固定为128B(新的ext4与xfs可设置到256B);
- 每个文件都仅会占用一个inode而已。
- 承上,因此文件系统能够建立的文件数量与inode的数量有关。
- 系统读取文件时需要先找到inode,并分析inode所记录的权限与用户是否符合,若符合才能读取区块的内容。
- Superblock(超级区块)
超级区块时记录整个文件系统相关信息的地方,没有超级区块,就没有这个文件系统,它记录的信息有:- 数据区块与inode的总量。
- 未使用与已使用的inode与数据区块数量。
- 数据区块与inode的大小(block为1,2,4K,inode为128B或256B)。
- 文件系统的挂载时间,最近一次写入数据的时间,最近一次检验磁盘的时间等文件系统的相关信息。
- 一个有效位数值,若该文件系统已被挂载,则有效位为0,若未被挂载,则有效位为1。
一个文件系统应该仅有一个超级区块,位于它的第一个区块群组,后续的区块1群组中也可能含有超级区块,不过都是对第一个超级区块的备份。
- Filesystem Description(文件系统描述说明)
这个区段可以描述每个区块群组的开始与结束的区块,以及说明每个区块(超级区块,对照表,inode对照表,数据区块)分别介于哪个区块之间。 - 区块对照表(block bitmap)
从区块对照表中可以知道那些区块是空的,因此我们的系统就能够快速的找到可使用的空间来处理文件。
删除文件,对应区块空出来时,对照表中他们的状态就会变成未使用中。 - inode对照表(inode bitmap)
与区块对照表功能类似