我已經通過單擊“設備->創建分區表...然後應用”使用 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
有可能恢復分區表,但需要滿足兩個條件:
- 您尚未重新啟動機器。
- 更換表時該驅動器正在使用中。
其工作原理是核心將分區佈局保留在記憶體中。如果一個分割區正在使用,它需要知道該分割區從哪裡開始,因此它將拒絕重新載入新表,直到它不再使用。
這個怎麼做:
去/sys/block/sda
。在其中您將看到每個分割區的目錄(sda1
、sda2
等)。其中每個檔案內都有一個名為start
and的檔案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 重置這些尺寸,但我認為您不走運。