
다른 서버로 전송하려는 희박한 원시 qemu 이미지가 있습니다. qemu-img info
나에게 제공 :
image: sparse.img
file format: raw
virtual size: 50G
disk size: 16G
나는 그것을 다음과 같이 전송합니다:
rsync -azhP --sparse origin:/path/to/img/sparse.img .
이제 대상 서버에는 다음이 있습니다.
image: sparse.img
file format: raw
virtual size: 50G
disk size: 40G
그러나 virt-sparsify
복사된 이미지를 다시 실행하면 다음과 같은 결과가 나타납니다.
image: sparse.img
file format: raw
virtual size: 50G
disk size: 16G
두 서버 모두 XFS 파일 시스템에서 CentOS 7.2를 실행하고 있습니다. 그래서 무슨 일이 일어났나요?
업데이트:
좀 더 조사한 결과 rsync가 희소 파일을 잘 처리하지 못하며 다른 도구를 사용하는 것이 더 낫다는 내용의 여러 게시물을 발견했습니다.타르와 같은, 희소 파일을 전송합니다.
설명된 대로 파일이 오류 없이 전송되었는지 확인하기 위해 tar
를 사용하여 전송을 추적할 수 있습니다.rsync --inplace
여기.
또 다른해결책제안된 방법은 대상에 동일한 크기의 빈 스파스 파일을 만든 다음 이를 사용하여 rsync --inplace
실제 데이터를 전송하는 것이었습니다.
나는 이것을 해결책으로 쓰지 않았습니다. 왜 rsync --sparse
이런 식으로 행동하는지 실제로 설명하지 않기 때문입니다.
답변1
나는 이것이 소스와 대상 간의 FS 차이 때문이라고 확신합니다.
예를 들어 자세히 설명하겠습니다. 스파스 파일은 빈 블록(즉, 0으로 가득 찬)이 디스크에 할당되지 않은 파일입니다. FS의 블록 크기가 작을수록 그러한 블록을 찾을 가능성이 높아집니다. 따라서 소스보다 대상의 블록 크기가 더 크기 때문에 문제가 발생할 수 있습니다.
내가 모르는 다른 XFS 매개변수가 있을 수 있습니다.
또한보십시오ServerFault에 대한 이 질문
답변2
나에게 가장 적합한 솔루션은 먼저 실행하는 것입니다.
virt-sparsify imagename
시간이 좀 걸립니다. 그러면 ls -h
, du -h
및 모두에서 동일한 크기를 보고하는 더 작은 크기의 이미지가 생성됩니다 du -h --apparent-size
. 그러나 이미지를 마운트하면 올바른 크기가 보고되고 예상대로 커집니다.
그런 다음 해당 이미지를 rsync하십시오.