スーパーブロックとそのバックアップを失った ext4 ディスクにアクセスする

スーパーブロックとそのバックアップを失った ext4 ディスクにアクセスする

システムのディスクがおかしな状況になっていることに気付きました。Linux システムには、ブート、スワップ、ファイルシステム (ext4) の 3 つのパーティションがあります。数日前、読み取り不可能なディスクをチェックしたかったので、ペンドライブから knoppix を使用しました (自分で knoppix イメージから起動可能な USB ドライブを作成しました)。すると、読み取り不可能なディスクが 2 つあることがわかりました。

システムを再起動すると、次のようなエラーが画面に表示され始めました。

error: failure reading sector ... from 'hd0'.

そして、数回の試行を経て、GRUB シェルを取得しました。

  1. Linux Mint で別の起動可能なスティックを作成し、何が問題なのか確認してみました。
    「ディスク」ツールを使用してディスクをチェックすると、ディスクは正常だが 8 つの不良セクターがある (以前からあったかどうかはわかりません) と表示され、ファイルシステム パーティションはありましたが、データ パーティションのタイプは不明でした。

  2. testdisk を実行してみました。パーティションが見つかり、スーパーブロックをチェックしてファイルシステムの種類 (ext4) を設定すると、testdisk 自体からデータを見ることができましたが、パーティションをマウントできませんでした。

  3. Testdisk は e2fsck -p -b を実行するよう提案し、testdisk が提供したすべてのスーパーブロックで試してみましたが、fsck が何かを修正しようとするたびにディスク書き込みエラーで終了しました。
    この時点では遅かったので、その夜は諦めましたが、データはまだ読み取り可能であることに安心しました。

  4. 驚いたことに、翌日にはデータはもうありませんでした。おそらく、fsckの実行によって状況が悪化したのでしょう。testdiskはスーパーブロック番号を返さなくなったからです(そして、何を試してもtestdiskのファイルを見ることができませんでした)。また、以前に取得した番号(保存しておいた)でfsckを実行しても、Bad magic number in super-block while trying to open /dev/sda3番号に関係なく返されました。

  5. この時点で、私は safecopy でイメージを作成しました (最初に行うべきだったと認めますが、少しパニックになっていたのでそのことを考えませんでした)。そして、それを複製して、さまざまな解決策をテストできるようにしました。気に入らない点に到達するたびに、開始イメージから新しいコピーを作成しました。

  6. 私が試したことはすべて役に立ちませんでした。スーパーブロックのみを再構築するように、-S オプション付きの mkfs を使用するという提案を見つけましたが、それを試して、その後 fsck を実行したところ (ツールの提案どおり)、パーティションに再度アクセスできるようになりましたが、パーティションは完全に空でした。空っぽすぎて、photorec でもデータを見つけることができませんでした (mkfs + fsck を実行する前は、イメージ上でデータが見つかりました)。

イメージの 1 つで R-Linux を実行しましたが、何も回復できませんでした。$Inode... という名前の「ファイル」があるだけで、識別可能なファイルやディレクトリ構造はありませんでした。

これは、smartctl -a /dev/sda

smartctl 7.1 2019-12-30 r5022 [x86_64-linux-5.4.0-58-generic] (local build)
Copyright (C) 2002-19, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF INFORMATION SECTION ===
Model Family:     Toshiba 2.5" HDD MQ01ABD...
Device Model:     TOSHIBA MQ01ABD100
Serial Number:    95CEC91QT
LU WWN Device Id: 5 000039 683983c2b
Firmware Version: AX0R2J
User Capacity:    1,000,204,886,016 bytes [1.00 TB]
Sector Sizes:     512 bytes logical, 4096 bytes physical
Rotation Rate:    5400 rpm
Form Factor:      2.5 inches
Device is:        In smartctl database [for details use: -P show]
ATA Version is:   ATA8-ACS (minor revision not indicated)
SATA Version is:  SATA 3.0, 6.0 Gb/s (current: 3.0 Gb/s)
Local Time is:    Tue Jun  1 22:30:50 2021 CEST
SMART support is: Available - device has SMART capability.
SMART support is: Enabled

=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED

General SMART Values:
Offline data collection status:  (0x00) Offline data collection activity
                    was never started.
                    Auto Offline Data Collection: Disabled.
Self-test execution status:      (   0) The previous self-test routine completed
                    without error or no self-test has ever 
                    been run.
Total time to complete Offline 
data collection:        (  120) seconds.
Offline data collection
capabilities:            (0x5b) SMART execute Offline immediate.
                    Auto Offline data collection on/off support.
                    Suspend Offline collection upon new
                    command.
                    Offline surface scan supported.
                    Self-test supported.
                    No Conveyance Self-test supported.
                    Selective Self-test supported.
SMART capabilities:            (0x0003) Saves SMART data before entering
                    power-saving mode.
                    Supports SMART auto save timer.
Error logging capability:        (0x01) Error logging supported.
                    General Purpose Logging supported.
Short self-test routine 
recommended polling time:    (   2) minutes.
Extended self-test routine
recommended polling time:    ( 246) minutes.
SCT capabilities:          (0x003d) SCT Status supported.
                    SCT Error Recovery Control supported.
                    SCT Feature Control supported.
                    SCT Data Table supported.

SMART Attributes Data Structure revision number: 16
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  1 Raw_Read_Error_Rate     0x000b   100   100   050    Pre-fail  Always       -       0
  2 Throughput_Performance  0x0005   100   100   050    Pre-fail  Offline      -       0
  3 Spin_Up_Time            0x0027   100   100   001    Pre-fail  Always       -       1815
  4 Start_Stop_Count        0x0032   100   100   000    Old_age   Always       -       1377
  5 Reallocated_Sector_Ct   0x0033   100   100   050    Pre-fail  Always       -       8
  7 Seek_Error_Rate         0x000b   100   100   050    Pre-fail  Always       -       0
  8 Seek_Time_Performance   0x0005   100   100   050    Pre-fail  Offline      -       0
  9 Power_On_Hours          0x0032   053   053   000    Old_age   Always       -       19115
 10 Spin_Retry_Count        0x0033   127   100   030    Pre-fail  Always       -       0
 12 Power_Cycle_Count       0x0032   100   100   000    Old_age   Always       -       1368
191 G-Sense_Error_Rate      0x0032   100   100   000    Old_age   Always       -       275
192 Power-Off_Retract_Count 0x0032   100   100   000    Old_age   Always       -       50
193 Load_Cycle_Count        0x0032   100   100   000    Old_age   Always       -       4455
194 Temperature_Celsius     0x0022   100   100   000    Old_age   Always       -       30 (Min/Max 13/49)
196 Reallocated_Event_Count 0x0032   100   100   000    Old_age   Always       -       1
197 Current_Pending_Sector  0x0032   100   100   000    Old_age   Always       -       0
198 Offline_Uncorrectable   0x0030   100   100   000    Old_age   Offline      -       0
199 UDMA_CRC_Error_Count    0x0032   200   200   000    Old_age   Always       -       1
220 Disk_Shift              0x0002   100   100   000    Old_age   Always       -       0
222 Loaded_Hours            0x0032   053   053   000    Old_age   Always       -       18889
223 Load_Retry_Count        0x0032   100   100   000    Old_age   Always       -       0
224 Load_Friction           0x0022   100   100   000    Old_age   Always       -       0
226 Load-in_Time            0x0026   100   100   000    Old_age   Always       -       265
240 Head_Flying_Hours       0x0001   100   100   001    Pre-fail  Offline      -       0

SMART Error Log Version: 1
ATA Error Count: 2032 (device log contains only the most recent five errors)
    CR = Command Register [HEX]
    FR = Features Register [HEX]
    SC = Sector Count Register [HEX]
    SN = Sector Number Register [HEX]
    CL = Cylinder Low Register [HEX]
    CH = Cylinder High Register [HEX]
    DH = Device/Head Register [HEX]
    DC = Device Command Register [HEX]
    ER = Error register [HEX]
    ST = Status register [HEX]
Powered_Up_Time is measured from power on, and printed as
DDd+hh:mm:SS.sss where DD=days, hh=hours, mm=minutes,
SS=sec, and sss=millisec. It "wraps" after 49.710 days.

Error 2032 occurred at disk power-on lifetime: 19112 hours (796 days + 8 hours)
  When the command that caused the error occurred, the device was active or idle.

  After command completion occurred, registers were:
  ER ST SC SN CL CH DH
  -- -- -- -- -- -- --
  40 41 38 00 d8 16 40  Error: UNC at LBA = 0x0016d800 = 1497088

  Commands leading to the command that caused the error were:
  CR FR SC SN CL CH DH DC   Powered_Up_Time  Command/Feature_Name
  -- -- -- -- -- -- -- --  ----------------  --------------------
  60 08 38 00 d8 16 40 00   1d+05:06:46.679  READ FPDMA QUEUED
  ef 10 03 00 00 00 a0 00   1d+05:06:46.678  SET FEATURES [Enable SATA feature]
  ef 10 02 00 00 00 a0 00   1d+05:06:46.678  SET FEATURES [Enable SATA feature]
  27 00 00 00 00 00 e0 00   1d+05:06:46.678  READ NATIVE MAX ADDRESS EXT [OBS-ACS-3]
  ec 00 00 00 00 00 a0 00   1d+05:06:46.677  IDENTIFY DEVICE

Error 2031 occurred at disk power-on lifetime: 19112 hours (796 days + 8 hours)
  When the command that caused the error occurred, the device was active or idle.

  After command completion occurred, registers were:
  ER ST SC SN CL CH DH
  -- -- -- -- -- -- --
  40 41 68 00 d8 16 40  Error: UNC at LBA = 0x0016d800 = 1497088

  Commands leading to the command that caused the error were:
  CR FR SC SN CL CH DH DC   Powered_Up_Time  Command/Feature_Name
  -- -- -- -- -- -- -- --  ----------------  --------------------
  60 08 68 00 d8 16 40 00   1d+05:06:45.909  READ FPDMA QUEUED
  e5 00 00 00 00 00 00 00   1d+05:06:45.669  CHECK POWER MODE
  e5 00 00 00 00 00 00 00   1d+05:06:40.669  CHECK POWER MODE
  e5 00 00 00 00 00 00 00   1d+05:06:35.670  CHECK POWER MODE
  e5 00 00 00 00 00 00 00   1d+05:06:30.669  CHECK POWER MODE

Error 2030 occurred at disk power-on lifetime: 19110 hours (796 days + 6 hours)
  When the command that caused the error occurred, the device was active or idle.

  After command completion occurred, registers were:
  ER ST SC SN CL CH DH
  -- -- -- -- -- -- --
  40 41 30 00 d8 16 40  Error: UNC at LBA = 0x0016d800 = 1497088

  Commands leading to the command that caused the error were:
  CR FR SC SN CL CH DH DC   Powered_Up_Time  Command/Feature_Name
  -- -- -- -- -- -- -- --  ----------------  --------------------
  60 00 00 e8 fd de 40 00   1d+02:46:45.118  READ FPDMA QUEUED
  60 00 f8 e8 fc de 40 00   1d+02:46:45.117  READ FPDMA QUEUED
  60 00 b8 e8 fb de 40 00   1d+02:46:45.116  READ FPDMA QUEUED
  60 00 b0 e8 fa de 40 00   1d+02:46:45.116  READ FPDMA QUEUED
  60 00 a8 e8 f9 de 40 00   1d+02:46:45.115  READ FPDMA QUEUED

Error 2029 occurred at disk power-on lifetime: 19110 hours (796 days + 6 hours)
  When the command that caused the error occurred, the device was active or idle.

  After command completion occurred, registers were:
  ER ST SC SN CL CH DH
  -- -- -- -- -- -- --
  40 41 a0 00 d8 16 40  Error: UNC at LBA = 0x0016d800 = 1497088

  Commands leading to the command that caused the error were:
  CR FR SC SN CL CH DH DC   Powered_Up_Time  Command/Feature_Name
  -- -- -- -- -- -- -- --  ----------------  --------------------
  60 00 08 e8 f8 de 40 00   1d+02:46:44.968  READ FPDMA QUEUED
  60 00 00 e8 f7 de 40 00   1d+02:46:44.968  READ FPDMA QUEUED
  60 00 f0 e8 f6 de 40 00   1d+02:46:44.966  READ FPDMA QUEUED
  60 00 e8 e8 f5 de 40 00   1d+02:46:44.965  READ FPDMA QUEUED
  60 00 e0 e8 f4 de 40 00   1d+02:46:44.964  READ FPDMA QUEUED

Error 2028 occurred at disk power-on lifetime: 19110 hours (796 days + 6 hours)
  When the command that caused the error occurred, the device was active or idle.

  After command completion occurred, registers were:
  ER ST SC SN CL CH DH
  -- -- -- -- -- -- --
  40 41 88 00 d8 16 40  Error: UNC at LBA = 0x0016d800 = 1497088

  Commands leading to the command that caused the error were:
  CR FR SC SN CL CH DH DC   Powered_Up_Time  Command/Feature_Name
  -- -- -- -- -- -- -- --  ----------------  --------------------
  60 00 a0 e8 e8 de 40 00   1d+02:46:44.792  READ FPDMA QUEUED
  60 00 98 e8 e7 de 40 00   1d+02:46:44.791  READ FPDMA QUEUED
  60 00 90 e8 e6 de 40 00   1d+02:46:44.788  READ FPDMA QUEUED
  60 00 78 e8 e5 de 40 00   1d+02:46:44.787  READ FPDMA QUEUED
  60 00 70 e8 e4 de 40 00   1d+02:46:44.786  READ FPDMA QUEUED

SMART Self-test log structure revision number 1
No self-tests have been logged.  [To run self-tests, use: smartctl -t]

SMART Selective self-test log data structure revision number 1
 SPAN  MIN_LBA  MAX_LBA  CURRENT_TEST_STATUS
    1        0        0  Not_testing
    2        0        0  Not_testing
    3        0        0  Not_testing
    4        0        0  Not_testing
    5        0        0  Not_testing
Selective self-test flags (0x0):
  After scanning selected spans, do NOT read-scan remainder of disk.
If Selective self-test is pending on power-up, resume after 0 minute delay.

答え1

結局、USB スティックからライブ バージョンを使用したときに Knoppix がパーティション テーブルを台無しにしてしまったことに気付きました。ディスクは実際には正常でした (一部の不良セクタを除く)。適切なパーティションを回復するためにさまざまな方法を試しましたが、役に立ちませんでした。
質問といくつかのコメントで述べたように、mkfs を使用すると、パーティションをマウントし直すことができましたが、データは失われ、どうやらこれがスーパーブロックを再構築する唯一の方法のようですが、適切な方法を見つけることができませんでした。

2 週間の試行錯誤の後、必要な重要なデータはすべてリポジトリ内に保存されているため、すべてをフォーマットして最初からやり直すことにしました。

答え2

盲目的に何かを行う前に、必ずドキュメントを読んでください。その後に実行する必要があることを示すフラグman mkfs.ext4を検索してください。-Se2fsck

ディスクの保存コピーに書き込んだ場合、これももうダメになっていると思われます。ディスク回復のルール 1 は、できるだけ早くコピーを取ることです。ルール 2 は、保存コピーに決して書き込まないことです。

一つ気づいたのは、ディスク(/dev/sda)とパーティション(/dev/sda3)を混同しているということです。実行したと確信しているところでは、mkfs -S /dev/sdaパーティションではなくディスク上のファイルシステムを再作成しようとしています。パーティションテーブルを復元できる場合は、かもしれない正常に実行できるmkfs -S /dev/sda3。またはループデバイスを介して同等のもの。

注意: 故障したディスクと唯一保存したコピーの両方に書き込まないでください。コピーの新しいコピーを作成して、それに対して作業してください。

関連情報