二十、磁盘管理

wangzhaoyang 发布于 2 天前 8 次阅读 网络工程中的Linux系统 无~ 6209 字


基于 MBR 分区表:

  • 分区类型:主分区、扩展分区、逻辑分区。
  • 容量大小:单块磁盘或者阵列不能超过 2TB。
  • 分区数量:主分区 + 扩展分区不能超过 4 个。
  • 应用场景:适用于系统磁盘上,或者一些容量较小的常规业务,如网站、数据库。

基于 GPT 分区表:

  • 分区类型:主分区。
  • 容量大小:GPT最大支持18EB(1EB=1024PB,1PB=1024TB)。
  • 应用场景:适用于大容量存储和现代操作系统,如Windows、Linux和macOS。

工具操作示例

fdisk(MBR分区工具)

  1. 查看磁盘和分区信息
   [root@localhost ~]# fdisk -l
  1. 创建新的MBR分区表
   [root@localhost ~]# fdisk /dev/sda
  • 输入o创建新的空DOS分区表。
  • 输入n创建新分区。
  • 输入t更改分区类型。
  • 输入w保存更改。

fdisk(GTP分区工具)

  1. 查看磁盘和分区信息
   [root@localhost ~]# fdisk -l
  1. 创建新的MBR分区表
   [root@localhost ~]# fdisk /dev/sda
  • 输入G创建GTP分区表。
  • 输入n创建新分区。
  • 输入t更改分区类型。
  • 输入w保存更改。

parted(多功能分区工具)

注意:在生产环境中避免使用parted,立即生效的

  1. 查看磁盘和分区信息
   [root@localhost ~]# parted -l
  1. 创建新的分区
   [root@localhost ~]# parted /dev/sda mklabel msdos
   [root@localhost ~]# parted /dev/sda mkpart primary ext4 0% 100%

gdisk(GPT分区工具)

  1. 查看磁盘和分区信息
   [root@localhost ~]# gdisk -l /dev/sda
  1. 创建新的GPT分区表
   [root@localhost ~]# gdisk /dev/sda
  • 输入o创建新的空GPT分区表。
  • 输入n创建新分区。
  • 输入w保存更改。

mkfs(格式化分区工具)

  1. 格式化分区格式化EFI分区为FAT32。
[root@localhost ~]# mkfs.fat -F32 /dev/sda1
  1. 格式化根文件系统分区为ext4。
[root@localhost ~]# mkfs.ext4 /dev/sda2

mount(挂载分区工具)

  1. 挂载分区到挂载点
   [root@localhost ~]# mount /dev/sda1 /mnt
  1. 编辑/etc/fstab文件,添加挂载信息。
[root@localhost ~]# nano /etc/fstab
  • 添加以下内容:
/dev/sda2 /               ext4    defaults        1 1
  • 保存并退出编辑器。

swapon(管理交换分区工具)

  1. 启用交换分区
  • 创建交换分区。
   [root@localhost ~]# mkswap /dev/sda3
  • 启用交换分区。
   [root@localhost ~]# swapon /dev/sda3

磁盘挂载

1. UUID 和文件系统

  • UUID (Universally Unique Identifier):是文件系统的标识符。每当你格式化一个分区(例如:使用 mkfs 命令创建文件系统),系统会为这个文件系统分配一个唯一的 UUID。
  • UUID 只存在于格式化后的设备上,即只有设备上有文件系统时,才能产生 UUID。

2. 查看块设备的 UUID

  • 使用 blkid 命令可以查看系统中块设备的 UUID。该命令会列出所有块设备的详细信息,包括 UUID、文件系统类型等。
blkid

示例输出:

/dev/sda1: UUID="1234-ABCD" TYPE="ext4" PARTUUID="abcd-1234"
/dev/sdb1: UUID="5678-EFGH" TYPE="xfs" PARTUUID="efgh-5678"

3. 文件系统卷标 (Label)

文件系统的卷标是一种用来标识文件系统的标签。可以通过 UUID 或卷标来挂载磁盘。

  • 挂载使用卷标mount -L 命令可以通过卷标来挂载文件系统。
mount -L "卷标名" /挂载点
  • 挂载使用 UUIDmount -U 命令可以通过 UUID 来挂载文件系统。
mount -U UUID /挂载点

4. 格式化文件系统时设置卷标

在创建文件系统时,可以为其指定卷标。不同类型的文件系统设置卷标的方式不同。

  • XFS 文件系统: 使用 xfs_admin 命令设置卷标:
  xfs_admin -L "卷标名称" /dev/sdX

示例:

  xfs_admin -L "MyVolume" /dev/sdb1

设置后,可以通过卷标挂载该磁盘:

  mount -L MyVolume /mnt
  • EXT 文件系统 (如 ext4): 使用 e2label 命令设置卷标:
  e2label /dev/sdX "卷标名称"

示例:

  e2label /dev/sdb1 ext4_test

设置后,可以通过卷标挂载:

  mount -L ext4_test /mnt

5. 挂载磁盘

  • 使用 mount 命令将设备挂载到指定目录(挂载点)。
  • 常见的挂载方式有通过设备文件、UUID 或卷标。

示例:

  • 按设备文件挂载:
  mount /dev/sdb1 /mnt
  • 按 UUID 挂载:
  mount -U 5678-EFGH /mnt
  • 按卷标挂载:
  mount -L MyVolume /mnt

6. 只读挂载

有时出于安全或其他目的,可能需要将一个文件系统挂载为只读模式。这意味着挂载后的文件系统将无法进行任何写操作,只有读取数据是允许的。

  • 通过命令行挂载为只读
  mount -o ro /dev/sdX /mnt

或者使用 UUID 或卷标:

  mount -o ro -U UUID /mnt
  mount -o ro -L "卷标名" /mnt
  • /etc/fstab 中配置自动只读挂载
  UUID=5678-EFGH  /mnt  ext4  ro  0  2
  • 查看挂载模式: 使用 mount 命令可以查看文件系统的挂载模式:
  mount | grep /mnt

7. -t 参数:指定文件系统类型

在使用 mount 命令时,-t 选项用来明确指定文件系统的类型,特别是在 Linux 无法自动识别文件系统类型时。

mount -t 文件系统类型 /dev/sdX /挂载点

示例:

  • 挂载 ext4 文件系统:
  mount -t ext4 /dev/sdb1 /mnt
  • 挂载 XFS 文件系统:
  mount -t xfs /dev/sdb1 /mnt

常见文件系统类型

  • ext4:常见的 Linux 文件系统类型。
  • xfs:另一个高效的文件系统,广泛用于企业环境。
  • vfatfat32:通常用于可移动存储设备(如 U 盘、SD 卡等)。
  • ntfs:用于 Windows 系统的文件系统。
  • btrfs:新一代 Linux 文件系统,支持快照、压缩等功能。
  • nfs:网络文件系统,允许网络上的不同系统共享文件。

你可以通过 blkid 命令查看设备的文件系统类型:

blkid /dev/sdb1

8. -o 参数:指定文件系统类型

1. async / sync
  • async: 异步模式,允许文件系统执行异步操作,即操作可以在后台进行,不需要等待文件操作完成。
  • sync: 同步模式,所有文件系统操作必须同步执行,直到操作完成。

示例:

mount -o async /dev/sda1 /mnt/data
mount -o sync /dev/sda1 /mnt/data
2. atime / noatime
  • atime: 每次访问文件时都会更新其访问时间。
  • noatime: 禁止更新文件的访问时间,以提高性能。

示例:

mount -o atime /dev/sda1 /mnt/data
mount -o noatime /dev/sda1 /mnt/data
3. auto / noauto
  • auto: 文件系统会在启动时自动挂载(在 /etc/fstab 中设置)。
  • noauto: 禁止自动挂载,必须手动挂载。

示例:

mount -o auto /dev/sda1 /mnt/data
mount -o noauto /dev/sda1 /mnt/data
4. exec / noexec
  • exec: 允许在文件系统上执行可执行文件。
  • noexec: 禁止在文件系统上执行可执行文件。

示例:

mount -o exec /dev/sda1 /mnt/data
mount -o noexec /dev/sda1 /mnt/data
5. dev / nodev
  • dev: 允许在文件系统中使用设备文件。
  • nodev: 禁止在文件系统中使用设备文件。

示例:

mount -o dev /dev/sda1 /mnt/data
mount -o nodev /dev/sda1 /mnt/data
6. suid / nosuid
  • suid: 允许文件系统中使用 suid (Set User ID) 权限,赋予程序运行时使用文件所有者的权限。
  • nosuid: 禁止使用 suid 权限。

示例:

mount -o suid /dev/sda1 /mnt/data
mount -o nosuid /dev/sda1 /mnt/data
7. remount
  • remount: 重新挂载文件系统,通常用于改变文件系统的挂载选项。
    示例:
mount -o remount,rw /dev/sda1 /mnt/data

这个命令将 /mnt/data 挂载点的文件系统从只读 (ro) 修改为读写 (rw)。

8. ro / rw
  • ro: 只读挂载,文件系统不能进行写操作。
  • rw: 读写挂载,文件系统允许进行写操作。

示例:

mount -o ro /dev/sda1 /mnt/data
mount -o rw /dev/sda1 /mnt/data
9. user / nouser
  • user: 允许普通用户挂载文件系统。
  • nouser: 禁止普通用户挂载文件系统,只有 root 用户可以挂载。

示例:

mount -o user /dev/sda1 /mnt/data
mount -o nouser /dev/sda1 /mnt/data
10. defaults
  • defaults: 默认挂载选项,是一组常用选项的组合,包含 rw, suid, dev, exec, auto, nouser, 和 async

示例:

mount -o defaults /dev/sda1 /mnt/data

这个命令使用默认选项来挂载文件系统。

11. noatime
  • noatime: 禁止每次访问文件时更新访问时间,通常用于提高性能,尤其是在数据库或日志存储中。

示例:

mount -o noatime /dev/sda1 /mnt/data

常见挂载选项的组合示例

在实际操作中,常常将多个选项组合使用。例如:

1. 使用 noexecro 进行只读挂载并禁止执行:

mount -o ro,noexec /dev/sda1 /mnt/data

2. 允许用户挂载且禁用 suid 权限:

mount -o user,nosuid /dev/sda1 /mnt/data

3. 自动挂载,并且不更新访问时间:

mount -o auto,noatime /dev/sda1 /mnt/data

/etc/fstab 文件中配置挂载选项

除了手动使用 mount 命令挂载外,挂载选项还可以在 /etc/fstab 文件中进行配置,这样可以使挂载选项在系统启动时自动生效。

示例:

/dev/sda1  /mnt/data  ext4  defaults,noatime  0  2

在这个示例中,/dev/sda1 会在启动时自动挂载到 /mnt/data,使用 ext4 文件系统,默认挂载选项,并禁用访问时间更新 (noatime)。

9. 查看挂载情况

使用 dfmount 命令可以查看当前的挂载情况:

df -h
mount

10. 自动挂载(配置 /etc/fstab

/etc/fstab 文件中配置自动挂载。在此文件中可以使用设备文件、UUID 或卷标来定义磁盘的挂载信息。

示例:

UUID=5678-EFGH  /mnt  ext4  defaults  0  2

也可以使用卷标:

LABEL=MyVolume  /mnt  xfs  defaults  0  0

11. 卸载磁盘

使用 umount 命令卸载磁盘:

umount /mnt

明白了,下面是简洁版且带有示例的卸载文件系统笔记:


12. 强制卸载文件系统

  1. 查看正在使用文件系统的进程
    使用 fuser 查看哪个进程正在使用文件系统:
   fuser -v /mnt/data
  1. 强制结束占用文件系统的进程
    强制结束占用文件系统的进程:
   fuser -km /mnt/data
  1. 卸载文件系统
    使用 umount 命令卸载文件系统:
   umount /mnt/data

/etc/fstab 文件配置笔记

/etc/fstab 是 Linux 系统中的一个配置文件,负责定义系统在启动时如何自动挂载文件系统。通过编辑该文件,你可以配置系统启动时自动挂载分区、设备以及网络共享等资源。

1. /etc/fstab 文件格式

/etc/fstab 文件的每一行代表一个文件系统的挂载配置,每行有六个字段,用空格或制表符分隔。

字段格式:

<文件系统>  <挂载点>  <文件系统类型>  <挂载选项>  <备份选项>  <检查选项>
/dev/sdb1   /mnt    ext4                defaults    0                       2

具体说明:

  • 第一个字段:文件系统。可以是设备名(如 /dev/sdb1),也可以是 UUID、LABEL 或 NFS 等网络挂载的类型。
  • 第二个字段:挂载点,即文件系统要挂载到的目录(如 /mnt/)。
  • 第三个字段:文件系统类型,如 ext4xfsntfsvfat 等。
  • 第四个字段:挂载选项,用于指定文件系统的挂载参数。常见选项包括 defaults(默认选项)、ro(只读挂载)、rw(读写挂载)等。
  • 第五个字段:备份选项,通常为 0(不备份)或 1(备份)。
  • 第六个字段:文件系统检查顺序,0 表示不检查,1 表示系统根分区应首先检查,2 表示其他分区按顺序检查。

2. 常见的配置示例

2.1 按设备挂载
/dev/sdb1   /mnt    ext4    defaults    0   2
  • 这表示将 /dev/sdb1 挂载到 /mnt 目录,使用 ext4 文件系统,采用默认挂载选项,备份选项为 0,检查选项为 2
2.2 按 UUID 挂载
UUID=5678-EFGH  /mnt  ext4  defaults  0  2
  • 通过 UUID 挂载文件系统,确保无论设备名称如何变化,都会找到正确的分区。
2.3 按卷标挂载
LABEL=MyVolume  /mnt  xfs  defaults  0  0
  • 使用卷标 MyVolume 来挂载设备,文件系统类型是 xfs,并且挂载时采用默认选项。
2.4 只读挂载
/dev/sdb1   /mnt   ext4   ro   0  2
  • 该配置将 /dev/sdb1 挂载为只读模式(ro),即禁止对其写入。
2.5 网络文件系统挂载(NFS)
server:/export  /mnt  nfs  defaults  0  0
  • 配置 NFS 文件系统,将 server:/export 挂载到本地的 /mnt 目录。
2.6 Swap 分区挂载
/dev/sda2   none    swap    defaults    0   0
  • 配置交换分区(swap),不会挂载到具体的目录,只需指定为 none

3. 特殊挂载选项

挂载时可以使用不同的选项来控制文件系统的行为。以下是一些常见的挂载选项:

  • defaults:使用默认挂载选项,适用于大部分场景。
  • ro:只读模式挂载。
  • rw:读写模式挂载。
  • noatime:禁止更新访问时间,适合一些不需要访问时间信息的应用,可以提升性能。
  • nofail:即使某个文件系统未能挂载,启动过程仍然继续,不会报错。适用于某些外部设备。
  • user:允许普通用户挂载和卸载该文件系统。

4. 配置举例

4.1 根分区配置(/
UUID=abcd-1234  /  ext4  defaults  1  1
  • 根分区通常是文件系统检查顺序为 1,并且必须在启动时挂载。
4.2 数据分区配置(如 /data
UUID=5678-EFGH  /data  ext4  defaults,noatime  0  2
  • 该分区挂载到 /data 目录,并且禁止访问时间的更新(noatime)。
4.3 NFS 挂载(远程挂载)
server:/export  /mnt  nfs  defaults,nofail  0  0
  • 使用 nfs 协议从远程服务器挂载共享目录 /export 到本地的 /mnt 目录,并且即使远程服务器无法访问,启动时不会报错。

5. 常见错误与排查

  • 设备无法挂载:检查 /etc/fstab 中的设备路径或 UUID 是否正确。
  • 文件系统类型错误:确保文件系统类型正确,例如 ext4xfs 不可混用。
  • 挂载点不存在:确保挂载点(目录)已经创建。例如,/mnt 目录必须事先存在。
  • 只读文件系统:检查是否有 ro 或硬件故障导致文件系统只读。

6. 修改 /etc/fstab 后的注意事项

  • 每次修改 /etc/fstab 文件后,可以使用 mount -a 命令来尝试挂载所有未挂载的文件系统,检查配置是否正确:
  sudo mount -a
  • 如果出现错误,可以通过 dmesg/var/log/syslog 查看详细的错误信息。

总结:

  1. UUID 是文件系统的唯一标识符,可以通过 blkid 命令查看。
  2. 卷标:使用 xfs_admine2label 设置卷标,可以通过 mount -L 挂载。
  3. 挂载方式 :
  • 按设备文件挂载(mount /dev/sdb1 /mnt)。
  • 按 UUID 或卷标挂载(mount -U UUID /mntmount -L "卷标名" /mnt)。
  1. 只读挂载:使用 mount -o ro 可以将文件系统挂载为只读。
  2. -t 参数:用于明确指定文件系统类型(如 ext4xfsvfat 等)。
  3. 自动挂载:通过 /etc/fstab 文件配置。
  4. 卸载磁盘:使用 umount 命令。

以下是整理的关于卸载文件系统和 SWAP 交换分区的详细笔记,包括配置 SWAP 的方法和示例:


卸载文件系统

  1. 卸载文件系统
    使用 umount 命令卸载指定的挂载点或文件系统:
   umount <挂载点或文件系统>

示例:

   umount /mnt/data

SWAP 交换分区

1. 什么是 SWAP

  • SWAP 是操作系统用来临时存储内存数据的区域。
  • 当系统物理内存不足时,操作系统会将一部分数据写入硬盘上的 SWAP 区域,充当扩展内存使用。
  • Linux 中称为 SWAP,在 Windows 中称为 虚拟内存

2. SWAP 的推荐大小

  • 2G 及以下内存:SWAP 设置为物理内存的两倍。
  • 2G - 8G 内存:SWAP 设置为与物理内存大小相同。
  • 8G - 64G 内存:SWAP 至少设置为 4G。
  • 大于 64G 内存:SWAP 设置为 4G 或更多。

3. SWAP 的配置方法

(1)创建 SWAP 文件
  1. 创建一个 SWAP 文件
    使用 dd 命令创建一个指定大小的 SWAP 文件。
    示例(创建一个 4G 的 SWAP 文件):
   dd if=/dev/zero of=swapfile bs=1G count=4
  1. 设置 SWAP 文件权限
    确保 SWAP 文件的权限安全。
   chmod 600 swapfile
  1. 格式化为 SWAP
    将文件格式化为 SWAP 类型。
   mkswap swapfile
  1. 启用 SWAP 文件
    启用新创建的 SWAP 文件。
   swapon swapfile
  1. 永久生效
    将 SWAP 文件加入 /etc/fstab,以便系统重启后自动启用:
   echo '/swapfile none swap defaults 0 0' >> /etc/fstab
(2)禁用 SWAP
  • 临时禁用 SWAP:
  swapoff swapfile
  • 永久禁用 SWAP:
    /etc/fstab 中删除对应的 SWAP 条目。
(3)使用分区配置 SWAP
  1. 创建 SWAP 分区
    使用 fdiskparted 创建一个新的分区,并将分区类型设置为 SWAP 类型(Linux swap,分区类型代码 82)。 输入 n,创建新分区。
    选择 p 表示主分区,或直接按回车使用默认。
    输入分区编号(例如 1),或者直接回车使用默认。
    输入起始扇区和结束扇区,或直接按回车使用默认分配整个剩余空间。
    输入 t,修改分区类型。
    输入刚刚创建的分区编号(例如 1)。
    输入 82,将分区类型设置为 Linux swap。
  2. 格式化分区为 SWAP
    示例
   mkswap /dev/sdX
  1. 启用 SWAP 分区
    示例
   swapon /dev/sdX
   或
   swapon UUID=111111
  1. 永久生效
    /etc/fstab 文件中添加以下内容:
   /dev/sdX none swap defaults 0 0
   或
   UUID=111111-111 none swap defaults 0 0

SWAP 状态管理

  1. 查看当前 SWAP 使用情况:
   swapon --show
   free -h
  1. 清空 SWAP(将数据重新加载到内存中):
    如果需要清空 SWAP,可先禁用再重新启用:
   swapoff -a
   swapon -a

SWAP 分区管理工具

  1. swapon -a
    挂载 /etc/fstab 文件中列出的所有未挂载的 SWAP 分区或文件:
   swapon -a
  1. swapon -s
    查看当前已挂载的 SWAP 分区或文件,显示其设备、大小、使用情况等信息:
   swapon -s
  1. swapon -p <优先级>
    为指定的 SWAP 分区或文件设置优先级。优先级值越大,表示该 SWAP 分区的优先级越高:
   swapon -p 10 /dev/sdb1
  1. swapon <设备>
    手动激活指定的 SWAP 分区或文件,不会读取 /etc/fstab 中的设置:
   swapon /dev/sdb1
  1. swapoff <设备>
    手动禁用指定的 SWAP 分区或文件:
   swapoff /dev/sdb1

文件系统检查修复工具

1. EXT 系列文件系统:fsck 和 e2fsck

fsck(File System Consistency Check)是 Linux 中用于检查和修复文件系统的工具,广泛用于 EXT 系列文件系统(ext2, ext3, ext4)中。它会检查文件系统中的各种错误,并进行修复。

fsck 命令选项
  • -v:查看详细信息。
  • -a:自动修复,自动修复文件系统错误,但不显示详细的过程信息。
  • -r:交互式修复错误,提示用户每个修复项,并等待确认。
fsck -v -a /dev/sdX

2. e2fsck

e2fsckfsck 的一种更具体的实现,用于 EXT 系列文件系统,尤其是 ext2、ext3 和 ext4 文件系统。它提供了一些额外的选项来控制修复过程。

e2fsck 命令选项
  • -y:自动修复所有错误,跳过确认提示。
  • -f:强制修复,即使文件系统看起来没有错误,也会进行检查和修复。
  • -J:修复 JBD(Journaling Block Device)日志信息。这个选项用于处理 ext3ext4 文件系统的日志信息。
e2fsck -f -y -J /dev/sdX

3. 总结

  • fsck:广泛用于 EXT 系列文件系统的检查与修复,支持自动修复、交互式修复和详细模式。
  • e2fsck:专门用于 EXT 系列文件系统的修复,提供更多的选项,如强制修复和日志修复。

通过这些命令,可以有效地检测和修复 EXT 系列文件系统中的各种错误,确保文件系统的完整性和稳定性。

文件系统超级块修复

在文件系统中,超级块是非常重要的元数据结构,包含了文件系统的基本信息,例如块大小、inode 数量、inode 索引表的位置等。如果超级块发生损坏,文件系统可能无法正常挂载或识别,导致无法访问存储的数据。本文将通过 XFSEXT 系列(如 ext4)文件系统,介绍如何修复损坏的超级块。


1. 超级块的作用

超级块是文件系统的核心数据结构,存储了许多重要的文件系统信息:

  • inode 数量:系统可以存储多少个文件和目录。
  • 块大小:磁盘块的大小。
  • 超级块副本:用于恢复文件系统时提供备份。
  • 文件系统的挂载信息:记录了挂载信息和文件系统的状态。

如果超级块损坏,文件系统无法正常工作,因此需要修复。


2. 常见的文件系统和修复工具

2.1 XFS 文件系统

XFS 是一种高性能的日志型文件系统,广泛应用于 Linux 系统。XFS 文件系统提供了 xfs_repair 工具来修复损坏的文件系统。

修复命令

xfs_repair /dev/sdX
  • /dev/sdX 替换为需要修复的分区设备。

2.2 EXT 文件系统(如 ext4)

EXT 文件系统(包括 ext2, ext3, ext4)是最常见的 Linux 文件系统之一。其修复工具为 fsck(文件系统检查)。

修复命令

fsck.ext4 /dev/sdX
  • /dev/sdX 替换为需要修复的分区设备。

fsck 会自动检查文件系统并提示是否修复错误。


3. 模拟 XFS 文件系统故障与修复

假设我们有一个 XFS 文件系统,并且故意破坏了超级块,来展示修复过程。

3.1 模拟 XFS 文件系统故障

我们使用 dd 命令破坏文件系统的超级块。此操作将向设备写入零值,破坏文件系统的原始数据。

破坏文件系统命令

dd if=/dev/zero of=/dev/nvme0n2p2 bs=400 count=3
  • if=/dev/zero:输入源为零值设备。
  • of=/dev/nvme0n2p2:目标设备,替换为你的设备名。
  • bs=400:块大小为 400 字节。
  • count=3:写入 3 个块。

这将把文件系统的超级块数据清除,从而模拟文件系统损坏。

3.2 修复 XFS 文件系统

一旦超级块损坏,我们可以使用 xfs_repair 工具来修复它。

修复命令

xfs_repair /dev/nvme0n2p2

这个命令会自动检测并修复文件系统中的问题,特别是超级块损坏。如果 xfs_repair 提示超级块有问题,它将尝试从备份的超级块中恢复。

3.3 查看修复过程

运行 xfs_repair 后,您将看到类似如下的输出:

xfs_repair: Starting recovery...
xfs_repair: Checking inode allocation...
xfs_repair: Checking log...
xfs_repair: Superblock read error
xfs_repair: Trying backup superblock...
xfs_repair: Recovery successful

如果恢复成功,文件系统将被修复并可以挂载。

3.4 挂载修复后的文件系统

修复完成后,可以尝试挂载文件系统:

mount /dev/nvme0n2p2 /mnt

然后检查文件系统是否正常工作。


4. 模拟 EXT 系列文件系统故障与修复

对于 EXT 文件系统(如 ext4),我们同样可以使用 dd 命令来破坏超级块,之后使用 fsck 来修复。

4.1 模拟 EXT 文件系统故障

dd if=/dev/zero of=/dev/sda1 bs=400 count=3

4.2 修复 EXT 文件系统

使用 fsck 工具检查并修复文件系统:

fsck.ext4 /dev/sda1

如果超级块损坏,fsck 会尝试使用备份超级块进行恢复。

4.3 挂载修复后的 EXT 文件系统

修复后,可以挂载 EXT 文件系统:

mount /dev/sda1 /mnt

5. 总结

  • 超级块是文件系统的重要组成部分,存储了文件系统的元数据和结构信息。
  • 如果超级块损坏,可以使用相应的工具(如 xfs_repairfsck)来修复文件系统。
  • XFS 文件系统使用 xfs_repairEXT 系列文件系统(如 ext4)使用 fsck
  • 定期备份超级块可以在出现故障时帮助恢复文件系统。