我已經使用 gparted 擦除了分割表,有辦法恢復我的分割區嗎?

我已經使用 gparted 擦除了分割表,有辦法恢復我的分割區嗎?

我已經通過單擊“設備->創建分區表...然後應用”使用 gparted 擦除了我的 NTFS (windows) 分區表,有沒有辦法恢復我的 NTFS 分區?

我嘗試使用此命令gpart /dev/sda 得到以下輸出:

Begin scan...
End scan.

Checking partitions...
Ok.

Guessed primary partition table:
Primary partition(1)
type: 000(0x00)(unused)
size: 0mb #s(0) s(0-0)
chs:  (0/0/0)-(0/0/0)d (0/0/0)-(0/0/0)r

Primary partition(2)
type: 000(0x00)(unused)
size: 0mb #s(0) s(0-0)
chs:  (0/0/0)-(0/0/0)d (0/0/0)-(0/0/0)r

Primary partition(3)
type: 000(0x00)(unused)
size: 0mb #s(0) s(0-0)
chs:  (0/0/0)-(0/0/0)d (0/0/0)-(0/0/0)r

Primary partition(4)
type: 000(0x00)(unused)
size: 0mb #s(0) s(0-0)
chs:  (0/0/0)-(0/0/0)d (0/0/0)-(0/0/0)r

這個輸出是什麼意思?我有辦法恢復嗎?

答案1

有可能恢復分區表,但需要滿足兩個條件:

  1. 您尚未重新啟動機器。
  2. 更換表時該驅動器正在使用中。

其工作原理是核心將分區佈局保留在記憶體中。如果一個分割區正在使用,它需要知道該分割區從哪裡開始,因此它將拒絕重新載入新表,直到它不再使用。

這個怎麼做:

/sys/block/sda。在其中您將看到每個分割區的目錄(sda1sda2等)。其中每個檔案內都有一個名為startand的檔案size(so /sys/block/sda/sda1/start)。如果您使用這些完全相同的起始位置和大小重新建立分區表,那就沒問題了。

請注意,它不保留分區類型。 Linux 不關心這些資訊。因此,重新建立後,您必須記住分割區類型設定為什麼(NTFS 或其他)。


例子

原盤:

# fdisk -l /dev/sdc

磁碟 /dev/sdc:8006 MB,8006926336 位元組,15638528 個磁區
單位 = 1 * 512 = 512 位元組的磁區
扇區大小(邏輯/物理):512 位元組/512 位元組
I/O 大小(最小/最佳):512 位元組/512 位元組
磁碟標識符:0x000ce29c

   裝置引導開始結束區塊 ID 系統
/dev/sdc1 2048 2099199 1048576 83 Linux
/dev/sdc2 2099200 15638527 6769664 83 Linux
# 掛載 | grep sdc
/mnt/tmp 上的 /dev/sdc2 類型 xfs (rw)
# 貓 /mnt/tmp/world
你好

擦除分區表

# fdisk /dev/sdc
歡迎使用 fdisk (util-linux 2.22.2)。

更改將僅保留在記憶體中,直到您決定寫入它們。
使用寫入命令之前請務必小心。


命令(m 尋求幫助):d
分區數量(1-4):1
分割區 1 已刪除

命令(m 尋求幫助):d
選定分區 2
分割區2被刪除

命令(m 尋求幫助):p

磁碟 /dev/sdc:8006 MB,8006926336 位元組,15638528 個磁區
單位 = 1 * 512 = 512 位元組的磁區
扇區大小(邏輯/物理):512 位元組/512 位元組
I/O 大小(最小/最佳):512 位元組/512 位元組
磁碟標識符:0x000ce29c

   裝置引導開始結束區塊 ID 系統

命令(m 尋求幫助):w
分區表已更改!

呼叫ioctl()重新讀取分割區表。

警告:重新讀取分區表失敗,錯誤為 16:設備或資源繁忙。
內核仍然使用舊表。新表將用於
下次重新啟動或執行partprobe(8) 或kpartx(8) 後
同步磁碟。

請注意,它仍然已安裝並且可以存取:

# 貓 /mnt/tmp/world
你好

取得偏移量

# cd /sys/class/block/sdc

# ls
alignment_offset 設備@ events_poll_msecs 功率/ ro 從站/
bdi@discard_alignment ext_range 佇列/ sdc1/ stat
能力事件持有者/範圍 sdc2/subsystem@
dev events_async inflight 可移動大小 uevent

# 貓 sdc1/開始
2048

# 貓 sdc1/尺寸
2097152

# 貓 sdc2/啟動
2099200

# 貓 sdc2/尺寸
13539328

復原分割區表

# fdisk /dev/sdc
歡迎使用 fdisk (util-linux 2.22.2)。

更改將僅保留在記憶體中,直到您決定寫入它們。
使用寫入命令之前請務必小心。


命令(m 尋求幫助):n
分區類型:
   p 主要(0 個主要、0 個擴充、4 個空閒)
   擴充
選擇(預設p):p
分區數量(1-4,預設1):1
第一區(2048-15638527,預設2048):2048
最後一個扇區,+sectors 或 +size{K,M,G}(2048-15638527,預設 15638527):+2097151
設定 Linux 類型且大小為 1 GiB 的分割區 1

命令(m 尋求幫助):n
分區類型:
   p 主要(1 個主要、0 個擴充、3 個免費)
   擴充
選擇(預設p):p
分區數量(1-4,預設2):2
第一區(2099200-15638527,預設2099200):2099200
最後一個扇區,+sectors 或 +size{K,M,G}(2099200-15638527,預設為 15638527):+13539327
設定 Linux 類型且大小為 6.5 GiB 的分割區 2

命令(m 尋求幫助):p

磁碟 /dev/sdc:8006 MB,8006926336 位元組,15638528 個磁區
單位 = 1 * 512 = 512 位元組的磁區
扇區大小(邏輯/物理):512 位元組/512 位元組
I/O 大小(最小/最佳):512 位元組/512 位元組
磁碟標識符:0x000ce29c

   裝置引導開始結束區塊 ID 系統
/dev/sdc1 2048 2099199 1048576 83 Linux
/dev/sdc2 2099200 15638527 6769664 83 Linux

命令(m 尋求幫助):w
分區表已更改!

呼叫ioctl()重新讀取分割區表。

警告:重新讀取分區表失敗,錯誤為 16:設備或資源繁忙。
內核仍然使用舊表。新表將用於
下次重新啟動或執行partprobe(8) 或kpartx(8) 後
同步磁碟。

!!請注意,在指定最後一個磁區時,我們使用大小 - 1。!!

確認

讓我們卸載驅動器,運行partprobe告訴內核獲取新表,然後重新安裝並驗證我們仍然可以訪問我們的文件。

#卸載/mnt/tmp/

# 部分探針/dev/sdc

# 掛載 /dev/sdc2 /mnt/tmp

# 貓 /mnt/tmp/world
你好

答案2

您可以嘗試使用測試磁碟來恢復分區表。 Testdisk 將讀取磁碟表面並嘗試確定分割區的開始和結束位置。

答案3

parted有一個救援命令,如果您知道檔案系統的大致位置,則可以嗅探檔案系統的起始位置和長度。

答案4

如果您碰巧知道 NTFS 磁碟的尺寸,您“可能”能夠使用 fdisk 或 parted 重置這些尺寸,但我認為您不走運。

相關內容