2020 年 11 月下旬,我在外部硬盘上安装了 Ubuntu 20.04,使用过程中没有出现任何重大问题。然后,当我在 12 月 21 日尝试启动并登录(通过常规方式)时,失败了。它没有给我通常的登录屏幕,而是显示了有关 inode 问题的消息。我关掉电脑,然后尝试再次启动。这一次,它出现了一个显示以下输出的屏幕:
[ 0.159360 ipmi:dmi: Base address is zero, assuming no IPMI interface
/dev/sdc2 contains a file system with errors, check forced.
/dev/sdc2:
Inode 131169 seems to contain garbage.
/dev/sdc2: UNEXPECTED INCONSISTENCY; RUN fsck MANUALLY.
(i.e., without -a or -p options)
fsck exited with status code 4
The root filesystem on /dev/sdc2 requires a manual fsck
BusyBox v1.30.1 (Ubuntu 1:1.30.1-4ubuntu6.2) built-in shell (ash)
Enter 'help' for a list of built-in commands.
(initramfs)
多次尝试启动 Ubuntu 都得到如上所示的相同输出。
我做了大量的研究(使用另一台计算机搜索相关网站,然后仔细阅读它们),并多次尝试修复该问题,但都没有成功。我希望有人熟悉这种情况,这样他们就可以解释为什么我的 Ubuntu 20.04 系统出现故障,并且可以提供一步一步的程序来修复任何损坏的问题。
理想情况下,我将能够完全恢复系统,这样启动系统时就会出现熟悉的登录屏幕,并且我的所有数据都将可用。但即使 Ubuntu 坏了,我必须重新安装它(这不是什么大问题),我还是希望能够恢复我能恢复的任何数据。我最近几天更新了一些文件,而且我每次使用电脑时都不会备份数据,所以我不想丢失这些最近的更改。
为了尝试修复该问题,我在 (initramfs) 提示符下输入了“fsck -y /dev/sdc2”(基于我在多个网站上找到的建议)。然后我输入了“reboot”(在 (initramfs) 提示符下),但没有任何效果,因此我输入了“exit”。屏幕一片空白,然后大约 10 分钟内什么都没有发生,因此我手动关闭了计算机。当我重新打开计算机并尝试启动 Ubuntu 时,这次屏幕显示以下两行:
/dev/sdc2: recovering journal
/dev/sdc2: clean, 471037/4890624 files, 6056765/19531250 blocks
但之后什么也没发生。所以大约 10 分钟后,我手动关闭了电脑。然后我再次打开它,并选择进入恢复模式(“Ubuntu,带有 Linux5.4.0-58-generic(恢复模式)”。屏幕上快速输出了许多行,最终显示:
Starting GNOME Display Manager...
[*** ] (1 of 2) A start job is running for Login Service (56s / 1 min 30s)
但不久之后,它显示:
[FAILED] Failed to start GNOME Display Manager.
然后它似乎陷入了每隔几分钟重复一次的无限循环,首先显示“正在启动 GNOME 显示管理器”,然后显示“无法启动 GNOME 显示管理器”。因此,我手动关闭了计算机,再次尝试启动 Ubuntu 20.04(这次以正常方式,而不是恢复模式),屏幕一片空白,除了顶部附近的以下两行(与我之前看到的非常相似,但数字略有不同):
/dev/sdc2: recovering journal
/dev/sdc2: clean, 471039/4890624 files, 6060864/19531250 blocks
这次,我只是把它放在一边,看看是否会发生什么。它一直这样持续了 6 个多小时,所以我放弃了,关掉了电脑。
今天早上,我再次尝试启动 Ubuntu 20.04(以正常方式,而不是恢复模式)。像往常一样,“GNU GRUB 版本 2.04”屏幕出现一两分钟,然后自动消失。屏幕完全空白约 60 秒,然后在屏幕中央短暂显示小字体的“Ubuntu 20.04”,然后在屏幕顶部显示以下一行输出(这次没有提到“恢复日志”):
/dev/sdc2: clean, 471032/4890624 files, 6064956/19531250 blocks
两个多小时后,屏幕上仍然只显示上述一行输出。外部硬盘上的指示灯偶尔会闪烁,我猜想这可能表示它在执行某项操作(但是什么操作?!)。
分子中的数字(文件为 471032,块为 6064956)表示什么?分母中的数字(文件为 4890624,块为 19531250)表示什么?为什么每次尝试启动时它们都会略有变化?如果我让计算机继续运行,它会继续运行并最终进入通常的登录屏幕吗?
以下是有关我的系统配置的一些详细信息。我的电脑是一台装有 Windows 7 的戴尔 Inspiron 笔记本电脑,它已经有大约 8 年的历史了(虽然有些旧,但仍然相当可用)。我在新的 Seagate 外置硬盘(总容量为 1 TB)上创建的 80 GB 分区上安装了 Ubuntu 20.04。我喜欢可以选择使用 Windows 7(它很稳定,并且支持我喜欢的一些应用程序)或 Ubuntu(一个很棒的操作系统!)。大约 8 年来,我一直使用同样的安排从另一个外置硬盘启动 Ubuntu 12.04(从来没有出现任何问题),所以我认为同样的程序应该适用于 Ubuntu 20.04。当我想使用 Ubuntu(20.04 或 12.04)时,我将外置硬盘插入计算机上的 USB 端口,然后按下计算机的电源按钮,然后按 F12 键(用于启动选项),然后选择“USB 存储设备”选项。然后计算机屏幕显示通常的“GNU GRUB 版本 2.04”屏幕,然后自动启动 Ubuntu 并带我进入登录屏幕(除了文件系统出现故障时 - 就像我现在所处的情况!)。
为了帮助大家,以下是“fsck -y /dev/sdc2”命令输出中显示的最后几行(大多数输出都飞得太快了,我没有时间阅读或记下它):
Free blocks count wrong for group #108 (11074, counted=11124).
Fix? yes
Free blocks count wrong for group #171 (5910, counted=6084).
Fix? yes
Free blocks count wrong (13471083, counted=13474145).
Fix? yes
Inode bitmap differences: -(131169--131184) -(131201--131232) -(131521--131535)
-(131537--131552)
Fix? yes
Free inodes count wrong for group #16 (82, counted=161).
Fix? yes
Free inodes count wrong (4419514, counted=4419593).
Fix? yes
/dev/sdc2: ***** FILE SYSTEM WAS MODIFIED *****
/dev/sdc2: 471031/4890624 files (0.2% non-contiguous), 6057105/19531250 blocks
(initramfs)
在运行 fsck 命令之前,我首先输入“ls”(在 initramfs 提示符下),它显示以下输出(我猜是 / 下的各个目录):dev bin init lib64 sbin var tmp root conf lib libx32 scripts sys kernel etc lib32 run usr proc
我很担心我没有在该集合中看到“home”。这让我担心我的主目录及其下的所有内容都丢失了。
运行 fsck 命令后,我再次输入“ls”,出现完全相同的输出(集合中没有“home”,因此我仍然非常担心)。
一些网页声称“fsck -y <failed_partition>”后跟“reboot”会起作用,但就我而言,“reboot”没有任何作用。(initramfs)提示符只是返回,与之前没有明显变化。所以我想知道是什么阻止了 Ubuntu 重新启动。
然后,当我尝试进入恢复模式时,甚至失败了(因为上面描述的“无法启动 GNOME 显示管理器”错误)。所以看起来 Ubuntu 的状况非常糟糕。
非常感谢任何能提供有用信息和/或建议的人。如果你能帮助我将我的 Ubuntu 20.04 安装恢复到完全健康状态,那么这个假期对我来说将是一个非常快乐的假期。或者如果你至少能帮助我恢复我的数据,那仍然是一个很大的帮助。
答案1
有一次我遇到这个问题,我没有从 initramfs 修复它,而是从可启动的 USB 修复它 - 你可以试试。此外,还有一个-f
你应该用于 fsck 的选项:
fsck -f /dev/sdc2
最后,使用lsblk
以确保您正在检查所有块设备。
- 该
-f
选项被传递给e2fsck
,并强制进行文件系统检查,即使文件系统报告它是干净的。 - 你
/dev/sdc2
特别提到了,所以我假设有一个/dev/sdc1