ToB企服应用市场:ToB评测及商务社交产业平台

标题: Linux 文件体系 fsck 磁盘修复 [打印本页]

作者: 怀念夏天    时间: 2024-6-11 10:28
标题: Linux 文件体系 fsck 磁盘修复
Linux文件体系

齐备皆文件

  Linux 文件体系是一种管理存储装备上所存储的文件的一种内生性软件。Linux 支持多种类型的文件体系,以便在硬盘中存储应用程序、数据文件和配置文件等。
  文件体系类型:Linux 支持多种文件体系,例如 ext4、xfs、btrfs 等。每种文件体系都在存储装备上实现了虚拟目次结构,具有特定的功能和性能。
  Linux 文件体系会为每个文件分配两个数据结构:

  如果查询目次频繁从磁盘读,效率会很低,所以内核会把已经读过的目次用目次项这个数据结构缓存在内存,下次再次读到雷同的目次时,只需从内存读就可以,大大进步了文件体系的效率。
  文件体系把多个扇区组成了一个逻辑块,每次读写的最小单元就是逻辑块(数据块),Linux 中的逻辑块巨细为 4KB,也就是一次性读写 8 个扇区(每个扇区512B),这将大大进步了磁盘的读写的效率。
虚拟文件体系(VFS)

  文件体系的种类浩繁,而操纵体系希望对用户提供一个统一的接口,于是在用户层与文件体系层引入了中心层,这个中心层就称为虚拟文件体系(Virtual File System,VFS)。
  VFS 界说了一组所有文件体系都支持的数据结构和标准接口,这样程序员不必要了解文件体系的工作原理,只必要了解 VFS 提供的统一接口即可。

Linux支持的文件体系按照存储位置的差别分为三类:

文件体系起主要先挂载到某个目次才可以正常使用,好比 Linux 体系在启动时,会把文件体系挂载到根目次。
文件使用


  1. fd = open(name, flag); # 打开文件 文件的路径名和文件名 返回文件描述符
  2. ...
  3. write(fd,...);         # 写数据 使用文件描述符来操作文件
  4. ...
  5. close(fd);             # 关闭文件  避免资源泄露
复制代码
流程:
  打开了一个文件后,操纵体系会跟踪进程打开的所有文件,所谓的跟踪呢,就是操纵体系为每个进程维护一个打开文件表,文件表里的每一项代表「文件描述符」,所以说文件描述符是打开文件的标识。

操纵体系在每个进程中打开文件表中维护着打开文件的状态和信息:

读写文件的过程:

文件存储

连续存储

文件头里必要指定「起始块的位置」和「长度」,有了这两个信息就可以很好的表现文件存放方式是一块连续的磁盘空间。此处说的文件头,就雷同于 Linux 的 inode。

连续空间存放的方式固然读写效率高,但是有**「磁盘空间碎片」和「文件长度不易扩展」的缺陷。**

非连续存储

隐式链表:的方式存放的话,实现的方式是文件头要包含「第一块」和「最后一块」的位置,而且每个数据块里面留出一个指针空间,用来存放下一个数据块的位置。
缺点
1.无法直接访问数据块,只能通过指针次序访问文件,以及数据块指针消耗了肯定的存储空间。
2.隐式链接分配的稳固性较差,体系在运行过程中由于软件或者硬件错误导致链表中的指针丢失或破坏,会导致文件数据的丢失。

显示链表:把用于链接文件各数据块的指针,显式地存放在内存的一张链接表中,该表在整个磁盘仅设置一张,每个表项中存放链接指针,指向下一个数据块号。显著地进步了检索速率,而且大大减少了访问磁盘的次数。
缺点:
1.整个表都存放在内存中的关系,因此不适用于大磁盘。

文件索引

三种文件索引根本方式:
次序分配:

链表分配:

索引分配:

对照:

集合三种基础索引方式的优点于一身:

目次存储

目次文件的块里面生存的是目次里面一项一项的文件信息。
在目次文件的块中,最简单的生存格式就是列表,就是将该目次下的每个文件的文件信息(如文件名、文件 inode、文件类型等)列在表里。列表中每一项就代表该目次下的文件的文件名和对应的 inode,通过这个 inode,就可以找到真正的文件。

为进步效率,生存目次的格式改成哈希表,对文件名进行哈希盘算,把哈希值生存起来,如果我们要查找一个目次下面的文件名,可以通过名称取哈希。如果哈希能够匹配上,就说明这个文件的信息在相应的块里面。
Linux 体系的 ext 文件体系就是接纳了哈希表,来生存目次的内容,这种方法的优点是查找非常敏捷,插入和删除也较简单,不过必要一些预备步调来制止哈希冲突。
硬链接和软链接

硬链接是多个目次项中的「索引节点」指向一个文件,也就是指向同一个 inode,但是 inode 是不可能跨越文件体系的,每个文件体系都有各自的 inode 数据结构和列表,所以硬链接是不可用于跨文件体系的。由于多个目次项都是指向一个 inode,那么只有删除文件的所有硬链接以及源文件时,体系才会彻底删除该文件

软链接相当于重新创建一个文件,这个文件有独立的 inode,但是这个文件的内容是别的一个文件的路径,所以访问软链接的时间,实际上相当于访问到了别的一个文件,所以软链接是可以跨文件体系的,乃至目标文件被删除了,链接文件还是在的,只不过指向的文件找不到了而已。

文件体系结构

用户在创建一个新文件时,Linux 内核会通过 inode 的位图找到空闲可用的 inode,并进行分配。要存储数据时,会通过块的位图找到空闲的块,并分配。 盘算一个块4K可以表现4 * 1024 * 8=2^15个空闲块。这些块总巨细为( 4 * 1024(一个数据块)) * 2^15 = 2^27 = 128M。(太小了,许多文件都比这个大)。
在 Linux 文件体系,把这个结构称为一个块组,那么有 N 多的块组,就能够表现 N 大的文件。
下图给出了 Linux Ext2 整个文件体系的结构和块组的内容,文件体系都由大量块组组成,在硬盘上相继排布:


文件体系介绍

ext文件体系

  Linux 操纵体系中引入的最早的文件体系叫作扩展文件体系(extended filesystem,简记为 ext)。它为 Linux 提供了一个根本的类 Unix 文件体系:使用虚拟目次来操纵硬件装备,在物理装备上按定长的块来存储数据。
  ext 文件体系接纳名为索引节点的体系来存放虚拟目次中所存储文件的信息。索引节点体系在每个物理装备中创建一个单独的表(称为索引节点表)来存储这些文件的信息。存储在虚拟目次中的每一个文件在索引节点表中都有一个条目。ext 文件体系名称中的 extended 部分来自其跟踪的每个文件的额外数据,包罗:

  Linux 通过唯一的数值(称作索引节点号)来引用索引节点表中的每个索引节点,这个值是创建文件时由文件体系分配的。文件体系通过索引节点号而不是文件全名及路径来标识文件。 ext 文件体系常见的问题是在文件写入到物理装备时,存储数据用的块很轻易分散在整个装备中(称作碎片化,fragmentation)。 数据块的碎片化会低沉文件体系的性能,因为必要更长的时间在存储装备中查找特定文件的所有块。
参考:https://brinnatt.com/primary/%E7%AC%AC-4-%E7%AB%A0-linux-ext-%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F/
ext2文件体系

  为了办理ext文件体系对文件巨细2GB的限制, 升级ext2。ext2文件体系扩展了索引节点表的格式来生存体系上每个文件的更多信息。添加了文件信息有:创建时间值、修改时间值、最后访问时间值, 帮助体系管理员追踪文件的访问情况。最大答应文件巨细增加到2TB(后期版本改到32TB),以容纳数据库服务器中常见的大文件。
   相较于ext文件体系,生存文件时,ext2 文件体系通过按组分配磁盘块来减轻碎片化。通过将数据块分组,文件体系在读取文件时不必要为了数据块查找整个物理装备。
  文件体系每次存储或更新文件,它都要用新信息来更新索引节点表。问题在于这种操纵并非总是趁热打铁的,会对体系造成致命的问题。
  体系在人为误操纵,非正常断电重启等各种非规范操纵的情况下,轻易造成文件体系破坏和瓦解,严峻时会造成硬件破坏。为制止出现文件体系崩坏,乃至是硬件破坏这种不可逆破坏,敬告尽可能规范操纵。
参考文章:https://blog.csdn.net/sinat_37817094/article/details/125716792
ext3文件体系(日志文件体系)

ext4 文件体系(日志文件体系)

扩展 ext3 文件体系功能的结果是 ext4 文件体系(你可能也猜出来了)。ext4 文件体系在 2008 年受到 Linux 内核官方支持,如今已是大多数流行的 Linux 发行版接纳的默认文件体系。
除了支持数据压缩和加密,ext4 文件体系还支持一个称作区段(extent)的特性。区段在存储装备上按块分配空间,但在索引节点表中只生存起始块的位置。由于无需列出所有用来存储文件中数据的数据块,它可以在索引节点表中节省一些空间。
ext4 还引入了块预分配技术(block preallocation)。如果你想在存储装备上给一个你知道要变大的文件预留空间,ext4 文件体系可以为文件分配所有必要用到的块,而不仅仅是那些如今已经用到的块。ext4 文件体系用 0 填满预留的数据块,不会将它们分配给其他文件。
Reiser 文件体系(日志文件体系)

2001 年,Hans Reiser 为 Linux 创建了第一个称为 ReiserFS 的日志文件体系。ReiserFS 文件体系只支持回写日志模式——只把索引节点表数据写到日志文件。ReiserFS 文件体系也因此成为 Linux 上最快的日志文件体系之一。
有两个有意思的特性被引入了 ReiserFS 文件体系:一个是你可以在线调整已有文件体系的巨细;另一个是被称作尾部压缩(tailpacking)的技术,该技术能将一个文件的数据填进另一个文件的数据块中的空白空间。如果你必须为已有文件体系扩容来容纳更多的数据,在线调整文件体系巨细功能非常好用。
JFS 文件体系(日志文件体系)

作为可能依然在用的最老的日志文件体系之一,JFS(Journaled File System)是 IBM 在 1990 年为其 Unix 衍生版 AIX 开发的。然而直到第 2 版,它才被移植到 Linux 环境中。
IBM 官方称 JFS 文件体系的第 2 版为 JFS2,但大多数 Linux 体系提到它时都只用 JFS。
JFS 文件体系接纳的是有序日志方法,即只在日志中生存索引节点表数据,直到真正的文件数据被写进存储装备时才删除它。这个方法在 ReiserFS 的速率和数据模式日志方法的完整性之间的采取的一种折中。
JFS 文件体系接纳基于区段的文件分配,即为每个写入存储装备的文件分配一组块。这样可以减少存储装备上的碎片。
除了用在 IBM Linux 上外,JFS 文件体系并没有流行起来,但你有可能在同 Linux 打交道的日子中遇到它。
XFS 文件体系(日志文件体系)

XFS 日志文件体系是另一种最初用于贸易 Unix 体系而如今走进 Linux 天下的文件体系。美国硅图公司(SGI)最初在 1994 年为其贸易化的 IRIX Unix 体系开发了 XFS。2002 年,它被发布到了适用于 Linux 环境的版本。
XFS 文件体系接纳回写模式的日志,在提供了高性能的同时也引入了肯定的风险,因为实际数据并未存进日志文件。XFS 文件体系还答应在线调整文件体系的巨细,这点雷同于 ReiserFS 文件体系,除了 XFS 文件体系只能扩大不能缩小。
ZFS 文件体系(写时复制文件体系)

COW 文件体系 ZFS 是由 Sun 公司于 2005 年研发的,用于 OpenSolaris 操纵体系,从 2008 年起开始向 Linux 移植,最终在 2012 年投入 Linux 产品的使用。
ZFS 是一个稳固的文件体系,与 Resier4、Btrfs 和 ext4 势均力敌。它最大的弱项就是没有使用 GPL 许可。自 2013 年发起的 OpenZFS 项目有可能改变这种局面。但是,在获得 GPL 许可之前,ZFS 有可能终无法成为 Linux 默认的文件体系。
Btrfs 文件体系(写时复制文件体系)

Btrfs 文件体系是 COW 的新人,也被称为 B 树文件体系。它是由 Oracle 公司于 2007 年开始研发的。Btrfs 在 Reiser4 的诸多特性的基础上改进了可靠性。另一些开发职员最终也到场了开发过程,帮助 Btrfs 快速成为了最流行的文件体系。究其原因,则要归于它的稳固性、易用性以及能够动态调整已挂载文件体系的巨细。OpenSUSE Linux 发行版将 Btrfs 作为其默认文件体系。除此之外,该文件体系也出如今了其他 Linux 发行版中(如 RHEL),Fedora 在 2020 年将 Btrfs 作为其默认文件体系。
FSCK

  盘算机难免会由于某些体系因素或人为误操纵(突然断电)出现体系异常,这种情况下非常轻易造成文件体系的瓦解,严峻时乃至会造成硬件破坏。
  fsck是一个用于查抄和修复文件体系中错误的工具。它的工作原理是扫描文件体系并找出错误的数据结构和文件,然后尝试恢复这些错误。
  fsck只能修复软件层面的文件体系错误,无法修复硬件层面的破坏。如果文件体系已经受到了硬件层面的破坏,可能必要使用专业的数据恢复工具来恢复数据。
  在使用fsck工具时,文件体系不应该处于运行状态。
修复原理

使用方法

语法:fsck.ext4[必要参数][选择参数][装备代号]
参数:
参数注释-a非互交模式,自动修复-c查抄是否存在有破坏的区块。-C反叙述器> fsck.ext3命令会把全部的实验过程,都交由其逆向叙述,便于监控程序-d详细显示命令实验过程-f强制进行查抄-F查抄文件体系之前,先清理该生存装备块区内的数据-l <破坏区块文件>把文件中所列出的破坏区块,到场标记-L<破坏区块文件>清除所有破坏标志,重新标记-n非交互模式,把欲查抄的文件体系设成只读-P<数字>设置fsck.ext2命令所能处理的inode巨细为多少-r交互模式-R忽略目次-s次序查抄-S结果和指定“-s”参数雷同-t显示fsck.ext2命令的时序信息。-v显示详细的处理过程-y关闭互动模式-b<分区第一个磁区地点>指定分区的第一个磁区的起始地点/Super Block-B<区块巨细>设置该分区每个区块的巨细-I设置欲查抄的文件体系,其inode缓冲区的区块数目-V显示版本信息 使用举例

  1. 1. fsck -r /dev/sdb1    #参用互动方式修复sdb1分区
  2. 2. fsck -t ext4 -v /dev/sda1 #修复ext4系统
  3. 3. fsck -s /dev/sdb  #检查/dev/sdb文件系统的完整性,并报告任何错误
  4. 4. fsck -y /dev/sdb #当fsck检测到错误时,自动尝试修复它们
  5. 5. fsck -s /   #检查系统根分区的完整性,并报告任何错误
  6. 6. //在系统启动时强制运行fsck:创建一个名为forcefsck的文件在系统的根分区,然后重新启动系统。在下次启动期间,fsck将被自动运行
  7. 7. //在救援模式下运行fsck:重新启动系统,按住shift键以显示grub菜单,选择高级选项,然后选择fsck
  8. /*
  9.     重新启动系统,并在启动时选择使用Live CD。
  10.    在Live CD中,找到文件管理器或终端。
  11.    使用lsblk命令查看硬盘分区情况,以确定需要修复的文件系统。
  12.    在终端中输入以下命令,根据需要选择自动修复或手动修复:
  13.            自动修复文件系统错误:fsck -y /dev/sdb,当fsck检测到错误时,自动尝试修复它们
  14.            手动修复文件系统错误:fsck -n /dev/sdb,检查文件系统的完整性,并报告任何错误,但不进行自动修复
  15.    如果fsck检测到错误,它会尝试自动修复它们。如果无法自动修复,它会向用户报告错误,并询问用户是否要手动修复它们
  16. */
  17. 8. fsck -AR -y  #自动检查并修复所有已安装的文件系统
复制代码
参考文章:


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4