Data-Recovery
我已經使用 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
這個輸出是什麼意思?有什麼辦法可以恢復嗎?
您可以嘗試使用testdisk來恢復分區表。Testdisk 將讀取磁碟表面並嘗試確定分區的開始和結束位置。
分區表有恢復的可能,但需要滿足兩個條件:
- 您尚未重新啟動電腦。
- 更改表時驅動器正在使用中。
其工作原理是核心將分區佈局保存在記憶體中。如果一個分區正在使用中,它需要知道分區從哪裡開始,所以它會拒絕重新載入新表,直到不再使用。
這該怎麼做:
去
/sys/block/sda
。在那裡,您將看到每個分區的目錄(sda1
、sda2
等)。每個里面都有一個名為start
andsize
(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/世界 你好