問題階段
起因:
昨天晚上思路不是很清晰(上了一天班回來有點蒙),還是強忍着疲憊想搞事情,結果悲劇了… …
本來想拿SD卡做一張linux燒錄卡,燒錄腳本是很久以前寫的,有git記錄,一直不成功,就回退了幾次提交,然后執行的時候沒有給腳本傳參(/dev/sd**),結果腳本中默認磁盤設備為/dev/sdb ,在現在電腦上是一塊數據磁盤,執行到一半的時候由於某些原因意外退出,但還是有一些命令執行,比如最致命的一條: dd if=/dev/zero of=${node} bs=1024 count=1 conv=fsync conv=notrunc
node指向的就是/dev/sdb
然后把LVM2 label、meta data、分區表都給刪除了,由於此硬盤在/etc/fstab中有記錄,所以今天開機有卡主了,開始以為磁盤接觸不良,進入linux recovery模式屏蔽掉fstab中相關選項后進入系統. ls -l /dev/sd* 發現只有/dev/sdb 沒有分區信息,接着執行fdisk /dev/sdb, p打印信息 Command (m for help): p
Disk /dev/sdb: 465.8 GiB, 500107862016 bytes, 976773168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: dos
Disk identifier: 0x*********
同樣沒有分區信息,回想昨晚的操作,終於……(一身冷汗)
處理過程
冷汗過后就需要冷靜的思考,既然只是刪除了磁盤的頭信息,那么分區實際上還是存在的,而且數據也應該完好的存在.
嘗試一:
首先找到一篇lvm數據恢復的文章,PC 上的 LVM 災難修復,雖然文章中類似情景,但是恢復的時候需要/etc/lvm/backup/
中有對應的lvm備份信息,而我的磁盤但是不是在現在的機器分的所以沒有相應信息. 文章至少透露出一個重要信息,可以恢復,應該直接恢復出分區表即可.
還有一篇文章跟上面一篇很像:一次Linux LVM VG丟失完整找回過程記錄
嘗試二:
掛載到windwos上用diskgenius掃描分區表,能夠看到一些零星的數據,但都是亂碼.當時心又亮了一截, 此路不通.
嘗試三:
直接查找linux的數據恢復軟件,最終找到一款靠譜的:testdisk 官方文檔
簡單介紹:
它不能從故障的存儲設備上拷貝數據,相反,它可以解決一些因為分區的原因而 造成數據無法訪問的問題。該工具可以幫助你恢復丟失的分區,讓磁盤重新變得可以啟動,整理分區表,恢復主引導記錄,恢復引導扇區以及文件系統表,可以從 NTFS、FAT、exFAT和ext2類型的文件系統中恢復被刪除的文件,還能從已經刪除了的NTFS、FAT、exFAT和ext2/3/4文件系統 中拷貝文件。
嘗試:
testdisk /dev/sdb
選擇硬盤后回車: Select a media (use Arrow keys, then press Enter):
Disk /dev/sdb - 500 GB / 465 GiB - *******************
選擇分區: Please select the partition table type, press Enter when done.
[Intel ] Intel/PC partition
[EFI GPT] EFI GPT partition map (Mac i386, some x86_64...)
[Humax ] Humax partition table
[Mac ] Apple partition map
[None ] Non partitioned media
[Sun ] Sun Solaris partition
[XBox ] XBox partition
[Return ] Return to disk selection
選擇[Intel ] Intel/PC partition
選擇動作: [ Analyse ] Analyse current partition structure and search for lost partitions
[ Advanced ] Filesystem Utils
[ Geometry ] Change disk geometry
[ Options ] Modify options
[ MBR Code ] Write TestDisk MBR code to first sector
[ Delete ] Delete all data in the partition table
[ Quit ] Return to disk selection
這里選擇[ Analyse ] Analyse current partition structure and search for lost partitions
過一會會顯示掃描到分區表信息,選擇寫入到磁盤,然后提示重啟電腦(其實就是重新加載硬盤).
懷着一顆忐忑的新重啟后驚喜的發現,分區已經恢復,檢查數據一切正常:
`Command (m for help): p
Disk /dev/sdb: 465.8 GiB, 500107862016 bytes, 976773168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: dos
Disk identifier: 0x*********
Device Boot Start End Sectors Size Id Type
/dev/sdb1 * ####### ####### ####### xxG 83 Linux
/dev/sdb2 ####### ####### ####### xxG 83 Linux
/dev/sdb3 ####### ####### ####### xxG 7 exFAT
`
遇事冷靜思考,尋找最優解決方案.