【读书笔记】Linux命令行与Shell脚本编程大全--管理文件系统

会有一股神秘感。 提交于 2020-03-02 16:56:34

1.探索Linux文件系统

Linux的文件系统为我们在硬盘中存储的0和1和应用中使用的文件与目录之间搭建起了一座桥梁

1.2 基本的Linux文件系统–ext/ext2(先将数据直接写入存储设备再更新索引节点表的做法)

文件系统 全名 相关概念 特点
ext extended filesystem
扩展文件系统
1.它为Linux提供了一个基本的类Unix文件系统:使用虚拟目录来操作硬件设备,
在物理设备上按定长的块来存储数据。
2.ext文件系统采用名为索引节点的系统来存放虚拟目录中所存储文件的信息。
3.索引节点系统在每个物理设备中创建一个单独的表(称为索引节点表)来存储这些文件的信息。
4.存储在虚拟目录中的每一个文件在索引节点表中都有一个条目。
1.文件不能超过2GB。
2.碎片化严重。
3.系统崩溃或断电时损坏。
ext2 extended filesystem2/扩展文件系统升级版 1.结构同ext。
2.扩展了索引节点表的格式来保存系统上每个文件的更多信息。
3.通过按组分配磁盘块来减轻碎片化。
1.文件大小不超过2TB(后期版本增加到32TB)。
2.系统崩溃或断电时损坏。

ext文件系统名称中的extended部分来自其跟踪的每个文件的额外数据,包括如下:

  1. 文件名
  2. 文件大小
  3. 文件的属主
  4. 文件的属组
  5. 文件的访问权限
  6. 指向存有文件数据的每个硬盘块的指针

ps:
Linux通过唯一的数值(称作索引节点号)来引用索引节点表中的每个索引节点,这个值是创建文件时由文件系统分配的。
文件系统通过索引节点号而不是文件全名及路径来标识文件。

Q:何为碎片化?
A:ext文件系统常见的问题是在文件写入到物理设备时,存储数据用的块很容易分散在整个设备中(称作碎片化,fragmentation)。

1.3 日志文件系统–先将文件的更改写入到临时文件

节点知识点:参考自:日志的三个级别

日志的三个级别(书里写的关于回写和顺序两种模式不同的更细节的解释)
在很多日志文件系统(如:ext3, ReiserFS)中,可以选择三个级别的日志:回写(writeback)、顺序(ordered)和数据(data)。

在回写模式中,只有元数据被记录到日志中,数据被直接写入主文件系统。这种模式提供较好的性能,但有较大的风险。例如,在增大文件时,数据还未写入就发生崩溃,那么文件系统恢复后文件后面就可能出现垃圾数据。

在顺序模式中,只有元数据被记录到日志中,但在日志被标记为提交前,数据会被写入文件系统。在这种模式下,如果在增大文件时,数据还未写入就发生崩溃,那么在恢复时这个事务会被简单的撤销,文件保持原来的状态。

在数据模式中,元数据和文件内容都先被写入日志中,然后在提交到主文件系统。这提高了安全性,但损失性能,因为所有数据要写入两次[1]。在这种模式下,如果在增大文件时,发生崩溃,那么可能有两种情况:

日志完整:这时事务会被重新执行,修改会被提交到主文件系统
日志不完整:这时主文件系统还未被修改,只需要简单放弃这个事务

日志文件系统为Linux系统增加了一层安全性
它不再使用之前先将数据直接写入存储设备再更新索引节点表的做法,而是先将文件的更改写入到临时文件(称作日志,journal)中。在数据成功写到存储设备和索引节点表之后,再删除对应的日志条目。
在这里插入图片描述
ps:

  1. 数据模式日志方法是目前为止最安全的数据保护方法,但同时也是最慢的。
  2. 所有写到存储设备上的数据都必须写两次:第一次写入日志,第二次写入真正的存储设备。这样会导致性能很差,尤其是对要做大量数据写入的系统而言。
文件系统 全名 相关概念 特点
ext3 extended filesystem3
扩展文件系统3
1.采用和ext2文件系统相同的索引节点表结构,但给每个存储设备增加了一个日志文件,以将准备写入存储设备的数据先记入日志。
2.无法恢复误删的文件。
3.不支持加密文件。
ext4 extended filesystem4
扩展文件系统4
ext4文件系统还支持一个称作区段(extent)的特性。区段在存储设备上按块分配空间,但在索引节点表中只保存起始块的位置。由于无需列出所有用来存储文件中数据的数据块,它可以在索引节点表中节省一些空间
2.ext4还引入了块预分配技术(block preallocation)。如果你想在存储设备上给一个你知道要变大的文件预留空间,ext4文件系统可以为文件分配所有需要用到的块,而不仅仅是那些现在已经用到的块。ext4文件系统用0填满预留的数据块,不会将它们分配给其他文件。
1.受Linux官方内核支持,大多数流行的Linux发行版采用的默认文件系统。
2.支持数据加密和压缩。
ReiserFS 1:可以在线调整已有文件系统的大小。
2.尾部压缩(tailpacking)的技术,该技术能将一个文件的数据填进另一个文件的数据块中的空白空间。如果你必须为已有文件系统扩容来容纳更多的数据,在线调整文件系统大小功能非常好用。
1.只支持回写日志模式——只把索引节点表数据写到日志文件。
2.最快的日志文件系统之一。
JFS Journaled File System
日志化文件系统
1:有序日志方法:即只在日志中保存索引节点表数据,直到真正的文件数据被写进存储设备时才删除它。
2:采用基于区段的文件分配,即为每个写入存储设备的文件分配一组块。这样可以减少存储设备上的碎片
1:除了用在IBM Linux上外,JFS文件系统并没有流行起来。
XFS 1:在线调整文件系统的大小,只能扩大不能缩小
2:采用回写模式的日志,因为实际数据并未存进日志文件,具有一定风险。

1.4 写时复制(COW)文件系统–解决安全性和性能之间的尴尬

采用了日志式技术,就必须在安全性和性能之间做出选择
就文件系统而言,日志式的另一种选择是一种叫作写时复制(copy-on-write,COW)的技术。COW利用快照兼顾了安全性和性能。
关于COW的概念可参考Linux写时拷贝技术(copy-on-write)

如下介绍两种最流行的COW文件系统:

文件系统 特点
ZFS文件系统 1.ZFS是一个稳定的文件系统,与Resier4、Btrfs和ext4势均力敌。
2.没有使用GPL许可,可能终无法成为Linux默认的文件系统。
Btrfs文件系统
B树文件系统
稳定性、易用性以及能够动态调整已挂载文件系统的大小。

2.操作文件系统

2.1 创建分区–fdisk(交互式程序)

fdisk工具用来帮助管理安装在系统上的任何存储设备上的分区。
要启动fdisk命令,你必须指定要分区的存储设备的设备名,另外还得有超级用户权限。
eg:sudo fdisk /dev/sdb

Q:如何找出安装在Linux系统中的物理磁盘
A:对于老式的IDE驱动器,Linux使用的是/dev/hdx。其中x表示一个字母,具体是什么要根据驱动器的检测顺序(第一个驱动器是a,第二个驱动器是b,以此类推)。对于较新的SATA驱动器和SCSI驱动器,Linux使用/dev/sdx。其中的x具体是什么也要根据驱动器的检测顺序(和之前一样,第一个驱动器是a,第二个驱动器是b,以此类推)。

ps:如果这是你第一次给该存储设备分区,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 高级功能

2.2 创建文件系统

在Linux系统中,要将数据存储到分区,必须在这之前使用某种文件系统对其进行格式化
每种文件系统类型都用自己的命令行程序来格式化分区。如下表所示:
在这里插入图片描述
ps:
Q:如何知道本系统中是否安装了需要的文件系统工具?
A:可使用type命令。如:type mkfs.ext4

2.3 文件系统的检查与修复–fsck

fsck命令能够检查和修复大部分类型的Linux文件系统,包括ext、ext2、ext3、ext4、ReiserFS、JFS和XFS。该命令的格式是:fsck options filesystem
文件系统可以通过设备名、在虚拟目录中的挂载点以及分配给文件系统的唯一UUID值来引用。
在这里插入图片描述
notice:只能在未挂载的文件系统上运行fsck命令。

3.逻辑卷管理–LVM

Q:如何将另外一个硬盘上的分区加入已有文件系统,动态地添加存储空间
A:使用Linux逻辑卷管理器(logical volume manager,LVM)软件包。它可以无需重建整个文件系统的情况下,轻松地管理磁盘空间。

3.1 逻辑卷管理布局

逻辑卷管理的核心在于如何处理安装在系统上的硬盘分区。
在逻辑卷管理的世界里,硬盘称作物理卷(physical volume,PV)。
每个物理卷都会映射到硬盘上特定的物理分区。
多个物理卷集中在一起可以形成一个卷组(volume group,VG)。
整个结构中的最后一层是逻辑卷(logical volume,LV)。
Linux系统将逻辑卷视为物理分区
下图展示了典型Linux逻辑卷管理环境的基本布局:
在这里插入图片描述
notice:第三个物理硬盘有一个未使用的分区,通过逻辑卷管理,可以轻松地将这个未使用分区分配到已有卷组:要么用它创建一个新的逻辑卷,要么在需要更多空间时用它来扩展已有的逻辑卷

3.2 Linux中的LVM

LVM允许在Linux上用简单的命令行命令管理一个完整的逻辑卷管理环境。

版本 说明
LVM1 只能用于Linux内核2.4版本。仅提供了基本的逻辑卷管理功能
LVM2 可用于Linux内核2.6版本。在标准的LVM1功能外提供了额外的功能

LVM2额外的功能如下所示:

  1. 快照:允许在逻辑卷在线的状态下将其复制到另一个设备。
  2. 条带化:可跨多个物理硬盘创建逻辑卷。
  3. 镜像:镜像是一个实时更新的逻辑卷的完整副本。

ps:
LVM条带化不同于RAID条带化。LVM条带化不提供用来创建容错环境的校验信息。事实
上,LVM条带化会增加文件因硬盘故障而丢失的概率。单个硬盘故障可能会造成多个逻
辑卷无法访问。

3.3 使用Linux LVM

下面介绍使用Linux LVM的一般步骤。具体请参考该书8.3.3章节。

  1. 定义物理卷; fdsik->pvcreate pvdisplay
  2. 创建卷组;vgcreate vgdisplay
  3. 创建逻辑卷;lvcreate lvdisplay
  4. 创建文件系统;
  5. 修改LVM。

Linux LVM的好处是在于能够动态修改文件系统,有下表如下操作命令来支持。
在这里插入图片描述
notice:

在手动增加或减小逻辑卷的大小时,要特别小心。逻辑卷中的文件系统需要手动修整来处理大小上的改变。
大多数文件系统都包含了能够重新格式化文件系统的命令行程序,比如用于ext2、ext3和ext4文件系统的resize2fs程序。

申明:文中没特殊注明,图皆来自Linux命令行与shell脚本编程大全<第三版>。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!