슈퍼블록과 해당 백업이 손실된 ext4 디스크에 액세스

슈퍼블록과 해당 백업이 손실된 ext4 디스크에 액세스

내 시스템 디스크에 이상한 상황이 발생했습니다. 이는 부팅, 스왑 및 파일 시스템(ext4)의 3개 파티션이 있는 Linux 시스템입니다. 며칠 전 나는 읽을 수 없는 디스크를 확인하고 싶었기 때문에 펜드라이브에서 knoppix를 사용했습니다. (knoppix 이미지에서 부팅 가능한 USB 드라이브를 직접 만들었습니다.) 읽을 수 없는 디스크가 2개 있었습니다!

시스템을 재부팅했을 때 화면에 다음과 같은 오류가 나타나기 시작했습니다.

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

그리고 몇 번의 시도 끝에 그럽 쉘을 얻었습니다.

  1. 나는 Linux Mint를 사용하여 또 다른 부팅 가능한 스틱을 만들었고 무엇이 잘못되었는지 확인하려고 했습니다.
    "디스크" 도구를 사용하여 디스크를 검사할 때 디스크는 정상이지만 8개의 불량 섹터가 있다고 나와 있고(이전에도 있었는지 확실하지 않음) 파일 시스템 파티션은 있었지만 데이터 파티션의 유형을 알 수 없었습니다.

  2. testdisk를 실행해 보았습니다. 파티션을 찾았고 슈퍼 블록을 확인하고 파일 시스템 유형(ext4)을 설정하면 테스트 디스크 자체의 데이터를 볼 수 있지만 여전히 파티션을 마운트할 수 없습니다.

  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를 실행하기 전에 이미지에서 데이터를 찾습니다).

이미지 중 하나에서 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그리고 깃발을 찾으면 나중에 -S달려야 한다고 알려줄 것입니다 e2fsck.

저장된 디스크 사본에 글을 썼다면 이 디스크도 이제 죽은 것 같습니다. 디스크 복구의 규칙 1은 가능한 한 빨리 복사본을 만드는 것입니다. 규칙 2는 절대로 저장된 사본에 쓰지 않는 것입니다.

제가 발견한 한 가지는 디스크( /dev/sda)와 파티션( /dev/sda3)을 혼동하고 있다는 것입니다. 확실히 실행한 곳에서는 mkfs -S /dev/sda파티션이 아닌 디스크에 파일 시스템을 다시 생성하려고 시도했습니다. 파티션 테이블을 복원할 수 있는 경우~할 것 같다성공적 으로 실행할 수 있습니다 mkfs -S /dev/sda3. 또는 루프 장치를 통한 등가물.

참고: 더 이상 죽어가는 디스크와 유일하게 저장된 복사본에 모두 쓰기를 시도하지 마십시오. 사본의 새로운 사본을 가지고 작업하십시오.

관련 정보