Linux 가상 머신이 빈 디스크 블록에 데이터를 쓰는 것을 방지하는 방법은 무엇입니까?

Linux 가상 머신이 빈 디스크 블록에 데이터를 쓰는 것을 방지하는 방법은 무엇입니까?

qcow2 디스크 파일과 다른 qcow2 디스크 파일을 백업 저장소로 사용하는 qemu에서 실행되는 Ubuntu 20 가상 머신이 있습니다. 이 가상 머신은 최신 Canonical 분산 클라우드 이미지와 cloud-init를 기반으로 구축되었습니다.

부팅하자마자 디스크 파일이 5분마다 약 1GB의 속도로 점점 커지기 시작했습니다.

스왑이 구성되지 않은 ext4 파일 시스템입니다. 씬 프로비저닝된 디스크 이미지는 1TB로 구성되지만 실제로는 4.2GB만 사용됩니다. 디스크 이미지 자체는 4.4GB입니다. 가상 머신이 하는 일은 부팅하고 GUI를 시작하는 것뿐입니다.

"iotop"은 "ext4lazyinit"가 실행 중임을 표시하므로 inode 테이블을 초기화하고 있다고 가정합니다.

내가 그것을 종료하고 debugfs의 "dump_unused"를 사용하여 디스크 이미지를 검사했을 때, 사용되지 않은 디스크 블록에 모든 종류의 무작위 데이터가 표시되었습니다.

내가 이해하지 못하는 것은 디스크가 0일 때 왜 이런 일을 하는지, 그리고 왜 이 모든 무작위 혼란을 기록하는지입니다.

ext4의 빈 inode 테이블이 모두 0입니까? 디스크 블록의 작은 부분이 inode 테이블로 기록되고 나머지 디스크 블록이 모두 0이 되는 대신 가비지로 채워지는 것이 가능합니까? 쓰레기 대신 0을 쓰게 하는 방법이 있나요?

답변1

이는 e2fsprogs 커밋 v1.46.4-25-gbd2e72c5c552 lazy_itable_initmke2fs패치(mke2fs: 프로비저닝된 제로 스토리지 장치에 대한 확장 옵션 추가-E assume_storage_prezeroed) 장치가 0으로 설정되었고 inode 테이블 블록을 명시적으로 덮어쓰지 않았음을 알 수 있도록 이 옵션을 추가합니다. 이렇게 하면 디스크 이미지 크기가 늘어나는 것을 방지하고 초기 설치 중에 외부 디스크 IO가 발생하는 것을 방지할 수 있습니다.

비록나타나다커밋은 1.46.5 버전에 있을 것이며 분기에만 있는 것처럼 보이며 소스에서 e2fsprogs를 빌드하지 않는 한(분기 또는 체리에서 이 패치를 선택 ) master1.47 기반 버전에서만 패키지될 것입니다 .mastermaint

관련 정보