不小心刪除了啟動磁碟上的分割區。系統仍在運作。我怎樣才能恢復?

不小心刪除了啟動磁碟上的分割區。系統仍在運作。我怎樣才能恢復?

我只是不小心從錯誤的磁碟上擦除了所有分割區。

/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*。在每個分區的目錄中(sda1sda2等):

  • 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 找不到檔案系統,則表示分割區的偏移量錯誤。如果它報告錯誤,則很可能您的分割區大小錯誤。只要你還沒有寫入磁碟,你仍然可以修復分割區表。當磁碟上沒有掛載分割區時,按winfdisk將使核心重新讀取分割區表。一旦分割區正確,您應該能夠重新啟動到正常系統並照常繼續。

答案2

部分即使您已經重新啟動,也應該對您有所幫助。

相關內容