외부 HDD에 파일(cp 및 rsync)을 복사하면 대상에서 I/O 오류 및 데이터 손실이 발생합니다.

외부 HDD에 파일(cp 및 rsync)을 복사하면 대상에서 I/O 오류 및 데이터 손실이 발생합니다.

USB3.0을 통해 새로 구입한 NTFS로 포맷된 4TB 외장 Seagate 확장 휴대용 하드 드라이브에 데이터(230GB, 160,000개 파일)를 백업하려고 합니다. 저는 Ubuntu 18.04.3 LTS를 실행하고 있습니다.

처음에는 터미널에서 간단한 cp 명령을 사용해 보았으나 복사가 몇 퍼센트만 진행된 후에도 복사가 끊기고 느려지기 시작했습니다. 잠시 후 디스크가 응답하지 않게 됩니다. 디스크를 다시 마운트해도 아무런 효과가 없습니다. 디스크를 다른 컴퓨터에 연결하려고 시도했지만 처음에는 마운트할 수 없었고 몇 번 시도한 후에는 마운트할 수 있었지만 읽기/쓰기가 매우 느렸습니다.

cp가 실패하기 시작하면 dmesg에서 다음 오류가 발생합니다(이 모든 메시지는 여러 번 반복되지만 숫자는 다릅니다).

[67598.098118] sd 4:0:0:0: [sdb] tag#18 uas_zap_pending 0 uas-tag 19 inflight: CMD 
[67598.098122] sd 4:0:0:0: [sdb] tag#18 CDB: Write(16) 8a 00 00 00 00 01 1c 75 24 18 00 00 04 00 00 00
[67598.225621] usb 1-9: reset high-speed USB device number 5 using xhci_hcd
[67598.378202] scsi host4: uas_eh_device_reset_handler success
[67598.378466] sd 4:0:0:0: [sdb] tag#14 FAILED Result: hostbyte=DID_RESET driverbyte=DRIVER_OK
[67598.378468] sd 4:0:0:0: [sdb] tag#14 CDB: Write(16) 8a 00 00 00 00 01 1c 74 d0 18 00 00 04 00 00 00
[67598.378470] blk_update_request: I/O error, dev sdb, sector 4772384792 op 0x1:(WRITE) flags 0x104000 phys_seg 128 prio class 0
[67598.378473] buffer_io_error: 246 callbacks suppressed
[67598.378474] Buffer I/O error on dev sdb2, logical block 596515075, lost async page write
[67635.212662] scsi host4: uas_eh_device_reset_handler start
[67635.213657] sd 4:0:0:0: [sdb] tag#28 uas_zap_pending 0 uas-tag 10 inflight: CMD 
[67635.213658] sd 4:0:0:0: [sdb] tag#28 CDB: Write(16) 8a 00 00 00 00 01 1c 75 e8 18 00 00 04 00 00 00
[67635.340988] usb 1-9: reset high-speed USB device number 5 using xhci_hcd
[67635.490335] scsi host4: uas_eh_device_reset_handler success

일주일 동안 디스크를 방치한 후 Seagate Bootable Tool을 사용하여 SMART 스캔을 실행했는데 아무런 문제도 나타나지 않았습니다.

그래서 다시 데이터를 복사해 보았습니다. 이제 디스크가 올바르게 마운트되었으며 문제 없이 읽고 쓸 수 있으므로 rsync 명령을 시작했습니다. 내가 먼저 그랬어

rsync -avh source dest

속도는 느리지만 데이터의 20% 정도만 전송되다가 버벅이기 시작해서 전송을 중단했습니다. 다음을 사용하여 전송을 다시 시작합니다.

rsync -avhW source dest --inplace

더 빠르게 만들어 보세요. 잘 실행되고 첫 번째 시도보다 훨씬 빠르지만 몇 분 후에 오류가 발생합니다.

rsync: recv_generator: failed to stat "..." : Input/output error (5)
rsync: write failed on "...": Input/output error (5)
rsync error: error in file IO (code 11) at receiver.c(393) [receiver=3.1.2]

dmesg에는 다음이 표시됩니다.

[ 6772.890553] buffer_io_error: 1092735 callbacks suppressed
[ 6772.890556] Buffer I/O error on dev sdb2, logical block 874428, async page read

이런 일이 발생하면 디스크가 응답하지 않게 됩니다. 몇 분 후에 다시 설치할 수 있었고 첫 번째 rsync 시도 중에 올바르게 복사된 파일을 포함하여 데이터를 복사한 폴더가 완전히 비어 있는지 확인할 수 있었습니다. 데이터가 아직 손상되지 않았는지 확인하기 위해 데이터 복구를 시도하지 않았습니다. 단지 파일 테이블이 손상된 것 같습니다.

실패 시 복사된 파일은 .mat.gz 유형이며 각각 크기는 약 1MB입니다.

그런데 최근 이 컴퓨터에 소량의 데이터를 복사하는 동안 오래된 Seagate 외장 하드 드라이브가 죽었는데(악명 높은 데스 클릭...) 그것이 나의 첫 번째 하드 드라이브가 죽었습니다.

데이터가 복사되는 방식에 문제가 있는 경우(데이터를 복사하면 디스크가 손상됩니까?), 하드웨어(컴퓨터, HDD, USB-SATA 변환기 등)에 문제가 있는 경우 또는 Ubuntu와 관련된 경우. .보통 만자로만 실행하고 있는데 그런 문제는 한번도 겪어보지 못했습니다.

답변1

도움을 주셔서 감사합니다.

이제 이 문제를 해결했습니다. 드라이브를 ext4로 다시 포맷한 후 다음 명령을 사용했습니다.

rsync -avhW source dest --inplace --exclude=".*/"

어디

-a is for archive, which preserves ownership, permissions etc.
-v is for verbose, to see what is happening
-h is for human-readable, so the transfer rate and file sizes are easier to read 
-W is for copying whole files only, without delta-xfer algorithm which should reduce CPU load
--inplace tells rsync to not create a temporary copy of the file to be transferred, which is then copied to the destination. This should speed up the process.
--exclude=".*/" is for excluding all hidden folders

392GB의 평균 데이터 전송률은 81.3MB/s로, 이는 드라이브를 다시 포맷하기 전보다 훨씬 빠른 속도입니다.

이번에는 dmesg에 오류가 없습니다.

공장에서 제공된 특정 NTFS 파티션에 문제가 있는지 또는 NTFS 자체가 문제를 일으키는지 확인하기 위해 드라이브에 새 NTFS 파티션을 생성하려고 시도하지 않았습니다. 불행하게도 이는 문제가 무엇인지에 대한 완전한 답을 갖고 있지 않다는 것을 의미합니다. 또한 시간 초과 임계값을 늘리는 시도는 하지 않았지만 이번에는 더 빠른 데이터 속도를 고려할 때 시간 초과 임계값을 늘리는 것이 해결책이라기보다 기껏해야 해결 방법이라고 말하고 싶습니다.

관련 정보