rsync --sparse는 몇 초마다 중지됩니다.

rsync --sparse는 몇 초마다 중지됩니다.
$ rsync -aPhmS /mnt/data/ /mnt/data1/

오늘 일부 데이터를 복사하는 동안 이상한 문제가 발생했습니다.

--sparsersync 플래그는 사용될 때 예상보다 훨씬 느리게 수행됩니다.

time rsync --sparse

real    4m8.791s
user    0m23.558s
sys     2m43.257s

time rsync(-s 제외)

real    2m32.607s
user    0m39.175s
sys     1m33.885s

time cp

real    2m31.811s
user    0m0.254s
sys     0m52.627s

진행 상황을 모니터링하면 몇 초마다 쓰기가 중지되고 전송 속도가 0으로 떨어집니다. iostat보고된 장치 활용률은 약 50-60%입니다(위의 시간과 일치 - 시간이 빠를수록 약 50% 느림).

왜 이런 일이 발생합니까?

이 성능 문제에 대한 수정 사항이나 해결 방법이 있습니까? (-S가 없다는 점을 제외하면 이 플래그는 일부 데이터에 스파스 파일이 포함되어 있기 때문에 존재합니다.)

단편적인 솔루션을 상상할 수 있습니다. 어떻게든 모든 희소 파일을 감지하고, 모든 비희소 파일과 모든 희소 파일의 목록을 만들고, 해당 목록에서 rsync를 두 번 실행합니다. (그러나 나는 Linux를 처음 접했기 때문에 그러한 스크립트는 내 능력을 훨씬 넘어서는 것입니다.)

rsync 버전 3.2.7 프로토콜 버전 31

답변1

--sparsefor 플래그가 있는 것은 rsync대상에 스파스 파일을 생성할 수 있는지 확인하기 위해 복사하려는 모든 파일(스파스 파일뿐만 아니라)을 분석해야 한다는 것입니다.

여기에 예가 있습니다. 1GB 파일을 만들었습니다.아니요부족한.

$ dd if=/dev/zero of=bigfile bs=1G count=1
1+0 records in
1+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 0.65238 s, 1.6 GB/s
$ ls -lsh bigfile
1.0G -rw-r--r-- 1 root root 1.0G May 28 17:18 bigfile

rsync --sparse이제 다음을 사용하여 이 파일을 복사하면~ 할 것이다소스가 희박하지 않더라도.

$ time -p rsync --sparse bigfile bigfile.sparse
real 2.88
user 4.19
sys 0.56
$ ls -lsh bigfile.sparse
0 -rw-r--r-- 1 root root 1.0G May 28 17:19 bigfile.sparse

이는 rsync파일을 "희소화"하는 방법을 찾기 위해 파일을 분석해야 함을 의미합니다. 대상에서 잠재적으로 "희소한" 빈 공간 블록을 검색해야 합니다. 이를 위해서는 추가 계산 시간이 필요합니다.

그런데 이미 희박한 파일에 대해서도 동일한 작업을 수행합니다. 전체 "추출된" 소스 파일을 읽고 동일한 분석을 수행한 다음 완료된 분석을 기반으로 대상에 새 스파스 파일을 생성해야 합니다.

관련 정보