저는 KVM을 사용하여 한 호스트에서 다른 호스트로 가상 머신을 실시간 마이그레이션하고 있습니다. 이를 위해 웹 UI를 작성했습니다. 이제 진행률 표시줄을 구현하고 싶습니다.
내 생각은 마이그레이션하는 동안 소스와 대상의 디스크 파일 크기를 비교하는 것입니다.
서버 1:
ls -ls /data/file.raw
858963 -rw------- 1 root root 21474836480 Dec 15 13:39 file.raw
서버 2:
ls -ls /data/file.raw
698543 -rw------- 1 root root 21474836480 Dec 15 13:39 file.raw
이제 할당된 값을 가져와 백분율로 계산합니다.
100 / 858963 * 698543 = 81%
아름다운. 하지만 문제가 있습니다.
디스크가 드물지 않습니다. 파일의 전체 크기는 입니다 1717926 blocks
. 실제로는 858963 blocks
할당만 있습니다. 따라서 실시간 마이그레이션은 여전히 파일의 빈 부분을 복사하고 있지만 진행률 표시줄은 100%에 도달했습니다.
du
및 을 사용해 보았습니다 stat
.
디스크 전송 파일의 크기만 얻는 방법은 무엇입니까?
답변1
이미 제안된 대로 virsh migration을 사용하거나 다음에서 rsync의 스파스 파일 지원을 활용하십시오 man rsync
.
-S, --sparse Try to handle sparse files efficiently so they take up less space on the destination.
진행 상황과 속도를 확인하려면 rsync -ahHS
추가해 보세요.-P