您可以从标题猜出我是个白痴。我对 USB 密钥感到愤怒,并尝试使用dd
和 /null 格式化其分区,但我却删除了我的sda1
和sda2
分区。
我很快意识到了自己的错误并且没有关闭计算机,所以我的操作系统仍在运行。
现在只有我的sda3
brw-rw---- 1 root disk 8, 0 Jun 6 19:40 /dev/sda
brw-rw---- 1 root disk 8, 3 Jun 6 19:40 /dev/sda3
如果我cat
得到fstab
# <file system> <mount point> <type> <options> <dump> <pass>
/dev/mapper/mint--vg-root / ext4 errors=remount-ro 0 1
# /boot was on /dev/sda2 during installation
UUID=f16adf40-841d-48de-afb6-bdbe66bd6eae /boot ext2 defaults 0 2
# /boot/efi was on /dev/sda1 during installation
UUID=2008-2EBF /boot/efi vfat umask=0077 0 1
/dev/mapper/mint--vg-swap_1 none swap sw 0 0
我必须说我有点迷茫,还不太明白 UEFI、GRUB 是如何工作的,以及如何fstab
工作的。
如果我这样做ll /boot
它就不为空:
-rw-r--r-- 1 root root 1249214 Dec 11 15:36 abi-4.4.0-104-generic
-rw-r--r-- 1 root root 1243479 Dec 2 2016 abi-4.4.0-53-generic
-rw-r--r-- 1 root root 190517 Dec 11 15:36 config-4.4.0-104-generic
-rw-r--r-- 1 root root 189877 Dec 2 2016 config-4.4.0-53-generic
drwxr-xr-x 2 root root 1024 Jun 23 2017 efi/
drwxr-xr-x 5 root root 1024 Apr 17 23:05 grub/
-rw-r--r-- 1 root root 48667470 Apr 18 07:27 initrd.img-4.4.0-104-generic
-rw-r--r-- 1 root root 48377536 Jan 6 14:59 initrd.img-4.4.0-53-generic
drwx------ 2 root root 12288 Jun 23 2017 lost+found/
-rw-r--r-- 1 root root 182704 Jan 28 2016 memtest86+.bin
-rw-r--r-- 1 root root 184380 Jan 28 2016 memtest86+.elf
-rw-r--r-- 1 root root 184840 Jan 28 2016 memtest86+_multiboot.bin
-rw------- 1 root root 3887726 Dec 11 15:36 System.map-4.4.0-104-generic
-rw------- 1 root root 3874377 Dec 2 2016 System.map-4.4.0-53-generic
-rw------- 1 root root 7104112 Dec 11 15:36 vmlinuz-4.4.0-104-generic
-rw-r--r-- 1 root root 7065648 Dec 13 2016 vmlinuz-4.4.0-53-generic
但ll /boot/efi
却是空的。
我是否需要重新安装或重新创建 2 个分区sda1
?sda2
我可以下载 EFI 吗?我该怎么办?
答案1
人们分为两类。一类正在备份。另一类已经在备份。我相信你已经备份了。
您需要通过交互方式重新创建分区表fdisk
如果您的操作系统仍在运行,您可能会从内核内存中获取分区边界。
下面是我的工作系统 (带有 UEFI 的 RHEL7) 中的一个示例:
# fdisk -l /dev/sda
Disk /dev/sda: 300.0 GB, 299966445568 bytes, 585871964 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 262144 bytes / 262144 bytes
Disk label type: dos
Disk identifier: 0x000a146c
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 526335 262144 83 Linux
/dev/sda2 526336 1050623 262144 6 FAT16
/dev/sda3 1050624 585871359 292410368 8e Linux LVM
你有丢失的 /dev/sda1 和 /dev/sda2 信息,下面是恢复的方法。找到有边界信息的文件:
# find /sys -name start
/sys/devices/pci0000:00/0000:00:02.2/0000:03:00.0/host0/target0:1:0/0:1:0:0/block/sda/sda1/start
/sys/devices/pci0000:00/0000:00:02.2/0000:03:00.0/host0/target0:1:0/0:1:0:0/block/sda/sda2/start
/sys/devices/pci0000:00/0000:00:02.2/0000:03:00.0/host0/target0:1:0/0:1:0:0/block/sda/sda3/start
....
sda1
从内核内存启动分区块
# cat /sys/devices/pci0000:00/0000:00:02.2/0000:03:00.0/host0/target0:1:0/0:1:0:0/block/sda/sda1/start
2048
sda1
内核内存分区的结束块
echo end $((
$(cat /sys/devices/pci0000:00/0000:00:02.2/0000:03:00.0/host0/target0:1:0/0:1:0:0/block/sda/sda1/size) \
+ \
$(cat /sys/devices/pci0000:00/0000:00:02.2/0000:03:00.0/host0/target0:1:0/0:1:0:0/block/sda/sda1/start) \
- 1 \
))
end 526335
sda2
从内核内存启动分区块
# cat /sys/devices/pci0000:00/0000:00:02.2/0000:03:00.0/host0/target0:1:0/0:1:0:0/block/sda/sda2/start
526336
sda2
内核内存分区的结束块
echo end $((\
$(cat /sys/devices/pci0000:00/0000:00:02.2/0000:03:00.0/host0/target0:1:0/0:1:0:0/block/sda/sda2/size)\
+ \
$(cat /sys/devices/pci0000:00/0000:00:02.2/0000:03:00.0/host0/target0:1:0/0:1:0:0/block/sda/sda2/start)\
- 1 \
))
end 1050623
现在您需要使用交互式方式重新创建具有此边界的丢失分区fdisk
。不要忘记设置分区类型。
恢复分区后,您需要检查其文件系统。您写道,/boot/efi 是空的,但只有在您不使用 UEFI 的情况下它才应该是空的。您可以尝试通过重新安装grub2-efi-x64
软件包来恢复它。
看这主题继续恢复。
答案2
我修复了我的错误。我首先保存了对我来说重要的所有内容,并创建了一个 USB 可启动文件以防万一。然后我使用了 testDisk,由于我的分区没有被覆盖,因此我通过快速搜索(UEFI sda1 和 swupdate sda2)毫无问题地恢复了分区表和数据。我最终检查了它是否与 gparted 配合使用,然后重新启动了我的系统。
供您参考,请不要使用 testDisk 对您的磁盘和磁盘进行深度搜索,它会出现错误并告诉您它没有足够的空间。
谢天谢地,一切都好。谢谢大家的帮助。