45、Linux文件系统修复、恢复与创建全攻略

Linux文件系统修复、恢复与创建全攻略

1. 修复受损文件系统

有时候,由于不当关机或硬件故障,文件系统本身会受损,我们需要修复元结构的不一致问题。这些问题可能表现为inode或数据块计数不正确,还可能会遇到孤立的inode。孤立的inode是指与目录或柱面组的inode列表断开连接,无法被找到使用的inode。

运行 fsck 检查所有文件系统的最佳且最简单的方法是重启主机。如果 /etc/fstab 中文件系统条目的最后一列有非零数字,系统和服务管理器 systemd 会在启动时对所有文件系统运行 fsck fsck 程序首先会检查是否有可检测到的问题,这只需要很少的时间。如果检测到问题,它会解决问题。

实验19 - 5:FSCK
此实验不需要重启,但需要以root身份执行。 /var/log/messages 文件包含了在启动时对每个文件系统运行 fsck 的记录:

[root@studentvm1 ~]# cd /var/log ; grep fsck messages
<snip>
Feb 13 19:50:39 studentvm1 systemd[1]: Starting systemd-fsck-root.service - File 
System Check on /dev/mapper/fedora_studentvm1-root...
Feb 13 19:50:40 studentvm1 systemd-fsck[542]: root: clean, 5027/131072 files, 
187600/524288 blocks
Feb 13 19:50:40 studentvm1 systemd[1]: Finished systemd-fsck-root.service - File 
System Check on /dev/mapper/fedora_studentvm1-root.
<snip>

这三条消息表明 fsck 在根文件系统上启动,然后由于未检测到错误或不一致而停止。每次启动时,每个文件系统都应该有类似的消息。

由于每次启动时都会运行 fsck ,所以很少需要从命令行运行它。但系统管理员有时可能需要手动进入救援模式并对大多数文件系统运行 fsck

2. 使用Fedora Live USB设备进行系统恢复

如果根文件系统无法挂载,我们在启动系统时就无法进入维护模式,因此需要找到另一种方法进入维护模式、运行 fsck 或对根文件系统进行其他维护。

使用Live USB镜像进入恢复模式
解决此问题的唯一方法是找到进入可用恢复模式的方法。当其他方法都失败时,Fedora提供了一个很好的工具,即用于安装新Fedora实例的Live USB拇指驱动器。

因为 fsck 不能在已挂载的根文件系统上运行,所以我们需要在不挂载根的情况下启动系统,唯一的方法就是使用Live USB设备。

实验19 - 6:使用Live USB设备进行恢复
即使你的文件系统没有损坏,也应该进行此实验,因为在你的职业生涯中肯定至少需要做几次。此实验的目标是对根分区运行 fsck ,同时还可以做一些其他有趣的事情。
操作步骤如下:
1. 关闭VM电源,并验证其设置为首先从“光驱”设备启动(在创建VM时应该已经这样设置)。
2. 在存储配置页面的IDE辅助设备0上“挂载”Fedora Live USB ISO镜像。
3. 像安装Fedora一样启动进入Fedora Xfce Live用户桌面。
4. 打开终端会话并切换到root权限。
5. 运行 lsblk 命令进行参考,以识别 / boot efi 分区:

[root@localhost-live ~]# lsblk
NAME                       MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
loop0                        7:0    0  1.5G  1 loop
loop1                        7:1    0    6G  1 loop
|-live-rw                  253:0    0    6G  0 dm   /
`-live-base                253:1    0    6G  1 dm
loop2                        7:2    0   32G  0 loop
`-live-rw                  253:0    0    6G  0 dm   /
sda                          8:0    0   60G  0 disk
|-sda1                       8:1    0    1M  0 part
|-sda2                       8:2    0    1G  0 part
|-sda3                       8:3    0    1G  0 part
`-sda4                       8:4    0   58G  0 part
  |-fedora_studentvm1-tmp  253:2    0    5G  0 lvm
  |-fedora_studentvm1-var  253:3    0   10G  0 lvm
  |-fedora_studentvm1-home 253:4    0    2G  0 lvm
  |-fedora_studentvm1-usr  253:5    0   15G  0 lvm
  |-fedora_studentvm1-root 253:6    0    2G  0 lvm
  `-fedora_studentvm1-test 253:7    0  500M  0 lvm
sr0                         11:0    1  1.6G  0 rom  /run/initramfs/live
zram0                      252:0    0    8G  0 disk [SWAP]
[root@localhost-live ~]#

运行文件系统检查不需要挂载根分区,因为运行 fsck 时文件系统必须是未挂载的,这可以保护文件系统在恢复操作期间不被更改。
使用 -a 选项让 fsck 自动修复遇到的任何问题:

[root@localhost-live ~]# fsck -a /dev/mapper/fedora_studentvm1-root
fsck from util-linux 2.38.1
e2fsck 1.46.5 (30-Dec-2021)
root: clean, 5027/131072 files, 187600/524288 blocks

我们还可以使用Live USB驱动器来解决配置文件损坏的问题。将根分区挂载到 /mnt 挂载点进行操作:

root@localhost-live ~]# mount /dev/mapper/fedora_studentvm1-root /mnt
[root@localhost-live etc]# vim fstab

完成实验后,退出 vim (按 Esc 键,输入 : ,然后输入 q 并按 Enter ),关闭VM电源,从VM的IDE控制器的“光驱”中移除ISO USB镜像。

3. 查找丢失的文件

文件可能会被文件系统或用户丢失,在运行 fsck 时也可能发生这种情况。原因之一是指向文件inode的目录项损坏,不再指向文件的inode。启动时可能会看到关于孤立inode的消息。

这些文件实际上并没有丢失, fsck 工具已经找到了inode,但该文件没有对应的目录项。 fsck 工具不知道文件的名称或它所在的目录,它可以恢复文件,只需要给文件起个名字,并将名称和指向inode的指针添加到目录中。

恢复的文件会被移动到每个文件系统的 lost+found 目录中。文件名看似随机,无法表明文件的类型。你需要使用 file stat cat string 等工具进行判断,以便用有意义的名称和扩展名重命名文件,并将其移动到合适的目录。

4. 创建新文件系统

有时我们需要创建新的文件系统,可能是因为需要一个全新的文件系统用于特定目的,或者需要替换太小或损坏的现有文件系统。

下面将介绍在现有硬盘上创建新分区、创建文件系统和挂载点以及挂载新文件系统的过程。

查找可用空间
在添加原始分区之前,我们需要确定可用的存储空间。当前VM上有一个虚拟硬盘 /dev/sda ,我们来看看这个设备上是否有空间创建新分区。

实验19 - 7:查找可用存储空间
以root身份在 StudentVM1 上执行此实验。如果VM未运行,现在启动并登录。使用 fdisk 命令确定 /dev/sda 上是否有可用空间:

[root@studentvm1 ~]# fdisk -l /dev/sda
Disk /dev/sda: 60 GiB, 64424509440 bytes, 125829120 sectors
Disk model: VBOX HARDDISK
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 864009FC-A0DF-460A-918C-E3BF313E8E03
Device       Start       End   Sectors Size Type
/dev/sda1     2048      4095      2048   1M BIOS boot
/dev/sda2     4096   2101247   2097152   1G Linux filesystem
/dev/sda3  2101248   4198399   2097152   1G EFI System
/dev/sda4  4198400 125827071 121628672  58G Linux LVM
[root@studentvm1 ~]#

通过计算可知,设备的总扇区数为125,829,120, /dev/sda4 的结束扇区为125827071,差值为2049个扇区,不足以创建新分区。如果要添加新分区,我们需要其他方法。

添加新虚拟硬盘
由于现有的虚拟硬盘没有空间创建新分区,我们需要创建一个新的虚拟硬盘。使用VirtualBox很容易做到这一点,因为在创建VM时我们为SATA控制器添加了额外的端口。

实验19 - 8:添加新虚拟硬盘
操作步骤如下:
1. 在物理主机桌面上,如果VirtualBox管理器未打开则打开它,检查是否有可用的SATA端口,以便在VM运行时添加新的虚拟磁盘驱动器。
2. 启动VM,以学生用户身份登录到GUI桌面。
3. 点击“添加硬盘”图标,将新驱动器添加到SATA控制器。
4. 点击“确定”按钮,然后点击“创建新磁盘”按钮。选择默认的VDI(VirtualBox磁盘映像)文件类型,点击“下一步”。
5. 保持磁盘动态分配的默认设置,点击“下一步”继续。
6. 输入虚拟磁盘的名称为 StudentVM1 - 1 ,并将大小设置为20GB。

现在我们已经为 StudentVM1 虚拟主机添加了第二个虚拟硬盘。接下来,我们将对这个新的存储驱动器进行分区、格式化和添加分区标签。

实验19 - 9:准备新存储驱动器
操作步骤如下:
1. 打开终端会话并切换到root权限。
2. 显示当前存储设备和分区列表:

[root@studentvm1 ~]# lsblk -i
NAME                       MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda                          8:0    0   60G  0 disk
|-sda1                       8:1    0    1M  0 part
|-sda2                       8:2    0    1G  0 part /boot
|-sda3                       8:3    0    1G  0 part /boot/efi
`-sda4                       8:4    0   58G  0 part
  |-fedora_studentvm1-root 253:0    0    2G  0 lvm  /
  |-fedora_studentvm1-usr  253:1    0   15G  0 lvm  /usr
  |-fedora_studentvm1-tmp  253:2    0    5G  0 lvm  /tmp
  |-fedora_studentvm1-var  253:3    0   10G  0 lvm  /var
  |-fedora_studentvm1-home 253:4    0    2G  0 lvm  /home
  `-fedora_studentvm1-test 253:5    0  500M  0 lvm  /test
sdb                          8:16   0   20G  0 disk
sr0                         11:0    1 1024M  0 rom
zram0                      252:0    0    8G  0 disk [SWAP]

新的虚拟硬盘是 /dev/sdb ,为了进一步验证,可以使用 smartctl 命令获取更多详细信息:

[root@studentvm1 ~]# smartctl -x /dev/sdb
smartctl 7.3 2022-02-28 r5338 [x86_64-linux-6.1.7-200.fc37.x86_64] 
(local build)
Copyright (C) 2002-22, Bruce Allen, Christian Franke, www.smartmontools.org
=== START OF INFORMATION SECTION ===
Device Model:     VBOX HARDDISK
Serial Number:    VB9d500d54-408ea7d6
Firmware Version: 1.0
User Capacity:    21,474,836,480 bytes [21.4 GB]
Sector Size:      512 bytes logical/physical
Device is:        Not in smartctl database 7.3/5319
ATA Version is:   ATA/ATAPI-6 published, ANSI INCITS 361-2002
Local Time is:    Wed Feb 15 12:17:41 2023 EST
SMART support is: Unavailable - device lacks SMART capability.
<SNIP>

我们确定有一个20GB的虚拟硬盘 /dev/sdb ,接下来创建分区、格式化并添加分区标签。
3. 使用 fdisk 工具创建新分区:

[root@studentvm1 ~]# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.32.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Device does not contain a recognized partition table.
Created a new DOS disklabel with disk identifier 0xd1acbaf8.
Command (m for help): n
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): p
Partition number (1 - 4, default 1): <Press Enter for the default partition number (1)>
First sector (2048 - 41943039, default 2048): <Press Enter for the default first sector>
Last sector, +sectors or +size{K,M,G,T,P} (2048 - 41943039, default 41943039) +2G
Created a new partition 1 of type 'Linux' and of size 2 GiB.
Command (m for help): p
Disk /dev/sdb: 20 GiB, 21474836480 bytes, 41943040 sectors
Disk model: VBOX HARDDISK
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xc43a2838
Device     Boot Start       End Sectors Size Id Type
/dev/sdb1        2048 4196351 4194304   2G 83 Linux
Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
[root@studentvm1 ~]#
  1. 在新分区上创建EXT4文件系统:
[root@studentvm1 ~]# mkfs -t ext4 /dev/sdb1
mke2fs 1.44.3 (10-July-2018)
Creating filesystem with 524288 4k blocks and 131072 inodes
Filesystem UUID: ee831607-5d5c-4d54-b9ba-959720bfdabd
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912
Allocating group tables: done
Writing inode tables: done
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done
[root@studentvm1 ~]#
  1. 添加分区标签:
[root@studentvm1 ~]# e2label /dev/sdb1
[root@studentvm1 ~]# e2label /dev/sdb1 TestFS
[root@studentvm1 ~]# e2label /dev/sdb1
TestFS
[root@studentvm1 ~]#
  1. 创建挂载点:
[root@studentvm1 ~]# mkdir /TestFS
  1. 挂载新文件系统:
[root@studentvm1 ~]# mount /TestFS/
mount: /TestFS/: can't find in /etc/fstab.
[root@studentvm1 ~]# mount -t ext4 /dev/sdb1 /TestFS/
[root@studentvm1 ~]# lsblk -i
NAME                       MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda                          8:0    0   60G  0 disk
|-sda1                       8:1    0    1G  0 part /boot
`-sda2                       8:2    0   59G  0 part
  |-fedora_studentvm1-root 253:0    0    2G  0 lvm  /
  |-fedora_studentvm1-swap 253:1    0    4G  0 lvm  [SWAP]
  |-fedora_studentvm1-usr  253:2    0   15G  0 lvm  /usr
  |-fedora_studentvm1-home 253:3    0    2G  0 lvm  /home
  |-fedora_studentvm1-var  253:4    0   10G  0 lvm  /var
  `-fedora_studentvm1-tmp  253:5    0    5G  0 lvm  /tmp
sdb                          8:16   0   20G  0 disk
`-sdb1                       8:17   0    2G  0 part /TestFS
sr0                         11:0    1 1024M  0 rom
  1. 卸载文件系统:
[root@studentvm1 ~]# umount /TestFS
  1. /etc/fstab 文件的底部添加新文件系统的条目:
/dev/sdb1        /TestFS         ext4    defaults        1 2
  1. 再次挂载新文件系统:
[root@studentvm1 ~]# mount /TestFS
mount: (hint) your fstab has been modified, but systemd still uses
       the old version; use 'systemctl daemon-reload' to reload.
[root@studentvm1 ~]# ll /TestFS/
total 16
drwx------. 2 root root 16384 Jan 14 08:54 lost+found
[root@studentvm1 ~]# lsblk -i
NAME                       MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda                          8:0    0   60G  0 disk
|-sda1                       8:1    0    1M  0 part
|-sda2                       8:2    0    1G  0 part /boot
|-sda3                       8:3    0    1G  0 part /boot/efi
`-sda4                       8:4    0   58G  0 part
  |-fedora_studentvm1-root 253:0    0    2G  0 lvm  /
  |-fedora_studentvm1-usr  253:1    0   15G  0 lvm  /usr
  |-fedora_studentvm1-tmp  253:2    0    5G  0 lvm  /tmp
  |-fedora_studentvm1-var  253:3    0   10G  0 lvm  /var
  |-fedora_studentvm1-home 253:4    0    2G  0 lvm  /home
  `-fedora_studentvm1-test 253:5    0  500M  0 lvm  /test
sdb                          8:16   0   20G  0 disk
`-sdb1                       8:17   0    2G  0 part /TestFS
sr0                         11:0    1 1024M  0 rom
zram0                      252:0    0    8G  0 disk [SWAP]

所有与文件系统相关的重要数据都记录在 fstab 中,也可以为该文件系统指定特定的选项。例如,如果不想让该文件系统在启动时自动挂载,可以将选项设置为 noauto,defaults
最后,卸载 TestFS 文件系统:

[root@studentvm1 ~]# umount /TestFS

通过以上步骤,我们完成了文件系统的修复、恢复以及新文件系统的创建过程。在实际操作中,要根据具体情况谨慎执行每个步骤,确保系统的稳定和数据的安全。

Linux文件系统修复、恢复与创建全攻略

5. 操作流程总结

为了更清晰地展示上述操作的流程,下面用mermaid格式的流程图来呈现创建新文件系统的主要步骤:

graph LR
    A[查找可用空间] --> B{是否有可用空间?}
    B -- 是 --> C[添加新虚拟硬盘]
    B -- 否 --> C
    C --> D[准备新存储驱动器]
    D --> E[创建分区]
    E --> F[格式化分区]
    F --> G[添加分区标签]
    G --> H[创建挂载点]
    H --> I[挂载新文件系统]
    I --> J[卸载文件系统]
    J --> K[更新fstab文件]
    K --> L[再次挂载文件系统]

同时,我们可以将操作步骤整理成表格,方便查看:
| 步骤 | 操作内容 | 命令示例 |
| ---- | ---- | ---- |
| 1 | 查找可用空间 | fdisk -l /dev/sda |
| 2 | 添加新虚拟硬盘 | 打开VirtualBox管理器,点击“添加硬盘”图标等一系列操作 |
| 3 | 准备新存储驱动器 | lsblk -i smartctl -x /dev/sdb |
| 4 | 创建分区 | fdisk /dev/sdb ,按提示操作 |
| 5 | 格式化分区 | mkfs -t ext4 /dev/sdb1 |
| 6 | 添加分区标签 | e2label /dev/sdb1 TestFS |
| 7 | 创建挂载点 | mkdir /TestFS |
| 8 | 挂载新文件系统 | mount -t ext4 /dev/sdb1 /TestFS/ |
| 9 | 卸载文件系统 | umount /TestFS |
| 10 | 更新fstab文件 | 在 /etc/fstab 文件底部添加 /dev/sdb1 /TestFS ext4 defaults 1 2 |
| 11 | 再次挂载文件系统 | mount /TestFS |

6. 常见问题及解决方法

在进行文件系统修复、恢复和创建的过程中,可能会遇到一些常见问题,下面为大家总结并给出解决方法:
- 问题1: fsck 运行报错
- 现象 :运行 fsck 时出现错误提示,无法正常检查文件系统。
- 原因 :可能是文件系统正在使用中,或者文件系统损坏严重。
- 解决方法 :确保文件系统未挂载,使用Live USB设备进入恢复模式后再运行 fsck 。如果问题仍然存在,可能需要更深入的检查和修复,如使用专业的数据恢复工具。
- 问题2:挂载文件系统失败
- 现象 :执行 mount 命令时提示找不到相关信息。
- 原因 :可能是 /etc/fstab 文件中没有相应的条目,或者文件系统类型指定错误。
- 解决方法 :检查 /etc/fstab 文件,确保有正确的条目。如果需要,可以手动指定文件系统类型进行挂载,如 mount -t ext4 /dev/sdb1 /TestFS/
- 问题3:找不到丢失的文件
- 现象 :在 lost+found 目录中找不到预期的恢复文件。
- 原因 :可能是 fsck 没有成功恢复文件,或者文件丢失的原因并非是目录项损坏。
- 解决方法 :检查 /var/log/messages 文件,查看 fsck 运行时的详细信息。如果仍然无法解决,可以尝试使用其他数据恢复工具进行查找。

7. 总结与建议

在处理Linux文件系统的相关问题时,我们需要谨慎操作,遵循正确的步骤。以下是一些总结和建议:
- 定期备份 :无论进行何种操作,定期备份重要数据是非常必要的。可以使用 rsync 等工具进行定期的数据备份,以防止数据丢失。
- 谨慎修改配置文件 /etc/fstab 等配置文件的修改要谨慎,修改前最好先备份,避免因配置错误导致系统无法正常启动。
- 学习和实践 :不断学习文件系统的相关知识,通过实践来熟悉各种操作。可以在测试环境中进行操作练习,提高自己的技能水平。

通过本文的介绍,我们详细了解了Linux文件系统的修复、恢复和创建过程。希望这些知识和操作步骤能帮助你更好地管理和维护Linux系统的文件系统。在实际应用中,要根据具体情况灵活运用这些方法,确保系统的稳定运行和数据的安全。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值