mke2fs/fallocate를 사용하여 씩 프로비저닝된 가상 디스크 파일을 생성하는 방법은 무엇입니까?

mke2fs/fallocate를 사용하여 씩 프로비저닝된 가상 디스크 파일을 생성하는 방법은 무엇입니까?

현재 스토리지 크기 할당량을 위해 특별히 가상 디스크를 만들고 있습니다. 다음과 같이 10GB 디스크를 만들 수 있습니다.

touch myShare-10G
truncate -s 10G myShare-10G
mke2fs -t ext4 -F myShare-10G
fallocate -l 10G myShare-10G
ls -s myShare-10G --block-size=G

11GB가 사용된 것으로 표시됩니다.

5GB의 데이터를 복사한 후에도 파일 크기는 여전히 11GB로 정확하게 유지됩니다.

문제는 5GB의 데이터를 삭제한 후 파일 크기가 11GB 크기를 유지하지 않고 6GB로 줄어드는 것입니다.

가상 디스크를 "thick" 구성(즉, 내부 내용에 관계없이 파일 크기가 고정된 상태로 유지됨)으로 유지하려면 어떻게 해야 합니까?

답변1

이를 수행하는 간단한 방법 중 하나는 지원 장치를 일회용이 아닌 것으로 만드는 것입니다. HDD 지원 LVM 볼륨을 통해 이 기능을 무료로 얻을 수 있으며 이를 VM용 가상 디스크 드라이브로 사용할 수 있습니다. 최상의 성능을 위해서는 원시 블록 장치를 사용하는 것이 일반적인 권장 사항이기도 합니다.

https://www.linux-kvm.org/page/Tuning_KVM

QEMU는 다양한 스토리지 형식과 백엔드를 지원합니다. 사용하기 가장 쉬운 것은 raw 및 qcow2 형식이지만, 최상의 성능을 위해서는 raw 파티션을 사용하는 것이 가장 좋습니다. 논리 볼륨이나 파티션을 생성할 수 있습니다 [...]

하지만 SSD 스토리지로 옮기면 자연스럽게 다시 떨어지게 됩니다. HDD( man lvmthin)인 경우에도 LVM 씬 프로비저닝 볼륨에서도 동일한 현상이 발생합니다.

이 경우에는 가상 머신에 허용되지 않는다고 알립니다. qemu/KVM의 경우 discard=ignore이 매개변수를 사용하여 이를 수행할 수 있습니다. 다른 가상화 솔루션에도 비슷한 설정이 있다고 가정합니다.

qemu 맨페이지에서:

           "discard=discard"
               discard is one of "ignore" (or "off") or "unmap" (or "on")
               and controls whether "discard" (also known as "trim" or
               "unmap") requests are ignored or passed to the filesystem.
               Some machine types may not support discard requests.

의도를 명확하게 하기 위해 현재 구성에서 삭제가 불가능하더라도 지정하는 것이 나쁠 것은 없습니다.


그런데 설정 명령이 더 짧아질 수 있습니다.

# create a new allocated file
fallocate -l 10G myShare-10G
# format it without discarding it
mke2fs -t ext4 -E nodiscard myShare-10G

이는 위의 4개 명령 체인과 동일한 결과를 제공해야 합니다.

-F는 기존 파일 시스템을 덮어쓰고 프롬프트를 표시하지 않으려는 경우에만 필요합니다. 새 파일의 경우에는 이것이 필요하지 않습니다.

관련 정보