扩展文件系统,使用虚拟目录来操作硬件设备,在物理设备上按定长的块来存储数据。
采用名为索引节点的系统来存放虚拟目录中所存储文件的 信息。
索引节点系统在每个物理设备中创建一个单独的表(称为索引节点表)来存储这些文件的信息。
存储在虚拟目录中的每一个文件在索引节点表中都有一个条目。
Linux通过唯一的数值(称作索引节点号)来引用索引节点表中的每个索引节点,这个值是创建文件时由文件系统分配的。
文件系统通过索引节点号而不是文件全名及路径来标识文件。
扩展了索引节点表的格式来保存系统上每个文件的更多信息。
它为文件添加了创建时间值、修改时间值和最后访问时间值。
允许最大文件大小增加到了32TB改变了文件在数据块中存储的方式。
ext文件系统容易造成数据块的碎片化。
而ext2文件系统在保存文件时通过按组分配磁盘块来减轻碎片化。
通过将数据块分组,文件系统在读取文件时不需要为了数据块查找整个物理设备。
ext2文件系统由于容易在系统崩溃或断电时损坏而臭名昭著。
即使文件数据正常保存到了物理设备上,如果索引节点表记录没完成更新的话, ext2文件系统甚至都不知道那个文件存在。
先将文件的更改写入到临时文件(称作日志, journal)中。
在数据成功写到存储设备和索引节点表之后,再删除对应的日志条目。
数据模式日志方法是目前为止最安全的数据保护方法,但同时也是最慢的。
所有写到存储设备上的数据都必须写两次:
第一次写入日志,
第二次写入真正的存储设备。
这样会导致性能很差,尤其是对要做大量数据写入的系统而言。
增加了日志文件,将准备写入存储设备的数据先记入日志。
默认情况下, ext3文件系统用有序模式的日志功能——只将索引节点信息写入日志文件,直到数据块都被成功写入存储设备才删除。
缺点:无法恢复误删的文件,没有任何内建的数据压缩功能。也不支持加密文件。
支持数据压缩和加密,还支持区段的特性。
区段在存储设备上按块分配空间,但在索引节点表中只保存起始块的位置。
由于无需列出所有用来存储文件中数据的数据块, 它可以在索引节点表中节省一些空间。
ext4还引入了块预分配技术( block preallocation)。
如果你想在存储设备上给一个你知道要变大的文件预留空间,
ext4文件系统可以为文件分配所有需要用到的块,而不仅仅是那些现在已经用到的块。
ext4文件系统用0填满预留的数据块,不会将它们分配给其他文件。
可以在线调整已有文件系统的大小
尾部压缩,将一个文件的数据填进另一个文件的数据块中的空白空间。
有序日志方法。
基于区段的文件分配,为每个写入存储设备的文件分配一组块,减少存储设备上的碎片。
回写模式。
高性能 一定风险 。能在线扩大文件系统的大小。
只能扩大不能缩小。
写时复制(COW)技术。
COW利用快照兼顾了安全性和性能。
如果要修改数据,会使用克隆或可写快照。
修改过的数据并不会直接覆盖当前数据,
而是被放入文件系统中的另一个位置上。
即便是数据修改已经完成,之前的旧数据也不会被重写。
是一个稳定的文件系统
最大的弱项是没有使用GPL许可
Btrf文件系统是COW的新人,也被称为B树文件系统。
具有稳定性、易用性以及能够动态调整已挂载文件系统的大小。
fdisk工具用来帮助管理安装在系统上的任何存储设备上的分区。
要启动fdisk命令,你必须指定要分区的存储设备的设备名,另外还得有超级用户权限。
fdisk 命令
命令 | 描述 |
---|---|
a | 设置活动分区标志 |
b | 编辑BSD Unix系统用的磁盘标签 |
c | 设置DOS兼容标志 |
d | 删除分区 |
l | 显示可用的分区类型 |
m | 显示命令选项 |
n | 添加一个新分区 |
o | 创建DOS分区表 |
p | 显示当前分区表 |
q | 退出,不保存更改 |
s | 为Sun Unix系统创建一个新磁盘标签 |
t | 修改分区的系统ID |
u | 改变使用的存储单位 |
v | 验证分区表 |
w | 将分区表写入磁盘 |
x | 高级功能 |
fsck 命令能够检查和修复大部分类型的Linux文件系统。
该命令格式:
fsck options filesystem
尽管日志式文件系统的用户需要用到fsck命令,但是COW文件系统的用户是否也得使用该命令还存在争议。实际上,ZFS文件系统甚至都没有提供fsck工具的接口。
fsck的命令行选项
选项 | 描述 |
---|---|
-a | 如果检测到错误,自动修复文件系统 |
-A | 检查/etc/fstab文件中列出的所有文件系统 |
-C | 给支持进度条功能的文件系统显示一个进度条(只有ext2和ext3) |
-N | 不进行检查,只显示哪些检查会执行 |
-r | 出现错误时提示 |
-R | 使用-A选项时跳过根文件系统 |
-s | 检查多个文件系统时,依次进行检查 |
-t | 指定要检查的文件系统类型 |
-T | 启动时不显示头部信息 |
-V | 在检查时产生详细输出 |
-y | 检测到错误时自动修复文件系统 |
通过将另外一个硬盘上的分区加入已有文件系统,动态地添加存储空间。Linux 逻辑卷管理器(logical volume manager,LVM)软件包正好可以用来做这个。它可以让你在无需重建整个文件系统的情况下,轻松地管理磁盘空间。
逻辑卷管理的核心在于如何处理安装在系统上的硬盘分区。
在逻辑卷管理的世界里,硬盘称作物理卷(physical volume,PV)。
每个物理卷都会映射到硬盘上特定的物理分区。
多个物理卷集中在一起可以形成一个卷组(volume group,VG)。
逻辑卷管理系统将卷组视为一个物理硬盘,但事实上卷组可能是由分布在多个物理硬盘上的多个物理分区组成的。
卷组提供了一个创建逻辑分区的平台,而这些逻辑分区则包含了文件系统。
整个结构中的最后一层是逻辑卷(logical volume,LV)。
逻辑卷为Linux提供了创建文件系统的分区环境,作用类似于到目前为止我们一直在探讨的Linux中的物理硬盘分区。
Linux系统将逻 辑卷视为物理分区。
可以使用任意一种标准Linux文件系统来格式化逻辑卷,然后再将它加入Linux虚拟目录中的某个挂载点。
Linux LVM是由Heinz Mauelshagen开发的,于1998年发布到了Linux社区。它允许你在Linux
上用简单的命令行命令管理一个完整的逻辑卷管理环境。
Linux LVM有两个可用的版本。
□LVM1:最初的LVM包于1998年发布,只能用于Linux内核2.4版本。它仅提供了基本的逻辑卷管理功能。
□LVM2:LVM的更新版本,可用于Linux内核2.6版本。它在标准的LVM1功能外提供了额外的功能。
Linux LVM允许你在逻辑卷在线的状态下将其复制到另一个设备。这个功能叫作快照。
快照允许你在复制的同时,保证运行关键任务的Web服务器或数据库服务器继续工作。
LVM1只允许你创建只读快照。一旦创建了快照,就不能再写入东西了。
LVM2提供的另一个引人注目的功能是条带化(striping)。
可跨多个物理硬盘创建逻辑卷。
当Linux LVM将文件写入逻辑卷时,文件中的数据块会被分散到多个硬盘上。每个后继数据块会被写到下一个硬盘上。
条带化有助于提高硬盘的性能,因为Linux可以将一个文件的多个数据块同时写入多个硬盘, 而无需等待单个硬盘移动读写磁头到多个不同位置。
说明
LVM条带化不同于RAID条带化。LVM条带化不提供用来创建容错环境的校验信息。事实上,LVM条带化会增加文件因硬盘故障而丢失的概率。单个硬盘故障可能会造成多个逻辑卷无法访问。
镜像是一个实时更新的逻辑卷的完整副本。
当你创建镜像逻辑卷时,LVM会将原始逻辑卷同步到镜像副本中。
Linux LVM包只提供了命令行程序来创建和管理逻辑卷管理系统中所有组件。
创建过程的第一步就是将硬盘上的物理分区转换成Linux LVM使用的物理卷区段。
我们的朋友fdisk命令可以帮忙。
在创建了基本的Linux分区之后,你需要通过t命令改变分区类型。
下一步是从物理卷中创建一个或多个卷组。究竟要为系统创建多少卷组并没有既定的规则, 你可以将所有的可用物理卷加到一个卷组,也可以结合不同的物理卷创建多个卷组。
要从命令行创建卷组,需要使用vgcreate命令。vgcreate命令需要一些命令行参数来定义卷组名以及你用来创建卷组的物理卷名。
Linux系统使用逻辑卷来模拟物理分区,并在其中保存文件系统。Linux系统会像处理物理分区一样处理逻辑卷,允许你定义逻辑卷中的文件系统,然后将文件系统挂载到虚拟目录上。
要创建逻辑卷,使用lvcreate命令。虽然你通常不需要在其他Linux LVM命令中使用命令行选项,但lvcreate命令要求至少输入一些选项。
运行完lvcreate命令之后,逻辑卷就已经产生了,但它还没有文件系统。你必须使用相应的命令行程序来创建所需要的文件系统。
在创建了新的文件系统之后,可以用标准Linux mount命令将这个卷挂载到虚拟目录中,就跟它是物理分区一样。唯一的不同是你需要用特殊的路径来标识逻辑卷。
Linux LVM的好处在于能够动态修改文件系统,因此最好有工具能够让你实现这些操作。在
Linux有一些工具允许你修改现有的逻辑卷管理配置。
在Linux LVM包中的常见命令
学习参考资料:
《Linux命令行与shell脚本编程大全》第3版
https://blog.csdn.net/x13262608581/article/details/107622716