我只是不小心从错误的磁盘上擦除了所有分区。
/dev/sda
是启动磁盘,/dev/sdb
是我尝试设置为 RAID 镜像的新磁盘。
我不小心弄错了,结果删除了 上的分区表/dev/sda
,而不是/dev/sdb
。
系统仍在启动并运行,因此它正在某处运行缓存的分区表。
我可以恢复分区表,或者至少查看它,以便我可以准确地重新创建分区吗?
fdisk /dev/sda -l
不产生任何分区。
是的,我感觉很聪明
答案1
内核将分区表永久保留在缓存中(除非明确告知重新加载,并且如果某些分区正在使用则无法完成)。因此,在重新启动之前您是安全的(或者告诉内核对不反映真实磁盘内容的数据进行操作;例如,如果您已经激活了 mdraid,它可能已经将其元数据写入磁盘)。
如果你有一个最新备份您的引导扇区(前 512 字节),您可以恢复它(cat boot-sector-backup >/dev/sda
— 请检查您要恢复的文件的大小是否正好是 512 字节)。您的引导加载程序安装可能已创建引导扇区备份,但如果它已升级或此后您已重新分区,则它不会是最新的。不要恢复可能已过时的备份。
内核有关分区的信息可以通过 访问/sys/class/block/sda/sda*
。在每个分区的目录中(sda1
、sda2
等):
start
包含分区开头的偏移量(以 512 字节扇区为单位)。size
包含分区的大小,以 512 字节扇区为单位(扩展分区除外)。
如果您的分区编号为 5 或以上,则它们是逻辑分区(请参阅“扩展”分区和“逻辑”分区有什么区别),包含在扩展分区内。有一个扩展分区(或没有),它是分区 1-4 之一。该文件size
不包含扩展分区的大小,因此您首先需要确定;它必须足够大以容纳所有逻辑分区,并且不得包含任何主分区(编号为 1-4 的其他分区)。
跑步fdisk /dev/sda
。用于u
将单位切换为扇区。从扩展分区开始,创建具有正确偏移量和大小的分区 ( n
)(如提示所示,+
在涉及大小时将其放在扇区数之前)。
用于p
检查分区表是否正确。如果其中一些分区不是 Linux 数据分区,请用于t
设置其类型(82
对于 Linux 交换分区、c
对于 Windows FAT32 分区、7
对于 Windows NTFS 分区)。如果您有可启动的 DOS/Windows 分区,请设置其可启动标志 ( a
)。
仔细检查输出是否正常,然后按w
将新表提交到磁盘。
/sys/class/block/sda/ in a tar archive on a USB stick. Then reboot from a removable media. **After rebooting, if the partition table you created is not correct, you risk massive data corruption**. So from the removable media, run
保存fsck -n (don't forget the
-n mount`的内容) to check the consistency of the filesystems on each partition (don't use
,只有在偏移量正确时才有效,如果偏移量正确但大小不正确,则可能会损坏磁盘(即使在只读模式下,因为它会写入日志) )。
如果 fsck 找不到文件系统,则说明分区的偏移量错误。如果它报告错误,则很可能您的分区大小错误。只要你还没有写入磁盘,你仍然可以修复分区表。当磁盘上没有挂载分区时,按w
infdisk
将使内核重新读取分区表。一旦分区正确,您应该能够重新启动到正常系统并照常继续。
答案2
部分即使您已经重新启动,也应该对您有所帮助。