Linux

作業系統升級後未檢測到文件系統 - 我該如何調試?

  • May 10, 2015

我有一台電腦,裡面有兩個硬碟。一個帶有作業系統和一大堆其他東西;另一個安裝在 /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 那樣簡單。

在任何情況下,如果您想恢復該磁碟上的內容,最好從它創建一個映像,並且只在該映像上工作,這樣您就不會冒失去更多數據的風險。有關如何執行此操作的一些建議,請參閱從故障驅動器中保存數據。

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