- 文件系统建立在磁盘上
- ext2、ext3、ext4和xfs
- inode、数据区块(block)和超级区块(superblock)
磁盘组成与分区
整块磁盘组成
- 圆形碟片(主要记录数据的部分)
- 机械手臂,与机械手臂上的磁头(擦写磁片上的数据)
- 主轴马达,用于转动碟片,让机械手臂的磁头在碟片上读写数据
碟片物理组成
- 扇区(Sector):最小物理存储单位,依据磁盘设计的不同,目前主要有512B与4KB两种格式
- 柱面:扇区组成的一个圆
- 现在的分区通常使用扇区为最小分区单位,每个扇区都有其号码(早期分区以柱面为最小分区单位)
- 磁盘分区表主要有两种格式:1. 限制较多的MBR分区表。2. 较新且限制较少的GPT分区表
- MBR分区表:第一个扇区最重要,其包括:主引导记录(Master boot record,MBR)及分区表(partition table),其中MBR占446B,分区表占64B
- GPT分区表除了分区数量扩充较多,支持的磁盘容量也可超过2TB
磁盘文件名
- 所有的物理磁盘文件名都被模拟成
/dev/sd[a-p]
的格式,第一块磁盘文件名为/dev/sda
- 分区的文件名若以第一块磁盘为例,则为
/dev/sda[1-128]
- 通常虚拟机的磁盘文件名也被命名为
/dev/vd[a-p]
- 若使用到软件磁盘阵列,可能文件名还有
/dev/md[0-128]
,使用LVM时,文件名则为/dev/VGNAME/LVNAME
文件系统特性
- 磁盘分区完还需要进行格式化(format),之后操作系统才能够使用这个文件系统。
- Why格式化?因为每种操作系统所设置的文件属性、权限并不相同,为了存放这些文件所需数据,因此就需要将分区格式化,以成为操作系统能够利用的文件系统格式(filesystem)
- 每种操作系统能够使用的文件系统并不相同。 win98(FAT或FAT16),Windows 2000及以后(NTFS),Linux(ext2)
- 传统磁盘与文件系统,一个分区只能被格式化成为一个文件系统,因此认为一个文件系统就是一个硬盘分区
- 新技术利用,LVM和磁盘阵列,可以将一个分区格式化为多个文件系统,也能够将多个分区合成一个文件系统。
- 一个可被挂载的数据为一个文件系统而不是一个分区。
- 较新的操作系统的文件除了文件实际内容之外,通常含有非常多的属性,如文件权限(rwx)与文件属性(拥有者、用户组、时间参数等)
- 文件系统通常将这两部分数据分别存放在不同的区块,权限与属性放置到inode中,至于实际数据则放置到数据区块中
- 超级区块(superblock):记录整个文件系统的整体信息,包括inode与数据区块的总量、使用量、剩余量,以及文件系统的格式和相关信息等
- inode:记录文件属性,一个文件占用一个inode,同时记录此文件的数据所在的区块号码
- 数据区块:实际记录文件的内容,若文件太大,会占用多个区块。
Linux的ext2文件系统(inode)
- 文件系统一开始就将inode与数据区块规划好了,除非重新格式化(或利用resize2fs等命令修改其大小),否则inode与数据区块固定后就不在变动
- ext2文件系统格式化的时候基本上是区分为多个区块群组(block group),每个区块群组都有独立的inode、数据区块、超级区块系统。
- 在整体规划当中,文件系统最前面有一个启动扇区(boot sector),这个启动扇区可以安装启动引导程序。
- ext2文件系统支持数据区块大小有1K、2K和4K三种,数据区块大小的差异,会导致该文件系统能够支持的最大磁盘容量与最大单一文件容量并不相同
Block大小 | 1K | 2K | 4K |
---|---|---|---|
最大单一文件限制 | 16GB | 256GB | 2TB |
最大文件系统总容量 | 2TB | 8TB | 16TB |
ext2文件系统区块限制:
- 原则上,区块的大小与数量在格式化完就不能够再修改
- 每个区块内最多只能够放置一个文件的数据
- 如果文件大于区块的大小,则一个文件会占用多个区块数量
- 如果文件小于区块,则该区块的剩余容量就不能再被使用
inode table
inode的内容记录文件的属性以及该文件实际数据放置在哪几个区块内。基本上,inode记录的数据至少有:
- 该文件的读写属性(r 、 w、 x)
- 该文件的拥有者和用户组
- 该文件的大小
- 该文件的建立或状态改变时间(ctime)
- 最近一次的读取时间(atime)
- 最近修改时间(mtime)
- 定义文件特性的标识(flag)
- 该文件真正内容的指向
inode的数量和大小也是在格式化时就已固定:
- 每个inode大小均固定为128B(ext4和xfs可设置为256B)
- 每个文件都仅会占用一个inode
- 文件系统能够建立的文件数量与inode的数量有关
- 系统读取文件需要先找到inode,并分析inode所记录的权限与用户是否符合,如符合才能够读取区块的内容。
超级区块(super block)
超级区块是记录整个文件系统相关信息的地方:
- 数据区块与inode的总量
- 未使用与已使用的inode和数据区块数量
- 数据区块和inode的大小
- 文件系统的挂载时间、最近一次写入数据的时间、最近一次检验磁盘(fsck)的时间等文件系统的相关信息
- 一个有效数值,若此文件系统已被挂载,则有效 位为0,若未被挂载,则有效位为1.
dumpe2fs:查看ext系列超级区块信息命令
centos7位xfs默认文件系统,无法使用dumpe2fs查询。
目录
文件系统会分配一个inode和至少一块区块给目录
Linux文件系统的运行
Linux系统上面的文件系统与内存有非常大的关系
- 系统会将常用的文件数据放置到内存的缓冲区,以加速文件系统的读写操作
- 手动使用
sync
来强制内存中设置为Dirty的文件回写到磁盘中 - 正常关机,关机命令会主动调用sync来讲内存的数据回写入磁盘
- 不正常关机(断电、宕机等),由于数据尚未回写到磁盘,因此重新启动后可能会花很多时间在进行磁盘校验,甚至可能导致文件系统损坏(非磁盘损坏)。
挂载点的意义
文件系统要能够连接到目录树才能被我们使用。将文件系统与目录树结合的操作称为【挂载】
- 挂载点一定是目录,该目录为进入该文件系统的入口
- 并不是任何文件系统都能使用,必须要挂载到目录树的某个目录后,才能够使用该文件系统
其他Linux支持的文件系统与VFS
- 传统文件系统:ext2、minix、FAT(用vfat模块)、iso9660(光盘)等
- 日志式文件系统:ext3、ext4、ReiserFS、windows’s NTFS、IBM’s JFS、SGI’s XFS、ZFS
- 网络文件系统:NFS、SMBFS
查看linux支持哪些文件系统:
[root@jiangguobiao ~]# ls -l /lib/modules/$(uname -r)/kernel/fs
total 20
-rw-r--r--. 1 root root 5992 Jun 23 23:58 binfmt_misc.ko.xz
drwxr-xr-x. 2 root root 25 Jun 26 13:50 btrfs
drwxr-xr-x. 2 root root 30 Jun 26 13:50 cachefiles
drwxr-xr-x. 2 root root 24 Jun 26 13:50 ceph
drwxr-xr-x. 2 root root 24 Jun 26 13:50 cifs
drwxr-xr-x. 2 root root 26 Jun 26 13:50 cramfs
drwxr-xr-x. 2 root root 23 Jun 26 13:50 dlm
drwxr-xr-x. 2 root root 26 Jun 26 13:50 exofs
drwxr-xr-x. 2 root root 24 Jun 26 13:50 ext4
drwxr-xr-x. 2 root root 60 Jun 26 13:50 fat
drwxr-xr-x. 2 root root 27 Jun 26 13:50 fscache
drwxr-xr-x. 2 root root 42 Jun 26 13:50 fuse
drwxr-xr-x. 2 root root 24 Jun 26 13:50 gfs2
drwxr-xr-x. 2 root root 25 Jun 26 13:50 isofs
drwxr-xr-x. 2 root root 24 Jun 26 13:50 jbd2
drwxr-xr-x. 2 root root 25 Jun 26 13:50 lockd
-rw-r--r--. 1 root root 5212 Jun 23 23:58 mbcache.ko.xz
drwxr-xr-x. 6 root root 137 Jun 26 13:50 nfs
drwxr-xr-x. 2 root root 46 Jun 26 13:50 nfs_common
drwxr-xr-x. 2 root root 24 Jun 26 13:50 nfsd
drwxr-xr-x. 2 root root 4096 Jun 26 13:50 nls
drwxr-xr-x. 2 root root 27 Jun 26 13:50 overlayfs
drwxr-xr-x. 2 root root 27 Jun 26 13:50 pstore
drwxr-xr-x. 2 root root 28 Jun 26 13:50 squashfs
drwxr-xr-x. 2 root root 23 Jun 26 13:50 udf
drwxr-xr-x. 2 root root 23 Jun 26 13:50 xfs
查看系统目前已加载到内存中支持的文件系统:
[root@jiangguobiao ~]# cat /proc/filesystems
nodev sysfs
nodev rootfs
nodev ramfs
nodev bdev
nodev proc
nodev cgroup
nodev cpuset
nodev tmpfs
nodev devtmpfs
nodev debugfs
nodev securityfs
nodev sockfs
nodev dax
nodev bpf
nodev pipefs
nodev configfs
nodev devpts
nodev hugetlbfs
nodev autofs
nodev pstore
nodev mqueue
nodev selinuxfs
xfs
nodev rpc_pipefs
nodev overlay
xfs文件系统
xfs文件系统在数据分布上,主要规划为三个部分,一个数据区(data section)、一个文件系统活动登录区(log section)以及一个实时运行区(realtime section)
文件系统操作
磁盘与目录容量
df
:列出文件系统的整体磁盘使用量du
:查看文件系统的磁盘使用量(常用在查看目录所占用的磁盘空间)
df
df [-ahikHTm] [目录或文件名]
-a:列出所有的文件系统,包括系统特有的/proc等文件系统
-k:以KBytes的容量显示各文件系统
-m:以MBytes的容量显示各文件系统
-h:以人们较易读的GBytes、MBytes、KBytes等格式显示
-H:以M=1000K替换M=1024K
-T:连同该硬盘分区的文件系统名称(例如xfs)也列出
-i:不用磁盘容量,而以inode的数量来显示
例:
#