我只是不小心從錯誤的磁碟上擦除了所有分割區。
/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
部分即使您已經重新啟動,也應該對您有所幫助。