使用Linux系统时,你需要做的决策之一是存储设备用什么文件系统。安装时大多数Linux发行版本会为系统提供一个默认的文件系统,大多数入门级用户想都不想就用默认的那个了。
文件系统为Linux提供了从硬盘中存写的0和1到你在用用中用到的文件和目录之间的桥梁。
Linux支持多种类型的文件系统来管理文件和目录。每种文件系统都在存储设备上实现了虚拟目录结构,只是特性有些不同。
extended filesystem,类Unix文件系统:使用虚拟目录来操作硬件设备,在物理设备上按定长的块来存储数据。
ext文件系统采用“索引节点”的系统存放虚拟目录中所存储文件的信息。索引节点系统在每个物理设备中创建一个单独的表(索引节点表)来存储这些文件的信息。存储在虚拟目录中的每一个文件在索引节点表中都有一个条目。条目名称的扩展部分来自其跟踪每个文件的额外数据,包括:
Linux通过唯一的数值(索引节点号)来引用索引节点表中的每个索引节点,这个值是创建文件时由文件系统分配的。文件系统通过索引节点号来标识文件。
最早的ext文件系统有不少限制,比如文件大小不得超过2GB。在Linux出现后不就,ext文件系统就升级到了第二扩展文件系统,称作ext2。
ext2文件系统扩展了索引节点表的格式来保存系统上每个文件的更多信息。
多年来ext文件系统都是Linux发行版采用的默认文件系统。但它有一些限制。文件系统每次存储或更新文件,它都要用新信息来更新索引节点表。但它并不是连成一气的。
如果在存储文件和更新索引节点表的过程中,计算机系统发生了什么事情,这二者就不同步了。ext2文件系统由于容易在系统崩溃或者断电时损坏而臭名昭著。这样即使文件数据正常地保存到了物理设备上,如果索引节点表记录没完成更新,ext2文件系统甚至都不知道那个文件存在。
日志文件系统会先将文件的更改写入到临时文件(journal)中,然后在数据成功写到存储设备和索引节点表之后,再删除对应的日志条目。
如果系统在数据被写入到存储设备之前崩溃了或者断电了,日志文件系统下次会读取日志文件并处理上次留下的未写入的数据。
方法 | 描述 |
数据模式 | 索引节点和文件都会被写入日志文件;丢失数据风险低,但性能差 |
排序模式 | 只有索引节点数据会被写入日志,但只有数据成功写入后才删除;性能和安全之间的良好折中 |
回写模式 | 只有索引节点数据被写入日志,但不管文件数据何时写入;丢失数据风险高,但仍比不用日志好 |
2001年ext3文件系统加到了Linux内核中。
默认情况下,ext3文件系统用排序模式的日志功能。你可以用简单的一个命令行选项将ext3文件系统的日志方法改为数据模式或回写模式。
虽然ext3文件系统为Linux文件系统添加了基本的日志功能,但它仍然缺一些东西。例如ext3文件系统无法恢复误删的文件,它没有任何内建的数据压缩功能,ext3文件系统也不支持加密文件。
ext4文件系统在2008年时被Linux内核官方支持,现在已是大多数流行的Linux发行版采用的默认文件系统,比如Fedora和Ubuntu。
2001年,Hans Reiser为Linux创建了第一个日志文件,称为ReiserFS。ReiserFS文件系统只支持回写日志模式------只把索引节点表数据写到日志文件。ReiserFS文件系统时Linux上最快的日志文件系统之一。
整合进ReiserFS文件系统的两个有意思的特性是:你可以在线调整已有文件系统的大小;它还采用一种称为尾部压缩(tail packing)的技术,该技术能将一个文件的数据填进另一个文件的数据块中的空白空间。如果你必须为已有文件系统扩容来容纳更多的数据,在校调整文件系统大小功能非常好用。
作为可能依然在用的最老的日志文件系统之一,JFS(Journaled File System,日志文件系统)是IBM在1990年为它的Unix衍生版-----AIX开发的。然而,知道第二版它才被移植到Linux环境中。
采用顺序日志方法。除了IBM Linux版本外,JFS文件系统用的很少。
硅图公司(SGI)最早在1994年为它的IRIX Unix系统开发了XFS。在2002年,为了共用,它被发布到了Linux环境。
采用回写模式。