Data-Recovery

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

  • October 6, 2013

我已經通過點擊“設備->創建分區表…然後應用”使用 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

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

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

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

  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
/dev/sdc2 on /mnt/tmp type xfs (rw)
# 貓 /mnt/tmp/世界
你好

擦除分區表

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

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


命令(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/世界
你好

獲取偏移量

# cd /sys/class/block/sdc

#ls
alignment_offset device@ events_poll_msecs power/ ro slaves/
bdi@discard_alignment ext_range queue/sdc1/stat
能力事件持有者/範圍 sdc2/子系統@
dev events_async 飛行中可移動大小 uevent

# 貓 sdc1/開始
2048

# 貓 sdc1/大小
2097152

# 貓 sdc2/開始
2099200

# 貓 sdc2/大小
13539328

恢復分區表


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

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


命令(m 尋求幫助):n
分區類型:
p 主要(0 個主要,0 個擴展,4 個免費)
e 擴展
選擇(預設 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 個免費)
e 擴展
選擇(預設 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/世界
你好

引用自:https://unix.stackexchange.com/questions/93681