如何在 Linux 上使用 fsck 命令
已发表: 2022-01-29
我们所有的重要数据都位于一种或另一种文件系统中,文件系统问题必然会发生。 在 Linux 上,我们可以使用fsck命令来查找和修复文件系统错误。
文件系统是软件
文件系统是计算机最关键的组件之一。 如果没有文件系统,计算机就无法在硬盘驱动器上存储任何数据,无论该驱动器是旋转机械盘还是固态驱动器。 实际上,必须先创建文件系统,然后才能将操作系统安装到硬盘上。 必须有一些东西来存储操作系统文件。因此在安装过程中会创建一个文件系统。
文件系统由软件创建,由软件写入,由软件读取。 如您所知,所有复杂的软件都有错误。 我们的数据对我们来说至关重要,因此我们非常信任文件系统以及创建和使用它们的软件。 如果出现问题,我们可能会失去对部分文件系统甚至整个分区的访问权限。
现代日志文件系统更擅长处理可能由突然断电或系统崩溃引起的问题。 他们很强大,但也不是无敌的。 如果他们的内部表被打乱,他们可能会忘记每个文件在驱动器上的位置、大小、名称以及对其设置的文件权限。
fsck命令可让您检查文件系统是否健康。 如果它发现任何问题,它通常也可以为您解决这些问题。
进行预检
使用fsck需要 sudo 权限。 任何可以更改文件系统的命令都需要谨慎处理,并且仅限于知道自己在做什么的人。
飞行员不会跳上飞机,启动它,然后飞入淡蓝色的彼岸。 他们进行飞行前检查。 否则有太多的利害关系。 这是一个养成的好习惯。 在使用fsck之前,您需要确保您将在正确的驱动器上使用它。 所以在对fsck做任何事情之前,我们要做一些侦察。
我们将从fdisk开始并将其通过管道传输到less中。 我们不要求有关特定分区的信息。 通过使用-l (list) 选项, fdisk列出它在“/proc/partitions”文件中找到的所有设备上的分区表(如果存在)。
须藤 fdisk -l | 较少的

我们可以看到/dev/sda和/dev/sdb的条目。 您可以滚动文件以查看计算机上可能存在的任何其他条目。

/dev/sda上的分区被列为/dev/sda1 、 /dev/sda2和/dev/sda3 。 所以我们在第一个驱动器上有三个分区。 通过使用parted命令,我们可以看到更多信息。 我们将使用'print'选项在终端窗口中显示分区表。
sudo parted /dev/sda '打印'

这次我们得到了一些额外的信息,包括每个分区上的文件系统类型。

型号:ATA VBOX HARDDISK (scsi) 磁盘 /dev/sda:34.4GB 扇区大小(逻辑/物理):512B/512B 分区表:gpt 磁盘标志: 编号 开始 结束 大小 文件系统 名称 标志 1 1049kB 2097kB 1049kB bios_grub 2 2097kB 540MB 538MB fat32 EFI 系统分区启动,特别是 3 540MB 34.4GB 33.8GB 外部 4
这台测试计算机中有三个驱动器。 这些是其他两个驱动器/dev/sdb和/dev/sdc的结果。 请注意,这些文件系统没有“名称”字段。
sudo parted /dev/sdb '打印'
型号:ATA VBOX HARDDISK (scsi) 磁盘 /dev/sdb:21.5GB 扇区大小(逻辑/物理):512B/512B 分区表:msdos 磁盘标志: 编号 开始 结束 大小 类型 文件系统标志 1 1049kB 21.5GB 21.5GB 主 ext4
sudo parted /dev/sdc '打印'
型号:ATA VBOX HARDDISK (scsi) 磁盘 /dev/sdc:21.5GB 扇区大小(逻辑/物理):512B/512B 分区表:msdos 磁盘标志: 编号 开始 结束 大小 类型 文件系统标志 1 1049kB 21.5GB 21.5GB 主 ext3
第二个和第三个驱动器恰好大小相同,并且每个驱动器都有一个分区。 但是第二个驱动器上的文件系统是ext4 ,第三个驱动器上的文件系统是旧的ext3 。
我们将分区标识符传递给fsck ,它会检查该分区上的文件系统。 但是我们不能在挂载的文件系统上运行fsck 。 我们需要卸载驱动器。 为此,我们需要知道分区以及文件系统的挂载点。
我们可以使用df命令轻松找到它。
df /dev/sdb1
df /dev/sdc1

使用 fsck 命令
我们已经获得了我们需要的所有信息。 我们要做的第一件事是卸载我们要检查的文件系统。 我们将在/dev/sdb的第一个(也是唯一一个)分区上处理文件系统,即/dev/sdb1 。 我们之前看到这是一个ext4文件系统,它挂载在“/run/mount/dave/sata2”。
我们将使用umount命令。 请注意,“umount”中没有“n”。
sudo umount /run/mount/dave/sata2

使用umount ,没有消息就是好消息。 如果您以静默方式返回到命令提示符,我们就可以开始了。
须藤 fsck /dev/sdb1

此文件系统报告为干净。 这意味着文件系统报告它没有错误或问题。 不会自动进行更深入的文件系统检查。 我们还可以查看fsck返回给 shell 的返回码。
回声$?

返回值为零表示没有错误。 可能的返回码是:
- 0 :没有错误
- 1 :文件系统错误更正
- 2 :系统应该重新启动
- 4 :文件系统错误未得到纠正
- 8 :操作错误
- 16 :用法或语法错误
- 32 :检查被用户请求取消
- 128 :共享库错误
尽管文件系统被报告为干净,但我们可以使用-f (强制)选项强制进行文件系统检查。
须藤 fsck /dev/sdb1 -f

这一次,检查需要更长的时间才能完成,但它会对文件系统进行更彻底的测试。 我们的文件系统确实很干净,没有报错。 如果在进行测试时发现问题,系统会提示您让fsck修复问题或忽略错误。
完成测试后,您需要重新挂载文件系统。 最简单的方法是使用mount和-a (all)选项。 这会检查“/etc/fstab”中的文件系统列表,并确保它们都已安装,就像它们在常规引导之后一样。
须藤挂载-a


请注意,我们不需要告诉fsck分区上的文件系统类型; 该实用程序通过检查文件系统来确定。 这意味着我们可以强制对/dev/sdc1 (我们测试 PC 上的ext3文件系统)进行文件系统检查,使用与/dev/sdb1 (即ext4分区)完全相同的命令。
须藤 fsck /dev/sdc1 -f

您可能不想直接修复文件系统。 你可能更喜欢在跳跃之前先看看。 您可以要求fsck不提供任何修复,而只是向终端窗口报告问题。 -N (试运行)选项就是这样做的:
sudo fsck -N /dev/sdb1

与此相反的是告诉fsck如果发现任何错误,不要打扰提示,并继续修复它们。 为此,请使用-y (无提示)选项。
sudo fsck -y /dev/sdb1
在根分区上使用 fsck
您不能在已挂载的分区上使用fsck ,但要启动计算机,必须挂载根分区。 那么我们如何在根分区上运行fsck呢? 答案是中断引导过程并在恢复模式下运行fsck 。
在您的计算机启动时,按住“Shift”键。 如果您的时间设置正确,您将不会启动到 Linux。 启动过程将在黑白菜单处停止。 本文使用的测试机器运行的是 Ubuntu,但其他发行版具有相同类型的菜单,尽管外观可能有所不同。 在屏幕截图中显示“Ubuntu”的地方将包含您的发行版的名称。

使用“向上箭头”和“向下箭头”键移动高亮条,以便选择“Ubuntu 的高级选项”菜单项。 点击“Enter”移动到下一个屏幕。

选择以“(恢复模式)”结尾的选项。 在我们的示例中,它是“Ubuntu,带有 Linux 5.11.0-20-generic(恢复模式)”。 按“Enter”键。
您将看到恢复菜单。 选择“fsck 检查所有文件系统”并按“Tab”键将突出显示移动到“确定”按钮。 按“输入”。

您将看到一条通知,指出根分区将与“/etc/fstab”文件中定义的任何其他分区一起安装。

按“Tab”键将突出显示移动到“是”按钮,然后按“Enter”。
您将看到fsck在交互模式下运行。 如果有问题,系统会提示您让fsck修复它们或忽略它们。 检查文件系统后,您将再次看到恢复菜单。
选择“恢复”选项,按“Tab”键将突出显示移动到“确定”按钮,然后按“Enter”。 启动过程将继续,您将启动到 Linux。
恢复模式启动可能会影响某些驱动程序,因此最好在启动到 Linux 后立即重新启动。 这可确保您的计算机以标准方式运行。
当事情出错时
安全网的存在是有原因的。 了解fsck命令。 如果有一天需要在愤怒中使用它,你会很高兴你提前熟悉了自己。
| Linux 命令 | ||
| 文件 | tar · pv · cat · tac · chmod · grep · diff · sed · ar · man · pushd · popd · fsck · testdisk · seq · fd · pandoc · cd · $PATH · awk · join · jq · fold · uniq · journalctl · tail · stat · ls · fstab · echo · less · chgrp · chown · rev · look ·字符串·类型·重命名· zip · unzip · mount · umount · install · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · patch · convert · rclone · shred · srm | |
| 流程 | 别名· screen · top · nice · renice · progress · strace · systemd · tmux · chsh · history · at · batch · free · which · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat ·超时·墙·是·杀死·睡眠· sudo · su ·时间· groupadd · usermod ·组· lshw ·关机·重新启动·停止·关机· passwd · lscpu · crontab ·日期· bg · fg | |
| 联网 | netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · dig · finger · nmap · ftp · curl · wget · who · whoami · w · iptables · ssh-keygen · ufw |
相关:适合开发人员和爱好者的最佳 Linux 笔记本电脑



