다른 서버로 전송하려는 희박한 원시 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
. 그러나 이미지를 탑재하면 올바른 크기가 보고되고 예상대로 커집니다.
그런 다음 이미지를 다시 동기화하십시오.