我的机器有一个 2TB 的硬盘,有 3 个分区:
/dev/sda1 fat32 512MB
/dev/sda2 ext2 244MB
/dev/sda3 ext4 1.82TB
我的 14.04 抱怨 /boot 上有 0 字节,所以我进去做了一个,sudo apt-get remove linux-headers-3.2.0.2*
因为已经有一个linux-headers-3.2.0.30
可用的(我想删除除当前之外的所有文件以释放该空间并停止系统抱怨)。后来我发现这是一个糟糕的想法。
我的系统现在显然无法启动,我打开电源,屏幕变紫,然后回到 BIOS。我运行了一个这里有非常全面的步骤,但情况依然如旧。
由于我没有看到操作系统选项列表,我决定可能需要重新安装 GRUB,因此我运行了Ubuntu 启动修复序列,但由于我的ext4
是 LVM,并且我没有在 UEFI 模式下运行 Live Disc,因此 Boot Repair 程序要求我向 /dev/sda3 添加 bios_grub 标志,我照做了(删除了 LVM 标志)。我继续自动 Grub 修复,但根本不起作用。事实上,当我重新启动 Live Disc 时,我发现 GParted 不再识别 上的文件系统类型/dev/sda3
。我将标志重置为 LVM,并使用 将文件系统重置为 ext4 mkfs.ext4 /dev/sda3
。
现在,当我挂载时,/dev/sda3
其中的文件只有lost+found
。此外,我以前必须vgscan
和vgchange -a y
才能挂载 LVM 分区,而现在只需使用 即可挂载sudo mount /dev/sda3 /mnt
,因此我推测新的 LVM 标志尚未恢复分区的 LVM 状态。我真的需要我的数据,最好是!,以便 Ubuntu 能够正常启动(虽然我想如果其他方法都失败了,我可以重新安装,但我真的需要数据)。GParted 仍报告此分区已使用 29.41GB。
sudo parted -l
返回:
ubuntu@ubuntu:~$ sudo parted -l
Model: ATA WDC WD20EZRX-00D (scsi)
Disk /dev/sda: 2000GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Number Start End Size File system Name Flags
1 1049kB 538MB 537MB fat32
2 538MB 794MB 256MB ext2
3 794MB 2000GB 2000GB ext4 lvm
Model: Generic STORAGE DEVICE (scsi)
Disk /dev/sdb: 2003MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Number Start End Size Type File system Flags
1 66.0kB 2002MB 2002MB primary fat16 boot
请帮忙。
答案1
您的系统已损坏;我希望您有备份。如果没有,稍后我会提供一些恢复建议。不过,首先,我想指出您的错误,以免您重蹈覆辙……
我的 14.04 抱怨 /boot 上有 0 字节,所以我进入并执行了 sudo apt-get remove linux-headers-3.2.0.2*,因为已经有可用的 linux-headers-3.2.0.30(我想删除除当前版本之外的所有版本以释放该空间并停止系统抱怨)。后来我发现这是一个糟糕的想法。
该linux-headers
软件包(实际上linux-headers-3.13.0-45-generic
或类似名称)不包含 中的文件/boot
;它包含程序员用来编写与内核交互的程序的头文件。其大多数文件位于/usr/src
目录树中。普通用户可能不需要它们,尽管它们可能被依赖项拉入。关键是删除linux-headers
可能无害,并且不会帮助您恢复 中的空间/boot
。
内核本身来自一个名为 的软件包linux-image
,而不是linux-headers
。如果您删除该软件包(包括它的所有版本;您可能同时安装了两个或更多内核),则计算机将停止启动。我不知道 Boot Repair 是否能够修复这个问题。重新安装 GRUB 是没用的。您需要启动紧急系统并重新安装该linux-image
软件包。您可能还需要重新配置(但不是重新安装)GRUB。
因为我的 ext4 是 LVM,并且我没有在 UEFI 模式下运行 Live Disc,所以启动修复程序要求我向 /dev/sda3 添加 bios_grub 标志,我照做了(删除了 LVM 标志)。
这是你犯的第一个非常严重的错误。“bios_grub
标志”是一个分区类型代码,它告诉 GRUB 它可能使用该分区来存储其自身的一部分,而无需通过分区上的任何文件系统或 LVM。因此,一旦你进行了此更改并重新安装了 GRUB,GRUB 就会覆盖 LVM 的前几个扇区。LVM 的大部分数据仍然完好无损,你可以想象此时已经恢复了,尽管这可能很困难。但是然后......
我将标志重置为 LVM,并使用将文件系统重置为 ext4
mkfs.ext4 /dev/sda3
。
如果让 GRUB 将其自身写入 LVM 分区的第一个扇区是将数据扔进垃圾桶,那么此操作就是清洁工将垃圾运走。该mkfs
实用程序(及其所有“助手”,如mkfs.ext4
)并不像您想象的那样简单地告诉 Linux 文件系统类型是什么;它写入新的低级文件系统数据到磁盘。这有点像在一张纸上作画,以便可以重复使用它。
此时,如果您有良好的备份,恢复的可能性最大。如果是这样,我建议您从头开始重新安装 Ubuntu,并从备份中恢复您的个人数据。
如果您没有备份,您仍然有机会恢复某些内容,但这会很困难——有点像去城市垃圾场翻找垃圾。程序如下:
- 对磁盘进行低级备份,如
sudo dd if=/dev/sda of=/path/to/lots/of/disk/space/sda-backup.img
。您需要第二个比原始磁盘更大的磁盘(可在 处找到/path/to/lots/of/disk/space
)来存储备份。这样做的目的是在您犯更多错误时有一个恢复选项,此时这种情况很可能发生——以下某些操作可能会使情况变得更糟,这是无法避免的。 - 用于
gdisk
删除原磁盘上的分区。 - 使用测试磁盘尝试找到原始的 ext4 文件系统并在其周围构建新分区。请注意,据我所知,TestDisk 不知道 LVM,但它很有可能在文件系统周围创建一个“原始”(非 LVM)分区,前提是您在创建文件系统后没有扩大文件系统。请注意,TestDisk 可能会发现您创建的覆盖原始文件系统的文件系统,但由于您最初使用的是 LVM,因此新文件系统的起始点与原始文件系统并不相同,并且关键数据结构将相互偏移,因此 TestDisk可能能够找到足够的原始文件系统来访问它。
- 如果 TestDisk 成功,请
fsck
在生成的分区上运行。它很可能会遇到错误,您必须帮助它恢复。许多文件将被损坏。如果您能从该操作系统启动,我会感到震惊,但它可能足够完整,可以恢复至少一些您的个人文件。 - 如果 TestDisk 不成功,请使用相簿尝试恢复单个文件。这将是一个痛苦的过程,因为您需要检查每个文件才能弄清楚它是什么。
TestDisk 可能fsck
会造成进一步的损害。如果您怀疑发生了这种情况,您可以恢复备份。
祝您恢复顺利。恢复完成后,请使用您购买的新磁盘定期备份您的系统。