$ rsync -aPhmS /mnt/data/ /mnt/data1/
오늘 일부 데이터를 복사하는 동안 이상한 문제가 발생했습니다.
--sparse
rsync 플래그는 사용될 때 예상보다 훨씬 느리게 수행됩니다.
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
--sparse
for 플래그가 있는 것은 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
파일을 "희소화"하는 방법을 찾기 위해 파일을 분석해야 함을 의미합니다. 대상에서 잠재적으로 "희소한" 빈 공간 블록을 검색해야 합니다. 이를 위해서는 추가 계산 시간이 필요합니다.
그런데 이미 희박한 파일에 대해서도 동일한 작업을 수행합니다. 전체 "추출된" 소스 파일을 읽고 동일한 분석을 수행한 다음 완료된 분석을 기반으로 대상에 새 스파스 파일을 생성해야 합니다.