내 시스템 디스크에 이상한 상황이 발생했습니다. 이는 부팅, 스왑 및 파일 시스템(ext4)의 3개 파티션이 있는 Linux 시스템입니다. 며칠 전 나는 읽을 수 없는 디스크를 확인하고 싶었기 때문에 펜드라이브에서 knoppix를 사용했습니다. (knoppix 이미지에서 부팅 가능한 USB 드라이브를 직접 만들었습니다.) 읽을 수 없는 디스크가 2개 있었습니다!
시스템을 재부팅했을 때 화면에 다음과 같은 오류가 나타나기 시작했습니다.
error: failure reading sector ... from 'hd0'.
그리고 몇 번의 시도 끝에 그럽 쉘을 얻었습니다.
나는 Linux Mint를 사용하여 또 다른 부팅 가능한 스틱을 만들었고 무엇이 잘못되었는지 확인하려고 했습니다.
"디스크" 도구를 사용하여 디스크를 검사할 때 디스크는 정상이지만 8개의 불량 섹터가 있다고 나와 있고(이전에도 있었는지 확실하지 않음) 파일 시스템 파티션은 있었지만 데이터 파티션의 유형을 알 수 없었습니다.testdisk를 실행해 보았습니다. 파티션을 찾았고 슈퍼 블록을 확인하고 파일 시스템 유형(ext4)을 설정하면 테스트 디스크 자체의 데이터를 볼 수 있지만 여전히 파티션을 마운트할 수 없습니다.
Testdisk는 e2fsck -p -b를 실행할 것을 제안했고 testdisk가 제공한 모든 슈퍼블록을 사용해 시도했지만 fsck가 문제를 해결하려고 할 때마다 디스크 쓰기 오류로 끝났습니다.
이 시점에는 시간이 늦어서 밤을 보내기로 포기했지만 데이터를 여전히 읽을 수 있다는 점에서 다소 안심이 되었습니다.놀랍게도 다음 날 데이터는 더 이상 존재하지 않았습니다. 아마도 fsck를 실행하면 testdisk가 더 이상 슈퍼 블록 번호를 제공하지 않기 때문에 상황이 더욱 악화되었을 것입니다(그리고 무엇을 시도하더라도 testdisk의 파일을 더 이상 볼 수 없었습니다). 그리고 이전에 얻은 숫자로 fsck를 실행하려고 하면(저장해 두었습니다)
Bad magic number in super-block while trying to open /dev/sda3
숫자에 상관없이 얻을 수 있습니다.이 시점에서 나는 safecopy로 이미지를 만들었고(인정합니다. 가장 먼저 해야 했지만 약간 당황해서 그것에 대해 생각하지 못했습니다) 다른 솔루션을 테스트할 수 있도록 복제하여 새 복사본을 만들었습니다. 시작 이미지부터 마음에 들지 않는 지점에 도달할 때마다
내가 시도한 모든 것이 도움이 되지 않았습니다. -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
. 또는 루프 장치를 통한 등가물.
참고: 더 이상 죽어가는 디스크와 유일하게 저장된 복사본에 모두 쓰기를 시도하지 마십시오. 사본의 새로운 사본을 가지고 작업하십시오.