作業系統升級後未檢測到文件系統 - 我該如何調試?
我有一台電腦,裡面有兩個硬碟。一個帶有作業系統和一大堆其他東西;另一個安裝在 /media 作為轉儲空間,用於額外的 TB 儲存空間。最近,我將系統從 Ubuntu Maverick 升級到 Debian Jessie,這涉及到刪除一堆不兼容的包和安裝更多的包,並且可能有損壞的東西;硬碟驅動器也有可能快死了,當我重新啟動時,它決定放棄。
這個驅動器上沒有什麼是絕對重要的,但我想檢索它而不是重建它——而且,我更願意知道出了什麼問題,而不是僅僅掩蓋問題並繼續前進。所以我要的是關於如何調試一個奇怪的硬碟驅動器故障的建議,其中硬碟驅動器的文件系統不再被辨識。如果問題在這裡不合適,我深表歉意,並將我重定向到一個更好的地方!
在升級之前,主驅動器是(我相信)/dev/sda,輔助驅動器是 /dev/sdb。現在,它們顯示為:
$ sudo parted -l Model: ATA WDC WD1002FAEX-0 (scsi) Disk /dev/sda: 1000GB Sector size (logical/physical): 512B/512B Partition Table: msdos Disk Flags: Number Start End Size Type File system Flags 1 32.3kB 1000GB 1000GB primary Model: ATA ST31000333AS (scsi) Disk /dev/sdb: 1000GB Sector size (logical/physical): 512B/512B Partition Table: msdos Disk Flags: Number Start End Size Type File system Flags 1 1049kB 997GB 997GB primary ext4 boot 2 997GB 1000GB 3143MB extended 5 997GB 1000GB 3143MB logical linux-swap(v1)
請注意,/dev/sdb 上的文件系統正確顯示(大部分 TB 為 ext4、可引導和 3GB 交換分區),並且 /dev/sda 上的分區很可能是正確的(儘管我沒有預先升級分區表轉儲),但沒有列出文件系統。
嘗試 fsck /dev/sda1 會產生此錯誤:
$ sudo fsck /dev/sda1 fsck from util-linux 2.25.2 e2fsck 1.42.12 (29-Aug-2014) ext2fs_open2: Bad magic number in super-block fsck.ext2: Superblock invalid, trying backup blocks... fsck.ext2: Bad magic number in super-block while trying to open /dev/sda1 The superblock could not be read or does not describe a valid ext2/ext3/ext4 filesystem. If the device is valid and it really contains an ext2/ext3/ext4 filesystem (and not swap or ufs or something else), then the superblock is corrupt, and you might try running e2fsck with an alternate superblock: e2fsck -b 8193 <device> or e2fsck -b 32768 <device>
可能的超級塊選項列表沒有產生有用的結果,但我想知道是否可能存在分區表偏移量。有沒有辦法搜尋有效的超級塊?
另外,我不能 100% 確定這是一個 ext3/ext4 文件系統。我可能使用了不同的文件系統,但我不知道是什麼。有什麼方法可以探索分區並弄清楚它將使用什麼,以便我可以安裝額外的文件系統驅動程序?
任何指針都會有所幫助。謝謝!
編輯:doktor5000 建議我抓住 testdisk 看看它說什麼。
Disk /dev/sda - 1000 GB / 931 GiB - CHS 121601 255 63 Current partition structure: Partition Start End Size in sectors No ext2, JFS, Reiser, cramfs or XFS marker 1 P Linux 0 1 1 121600 254 63 1953520002 1 P Linux 0 1 1 121600 254 63 1953520002 No partition is bootable
選擇“快速搜尋”會產生以下結果:
Disk /dev/sda - 1000 GB / 931 GiB - CHS 121601 255 63 Partition Start End Size in sectors >* Linux 0 32 33 118619 237 18 1905627136 P Linux Swap 118620 14 51 121601 57 56 47892480
我之前忘記引用 fdisk 所說的話,所以這裡是:
$ sudo fdisk /dev/sda -l Disk /dev/sda: 931.5 GiB, 1000204886016 bytes, 1953525168 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x000a56a5 Device Boot Start End Sectors Size Id Type /dev/sda1 63 1953520064 1953520002 931.5G 83 Linux
所以,我看到的差異是:fdisk 認為分區從 63 開始,但 testdisk 說 32(我認為);並且 testdisk 說那裡有一個交換分區,這對我來說沒有意義(它是一個輔助驅動器,我不知道為什麼我會分配任何交換空間)。但是,酷酷的,我可以深入文件系統並複製文件!與我上次嘗試磁碟恢復時所必須使用的相比,這真是太棒了——但是,那是在 1990 年代使用 OS/2 時的情況,所以這並不奇怪 :)
我有足夠的信心讓 testdisk 寫出一個新的分區表。是的!所有數據都在那裡並且可讀,驅動器似乎工作正常。非常感謝,doktor5000!那麼,後續問題……知道分區表是如何損壞的嗎?
最明顯的是通過testdisk對分區進行深度搜尋。
請參閱他們關於如何執行它的一般指南和/或分步文件
然後將 testdisk 找到的分區表與您目前看到的進行比較,無需更改任何內容,並可能將其發佈在這裡。
另一種選擇,至少對於 ext2/3/4 來說是使用debugfs 命令,但這更複雜,不像 testdisk 那樣簡單。
在任何情況下,如果您想恢復該磁碟上的內容,最好從它創建一個映像,並且只在該映像上工作,這樣您就不會冒失去更多數據的風險。有關如何執行此操作的一些建議,請參閱從故障驅動器中保存數據。