[windows 98 以前的 微软操作系统主要利用的文件系统是 FAT (或 FAT16) , windows 98 以前的 微软操作系统主要利用的文件系统是 FAT (或 FAT16) ,至于 Linux 的正统文件系统则为 Ext2 (Linux second extended file system, ext2fs)这一个。 此外,在默认的情况下,windows 操作系统是不会认识 Linux 的 Ext2 的。]()
文件属性和权限设置放置到inode中,而iNode中指出文件数据的放置block。这种方式称之为索引式文件系统。
FAT格式的文件系统:FAT 这种格式的文件系统并没有 inode 存在,所以 FAT 没有办法将这个文件的所有 block 在一开 始就读取出来。每个 block 号码都记录在前一个 block 当中 。我们假设文件的数据依序写入 1->7->4->15 号这四个 block 号码中, 但这个文件系统没有办 法一口气就知道四个 block 的号码,他得要一个一个的将 block 读出后,才会知道下一个 block 在 何处。
但是如果文件过大(数百GB时),将所有的iNode和block放在一起就显得和冗余,不好管理。
所以系统分为多个区块群组block group :每 个区块群组都有独立的 inode/block/superblock 系统 。
data block :在EXT2文件系统支持的大小有1k,2k,4k。(在格式化时固定),而data block 大小的差异会导致系统能支持的最大磁盘容量与最大单一文件容量也不同。
data block 大小 | 1KB | 2KB | 4KB |
---|---|---|---|
最大单一文件限制 | 16GB | 256GB | 2TB |
最大文件系统总容量 | 2TB | 8TB | 16TB |
但是虽然EXT2支持2GB以上的文件,但需要软件也同样支持的情况下才能正常工作。
例题: 假设你的 Ext2 文件系统使用 4K block ,而该文件系统中有 10000 个小文件,每个文件大小均为 50bytes, 请问 此时你的磁盘浪费多少容量? 答: 由于 Ext2 文件系统中一个 block 仅能容纳一个文件,因此每个 block 会浪费『 4096 - 50 = 4046 (byte)』, 系统中 总共有一万个小文件,所有文件容量为:50 (bytes) x 10000 = 488.3Kbytes,但此时浪费的容量为:『 4046 (bytes) x 10000 = 38.6MBytes 』。想一想,不到 1MB 的总文件容量却浪费将近 40MB 的容量,且文件越多将造成越多的磁 盘容量浪费
.
inode table
但是;当inode要记录的数据非常多,且每个inode的大小又只有128byte,而记录一个block需要4byte,假设我一个文件有 400MB 且每个 block 为 4K 时, 那么至少也要十万笔 block 号码的记录呢 。inode 哪有这么多可 记录的信息?为此我们的系统很聪明的将 inode 记录 block 号码的区域定义为 12 个直接,一个间接, 一个双间接与一个三间接记录区。这是啥?我们将 inode 的结构画一下好了 。
这样子 inode 能够指定多少个 block 呢?我们以较小的 1K block 来说明好了,可以指定的情况如 下:
12 个直接指向: 121K=12K 由于是直接指向,所以总共可记录 12 笔记录,因此总额大小为如上所示;
间接: 2561K=256K 每笔 block 号码的记录会花去 4bytes,因此 1K 的大小能够记录 256 笔记录,因此一个间接可以记录的 文件大小如上;
双间接: 2562561K=2562K 第一层 block 会指定 256 个第二层,每个第二层可以指定 256 个号码,因此总额大小如上;
三间接: 256256256*1K=2563K 第一层 block 会指定 256 个第二层,每个第二层可以指定 256 个第三层,每个第三层可以指定 256 个号 码,因此总额大小如上; *
总额:将直接、间接、双间接、三间接加总,得到 12 + 256 + 256256 + 256256*256 (K) = 16GB 这个16GB对应了上表的16GB。
Superblock :记录整个 文件系统的地方。非常重要。
这个玩意记录了:
block bitmap :记录block的使用情况:已使用和未使用。
inode bitmap :记录inode的使用情况:已使用和未使用。
目录树读取
目标文件目录:/etc/passwd/
日志式文件系统 (Journaling filesystem) :filesystem 当中规划出一个区块,该区块专门在记录写入或修订文件时的步骤,
文件系统的运作:
其他linux支持的文件系统和VFS
虽然 Linux 的标准文件系统是 ext2 ,且还有增加了日志功能的 ext3/ext4 ,事实上,Linux 还有支 持很多文件系统格式的, 尤其是最近这几年推出了好几种速度很快的日志式文件系统,包括 SGI 的 XFS 文件系统,可以适用更小型文件的 Reiserfs 文件系统,以及 Windows 的 FAT 文件系统等等, 都能够被 Linux 所支持喔!常见的支持文件系统有:
在系统中查看支持的文件格式: ls -l /lib/modules/$(uname -r)/kernel/fs
Linux VFS (Virtual Filesystem Switch)
VFS的功能是帮助整个linux系统去管理filesystems的。
假设你的 / 使用的是 /dev/hda1 ,用 ext3 ,而 /home 使用 /dev/hda2 ,用 reiserfs , 那么你取用 /home/dmtsai/.bashrc 时,有特别指定要用的什么文件系统的模块来读取吗? 应该是没有吧!这个就 是 VFS 的功能啦!透过这个 VFS 的功能来管理所有的 filesystem, 省去我们需要自行设定读取文 件系统的定义啊~方便很多!
、
从CentOS7开始,预设的文件系统就已经从EXT4转变成XFS格式了,那么是什么原因让CentOs放弃支持度最完整的EXT4而改XFS呢?
EXT :支持度最广,但格式化超慢!
XFS:不逊于EXT,格式化超快,支持大型文件
分为三个部分:资料区(data section)、文件系统活动登录区(log section)、实时运作区(realtime section)。
资料区:跟EXT类似,XFS的资料区放置的也为inode/data block/super block 等数据。分为多个储存区群组(allocation groups)来存放文件系统需要的数据。每储存区群组都包含了:
另外,与 ext 家族不同的是, xfs 的 block 与 inode 有多种不同的容量可供设定,block 容量可 由 512bytes ~ 64K 调配,不过,Linux 的环境下, 由于内存控制的关系 (页面文件 pagesize 的 容量之故),因此最高可以使用的 block 大小为 4K 而已!(鸟哥尝试格式化 block 成为 16K 是 没问题的,不过,Linux 核心不给挂载! 所以格式化完成后也无法使用啦!) 至于 inode 容量可 由 256bytes 到 2M 这么大!不过,大概还是保留 256bytes 的默认值就很够用了
文件系统活动登录区(log section)
在登录区这个区域主要被用来纪录文件系统的变化,文件的变化会在这 里纪录下来,直到该变化完整的写入到数据区后, 该笔纪录才会被终结。如果文件系统因为某些 缘故 (例如最常见的停电) 而损毁时,系统会拿这个登录区块来进行检验,看看系统挂掉之前, 文 件系统正在运作些啥动作,藉以快速的修复文件系统。
因为文件系统在所有活动时都会在log section留下痕迹,所以这个区域的磁盘活动是相当频繁的,而且有意思的时,XFS文件系统支持指定外部硬盘来当做log section!这就可以让整个文件系统的数据读取变得更快!
实时运作区(realtime section)
当有文件要被建立时,xfs 会在这个区段里面找一个到数个的 extent 区块,将文件放置在这个区 块内,等到分配完毕后,再写入到 data section 的 inode 与 block 去! 这个 extent 区块的大小 得要在格式化的时候就先指定,最小值是 4K 最大可到 1G。一般非磁盘阵列的磁盘默认为 64K 容量,而具有类似磁盘阵列的 stripe 情况下,则建议 extent 设定为与 stripe 一样大较佳。这个 extent 最好不要乱动,因为可能会影响到实体磁盘的效能。 个人感觉类似于缓冲区。
Hard Link(实体链接/硬链接/实际连结)
每个文件都会占用一个 inode ,文件内容由 inode 的记录来指向; 想要读取该文件,必须要经过目录记录的文件名来指向到正确的 inode 号码才能读取。
也就是说增加一个inode来指向实际文件的block,这个增加的inode就为实体链接。无论哪个实体链接都可以修改clock中的文件。
并且Hard Link
Symbolic Link (符号链接,亦即是快捷方式)
Symbolic link 就是在建立一个独立的 文件,而这个文件会让数据的读取指向他 link 的那个文件的档名!由于只是利用文件来做为指向的 动作, 所以,当来源档被删除之后,symbolic link 的文件会『开不了』, 会一直说『无法开启某文 件!』。
对于一个系统管理者( root )而言,磁盘的的管理是相当重要的一环,尤其近来磁盘已经渐渐的被当成 是消耗品了 … 如果我们想要在系统里面新增一颗磁盘时,应该有哪些动作需要做的呢: