내부에 외장 하드 드라이브를 장착했습니다. NTFS 형식인데 ext4로 마이그레이션하고 싶습니다. 그래서 보관하고 싶은 모든 것을 다른 드라이브에 복사하고 단일 ext4 파티션으로 완전히 새로운 파티션 테이블(GPT)을 만든 다음 모든 것을 다시 복사하려고 합니다. rsync -a --info=progress2
대부분의 복사 작업 에 사용합니다 .
내 문제는 100GB 정도 지나면 이상한 오류가 발생하는 경향이 있다는 것입니다.
rsync: 'somepath'에 쓰기 실패: 읽기 전용 파일 시스템(30) rsync 오류: Receiver.c(389) [receiver=3.1.0]의 파일 IO(코드 11)에서 오류가 발생했습니다.
rsync가 실패했을 때 처리 중이던 디렉터리를 나열하려고 하면 이상한 결과가 나타납니다.
drwx------ 3 pdaddy pdaddy 4096 2011년 8월 28일 날짜 디렉토리 1 drwx------ 3 pdaddy pdaddy 4096 2014년 3월 12일 디렉토리 2 디???????? ? ? ? ? 하위 디렉터리 3 디???????? ? ? ? ? 하위 디렉터리 4
목록에 물음표가 있는 디렉토리와 물음표가 없는 디렉토리 중 일부를 나열하려고 하면 다음과 같은 결과가 나타납니다.
ls: 디렉터리 하위 디렉터리를 읽는 중 3: 입/출력 오류 합계 0
fdisk에도 오류가 있습니다.
~%fdisk/dev/sde fdisk: /dev/sde를 읽을 수 없습니다: 입력/출력 오류
드라이브를 마운트 해제하려고 하면 umount
명령이 중단됩니다. 조금 실행해 htop
보니 umount가 하나의 CPU 코어를 100% 사용하고 있는 것으로 나타났습니다. 로그나 그런 것을 커밋하는 거라고 생각해서 어느 순간 밤새 방치해 두었는데 아침에도 똑같은 상태였습니다. 발급 되거나 sudo reboot
정지되면 또 다른 터미널이 정지됩니다. 전원버튼을 계속 누르고 있어야 하는데 방금 명시적으로 제거하지 않고 재부팅을 시도했는데 검은 화면이 나타나고(모니터가 절전 모드로 전환됨) SSH나 키보드를 통해 응답이 없습니다.sudo init 6
umount
하드 재부팅 후 디스크를 마운트 해제하고 작업을 실행했는데 sudo fsck.ext4 -f /dev/sde1
오류가 없었습니다. 파일을 확인해 보니 모두 거기에 있는 것 같고 그 안에 있는 샘플도 올바른 것 같습니다.
로그가 너무 커서(아마도 최대 크기가 제한되어 있는 게 아닐까?) 오류가 발생한 것이라 생각하여 -o data=writeback
테라바이트급 파일을 복원할 때 임시로 이런 방식으로 마운트해 놓으면 좋을 것 같다고 생각했습니다.
이렇게 하면 복사 속도가 약간 향상되지만 오류 발생에는 도움이 되지 않습니다. 두 번 더 같은 상황에 빠졌습니다. 하드 재부팅이 내가 할 수 있는 유일한 방법이었습니다. 그 후 디스크 검사에서 오류가 나타나지 않았고 파일은 괜찮아 보였고 추가로 100GB 정도의 파일을 복사할 수 있었습니다.
어떻게 되어가나요? 디스크 자체는 건강한 것 같아요. 다시 포맷하기 전에는 아무런 문제가 없었습니다. 디스크의 섹터 스캔을 수행해야 합니까? 5TB인데 고민되네요.
Stephen Kitt의 조언에 따라 더 많은 파일을 복원하고 커널 로그를 관찰했습니다. 실패하기 전에 rsync
몇 가지 이상한 오류가 나타나기 시작했습니다.
[8807.572286] ata4.00: 예외 Emask 0x0 SAct 0x7fffffff SErr 0x0 작업 0x6 정지 [8807.572290] ata4.00: 명령 실패: FPDMA 대기열에 쓰기 [8807.572293] ata4.00: cmd 61/40:00:c0:57:b6/05:00:b7:00:00/40 태그 0 ncq 688128 출력 [8807.572293] 리소스 40/00:00:00:4f:c2/00:00:00:00:00/40 Emask 0x4(시간 초과) [8807.572295]ata4.00: 상태: {DRDY}
마지막 세 개의 메시지가 여러 번 반복되면 다음과 같은 메시지가 표시됩니다.
[8807.572412] ata4: 하드 리셋 링크 [8808.060464] ata4: SATA 링크 3.0Gbps(SStatus 123 SControl 300) [8808.062462]ata4.00: UDMA/133용으로 구성됨 [8808.076459] ata4.00: 장치가 잘못된 CHS 섹터 0을 보고합니다.
마지막 메시지가 약 20번 반복되고 나면 다음과 같은 메시지가 표시됩니다.
[8808.076526] ata4: EH 완료
47초 후에 이 과정이 반복되었습니다. 81초가 더 지나고 120초가 더 지났습니다. 단, 이번에는 다음과 같이 시작되었습니다.
[9160.779935] ata4.00: 오류가 너무 많아 NCQ가 비활성화되었습니다.
다음번에는 상황이 달라질 것입니다. 처음에는 같았지만 나중에 보니 다음과 같았습니다.
[9235.819291] ata4: 하드 리셋 링크 [9241.181501] ata4: 링크 응답이 느립니다. 조금만 기다려주세요. (ready=0) [9245.839449] ata4: COMRESET 실패(errno=-16)
이 작업은 여러 번 반복되며 다음과 같습니다.
[9290.922301] ata4: SATA 링크 속도를 1.5Gbps로 제한 [9290.922303] ata4: 하드 리셋 링크 [9295.948393] ata4: COMRESET 실패(errno=-16) [9295.948400] ata4: 재설정 실패, 포기 [9295.948401] ata4.00: 비활성화됨
몇 가지 새로운 오류가 있습니다:
[9295.948522] sd 3:0:0:0:[sdf] 실패 결과: 호스트바이트=DID_BAD_TARGET 드라이버바이트=DRIVER_OK [9295.948524] sd 3:0:0:0: [sdf] CDB: [9295.948525] 쓰기(16): 8a 00 00 00 00 00 b9 0c fd 00 00 00 40 00 00 00 [9295.948538] blk_update_request: I/O 오류, dev sdf, 섹터 3104636160 [9295.948542] EXT4-fs 경고(장치 sdf1): ext4_end_bio:317: I/O 오류 -5 쓰기 inode 49807774(오프셋 155189248 크기 4194304 시작 블록 388079688) [9295.948543] 장치 sdf1의 버퍼 I/O 오류, 논리 블록 388079264
(이 게시물을 시작한 이후 일부 드라이브를 섞었는데 이제 드라이브가 sde가 아닌 sdf입니다.)
마지막 오류는 다른 논리 블록을 사용하여 여러 번 반복된 다음 동일한 횟수를 얻습니다.
[9295.948585] EXT4-fs 경고(장치 sdf1): ext4_end_bio:317: I/O 오류 -5 쓰기 inode 49807774(오프셋 155189248 크기 4194304 시작 블록 388079856)
같은 것이 더 있고, 불만 없이 복사가 계속됩니다. 마지막으로 나는 다음을 얻습니다.
[9295.950321] 장치 sdf1-8에 대한 로깅을 중단합니다. [9295.950345] dev sdf1의 버퍼 I/O 오류, 논리 블록 610304000, 동기화 페이지 쓰기 손실 [9295.950361] EXT4-fs(sdf1): 논리 오프셋 0, 최대 블록 1024, 오류 30에서 inode 49807775에 대해 지연된 블록 할당이 실패했습니다. [9295.950362] dev sdf1의 버퍼 I/O 오류, 논리 블록 0, 동기화 페이지 쓰기 손실 [9295.950365] EXT4-fs(sdf1): 이런 일은 일어나서는 안 됩니다! 데이터가 손실됩니다 [9295.950365] [9295.950366] ext4_writepages(장치 sdf1)의 EXT4-fs 오류: 2421: 로깅이 중단되었습니다. [9295.950368] EXT4-fs 오류(장치 sdf1): ext4_journal_check_start:56: 저널 중단이 감지되었습니다. [9295.950370] JBD2: sdf1-8에 대한 로그 슈퍼 블록을 업데이트하는 동안 오류 -5가 감지되었습니다. [9295.950371] EXT4-fs(sdf1): 읽기 전용 파일 시스템 다시 마운트 [9295.950372] EXT4-fs(sdf1): 슈퍼블록에 대한 이전 I/O 오류가 감지되었습니다. [9295.950379] dev sdf1의 버퍼 I/O 오류, 논리 블록 0, 동기화 페이지 쓰기 손실 [9295.950394] dev sdf1의 버퍼 I/O 오류, 논리 블록 0, 동기화 페이지 쓰기 손실 [9326.009002] scsi_io_completion: 10개의 콜백 억제 [9326.009007] sd 3:0:0:0:[sdf] 실패 결과: 호스트바이트=DID_BAD_TARGET 드라이버바이트=DRIVER_OK [9326.009009] sd 3:0:0:0: [sdf] CDB: [9326.009011] 쓰기(16): 8a 00 00 00 00 00 00 00 0f b8 00 00 00 08 00 00 [9326.009018] blk_update_request: 콜백 10개 억제 [9326.009020] blk_update_request: I/O 오류, dev sdf, 섹터 4024 [9326.009023] 개발자 sdf1의 버퍼 I/O 오류, 논리 블록 247, 비동기 페이지 쓰기 손실
(이번에는 data=writeback을 사용하여 제거하고 다시 설치하지 않았으므로 기본 로깅을 수행하고 있습니다.)
그 후에는 파일 시스템이 읽기 전용으로 다시 마운트되었기 때문에 rsync가 실패합니다.
로그 덤프에 대해 죄송합니다. 핵심만 요약하려고 노력했지만 여기서 무슨 일이 벌어지고 있는지 잘 알지 못해 더 요약할 수 없을 것 같습니다.
답변1
이는 커널 버그가 아닌 하드웨어 문제인 것 같습니다. 다음을 시도해 볼 수 있습니다.
- SATA 케이블을 다시 설치하세요.
- 다른 SATA 케이블을 사용하세요
- SMART 진단 실행(자체 테스트, 참조
smartmontools
) badblocks
파괴적인 검사 실행
여유 드라이브나 컴퓨터가 있는 경우 마더보드에 결함이 있는지 확인하기 위해 전환을 시도해 볼 수도 있습니다(같은 컴퓨터의 다른 드라이브를 사용하고 다른 컴퓨터의 문제가 있는 드라이브 사용). 로드 시 드라이브에 문제가 있는 것 같으므로 dd if=/dev/zero of=...
적절한 크기의 매개변수가 포함된 간단한 매개변수만으로도 오류를 재현하기에 충분할 수 있습니다.
원래 외장 드라이브였기 때문에 해당 드라이브의 보증이 적용되는지 잘 모르겠습니다...