Linux 常用的文件系统
linux文件系统通常会将文件的权限和属性放置到inode中,实际数据内容放到数据区块中,通过inode编号来找到数据区块的地址,这种数据存取的方法称为索引式文件系统。另外还有一个超级区块(superblock)记录整个文件系统的整体信息,包括inode与数据区块的总量、使用量、剩余量等。
ext
扩展文件系统(extended filesystem,简记为ext),它为Linux提供了一个基本的类Unix文件系统:使用虚拟目录来操作硬件设备,在物理设备上按定长的块来存储数据。
缺点:文件最大不能超过2G
ext2
ext文件系统的扩展,保持了同样的结构。其inode为文件增添了创建时间、修改时间、最后访问时间值来帮助admina追踪文件的访问情况。并将允许最大文件大小增加到2TB(后期增加到32TB)
缺点: 由于每次存储或更新文件,都要用新信息来更新索引节点表。问题在于这种操作并非总是一气呵成的。如果计算机系统在存储文件和更新索引节点表之间发生了什么,这二者的内容就不同步了。
ext2文件系统由于容易在系统崩溃或断电时损坏而臭名昭著。比如断电之后,如果过文件数据保存到了物理设备,但是索引节点表没有更新完成的话,对于文件系统而言,这个数据块是找不到的。
ext3
为了避免上述那种缺点,日志文件系统出现为Linux系统增加了一层安全性。它不再使用之前先将数据直接写入存储设备再更新索引节点表的做法,而是先将文件的更改写入到临时文件(称作日志,journal)中。在数据成功写到存储设备和索引节点表之后,再删除对应的日志条目。如果系统在数据被写入存储设备之前崩溃或断电了,日志文件系统下次会读取日志文件并处理上次留下的未写入的数据。
默认情况下,ext3文件系统用有序模式的日志功能——只将索引节点信息写入日志文件,直到数据块都被成功写入存储设备才删除。你可以在创建文件系统时用简单的一个命令行选项将ext3文件系统的日志方法改成数据模式或回写模式。
ext4
ext4文件系统在2008年受到Linux内核官方支持,现在已是大多数流行的Linux发行版采用的默认文件系统,比如Ubuntu。
除了支持数据压缩和加密,ext4文件系统还支持一个称作区段(extent)的特性。区段在存储设备上按块分配空间,但在索引节点表中只保存起始块的位置。由于无需列出所有用来存储文件146 第8 章 管理文件系统
中数据的数据块,它可以在索引节点表中节省一些空间。ext4还引入了块预分配技术(block preallocation)。如果你想在存储设备上给一个你知道要变大的文件预留空间,ext4文件系统可以为文件分配所有需要用到的块,而不仅仅是那些现在已经用到的块。ext4文件系统用0填满预留的数据块,不会将它们分配给其他文件。
XFS
ext文件系统采用的是预先规划处所有inode、数据块、元数据等。未来系统可以直接使用,不需要再进行动态配置。如今磁盘容量越来越大,这样的格式化方式会占用大量时间。
XFS几乎具备所有的ext4的功能。在数据的分布上主要规划为三个部分:
1、数据区
这部分和ext一样,包括inode、数据区块、超级区块等数据。不同的是 inode与区块都是系统在需要使用时才动态配置产生的,而不需要提前规划好。因此格式化操作很快。
2、文件系统登陆区(log section)
类似于日志区,记录文件的变化内容,一个文件在创建之后知道该变化完整的写入到数据区,该条记录才被结束。如果文件系统因为某些原因而损坏,系统会拿这个登陆区来进行检验,检查系统在挂掉之前,文件系统在执行哪些操作,来快速的修复文件系统。
3、实时运行区(realtime section)
文件建立时,xfs会在这个区段里找一个到数个的extend区块,将文件放置在这个区块内,等分配完成之后,再写入到data section的inode与数据区块中去。
写时复制系统
采用了日志式技术,你就必须在安全性和性能之间做出选择。尽管数据模式日志提供了最高的安全性,但是会对性能带来影响,因为索引节点和数据都需要被日志化。如果是回写模式日志,性能倒是可以接受,但安全性就会受到损害。
就文件系统而言,日志式的另一种选择是一种叫作写时复制(copy-on-write,COW)的技术。COW利用快照兼顾了安全性和性能。如果要修改数据,会使用克隆或可写快照。修改过的数据并不会直接覆盖当前数据,而是被放入文件系统中的另一个位置上。即便是数据修改已经完成,之前的旧数据也不会被重写。
1、ZFS文件系统
COW文件系统ZFS是由Sun公司于2005年研发的,用于OpenSolaris操作系统,从2008年起开始向Linux移植,最终在2012年投入Linux产品的使用。
2、Btrf文件系统
Btrfs文件系统是COW的新人,也被称为B树文件系统。它是由Oracle公司于2007年开始研发的。Btrfs在Reiser4的诸多特性的基础上改进了可靠性。另一些开发人员最终也加入了开发过程,帮助Btrfs快速成为了最流行的文件系统。究其原因,则要归于它的稳定性、易用性以及能够动态调整已挂载文件系统的大小。OpenSUSE Linux发行版最近将Btrfs作为其默认文件系统。