VMware: *.vmdk 파일을 축소하기 위해 ext4 여유 공간을 0으로 채워야 하는 이유는 무엇입니까?

VMware: *.vmdk 파일을 축소하기 위해 ext4 여유 공간을 0으로 채워야 하는 이유는 무엇입니까?

내 Linux Mint 17.2 VMware 게스트에서 df -h총 디스크 사용량은 약 10GB로 안정적인 것으로 보고되었습니다. 저는 Workstation 12.1.1 Pro를 실행하는 Windows 호스트 내에서 Ruby on Rails 개발을 위해 이 시스템을 사용합니다.

파일은 *.vmdk약 100GB까지 꾸준히 증가했습니다. 확대하거나 축소해봐도 vmware-vdiskmanager -k아무런 vmware-toolbox-cmd disk shrinkonly차이가 없습니다.

나는 가지고있다 Filesystem features: has_journal ext_attr resize_inode dir_index filetype needs_recovery extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize. 보다 완전한 dumpe2fs출력은 다음과 같습니다.쓸 수 있는.

실행되었으며 e4defrag /e2fsck -E discard이상 공간이 회수되는 것을 허용하지 않았습니다(처음 몇 개의 vmdk(약 6GB에서 시작)가 축소 징후를 보이지 않은 후 축소를 종료했습니다.)

마지막 비결은 NUL사용 가능한 모든 공간을 바이트로 채우는 것입니다.

dd if=/dev/zero of=wipefile bs=1M; sync; rm wipefile

이제 사용할 수 있어요 *.vmdk.vmware-toolbox-cmd disk shrinkonly

실제 데이터가 10GB인 가상 머신의 경우 약 85GB의 공간이 절약됩니다.

사용되지 않은 블록을 요청할 때 ext4이전에 사용된 블록은 재사용되지 않는 것으로 보이며 이전에 한 번도 사용되지 않은 블록을 제공하는 것을 선호하는 경우가 많습니다.

질문

  1. 오래된 데이터를 더 오래 보관하는 것은 안전하지 않은 것 같습니다. ext4최근에 사용한 블록을 최대한 빨리 재사용하는 것은 어떨까요 ?

  2. ext4방금 사용한 블록을 강제로 재사용하는 방법이 있나요 ?

  3. 정기적으로 여유 공간을 채우지 *.vmdk않고 VMware 게스트 파일이 커지는 것을 방지할 수 있는 방법이 있습니까 ?0

    • 이를 안전하게 자동화하려면 어떻게 해야 합니까(예: 파일 시스템을 완전히 채우지 않고)?

답변1

삭제된 파일 블록을 0으로 만드는 파일 시스템은 없습니다.이 클러스터를 사용 가능한 것으로 표시. 이것이 바로 복구 도구가 삭제된 파일을 다른 파일로 덮어쓰지 않은 경우 복구할 수 있는 이유입니다. 파일 시스템 드라이버가 이러한 블록을 최대한 빨리 재사용하면 실수로 삭제된 파일을 더 이상 복구할 수 없으며 고객은 울부짖을 것이며 클러스터를 0으로 덮어써야 하는 경우 성능에 심각한 영향을 미칠 것입니다.

안전하게 저장해야 하는 파일은 디스크에 그대로 두지 말고 암호화해야 합니다. 필요한 경우분쇄기 도구좋다조각조각 찢다유닉스와ccleaner 드라이브 와이퍼, 지우개, 삭제...Windows에서 안전하게 제거합니다.

VMDK와 관련하여 섹터를희소 형식, VHD, VDI 또는 VM용 동적으로 크기가 조정되는 기타 가상 디스크 이미지 형식과 같습니다. 따라서 섹터를 0으로 지정하면 해당 섹터가 다음과 같이 표시됩니다.불필요한이를 초과하면 압축기가 해당 항목을 제외하여 파일 크기가 작아집니다. 가상 머신은 해당 섹터가 삭제된 파일에 속하는지 여부를 알 수 없으므로 0이 아닌 섹터는 명시적으로 저장해야 합니다.

사용하는 dd if=/dev/zero것은 나쁜 접근 방식입니다.

  • 느립니다.
  • 디스크 이미지가 (일시적으로) 최대치까지 증가합니다.
  • (일시적으로) 디스크의 사용 가능한 모든 공간을 사용하므로 다른 동시 쓰기 작업이 실패할 수 있습니다.

에서 언급했듯이zerofree맨페이지. 디스크를 제로화하기 위해 특별히 설계된 도구를 사용하십시오.zerofree대신에.

가상 디스크 이미지가 확장되는 것을 방지할 방법이 없습니다. 디스크에 더 많은 데이터를 써야 한다면 어떻게 될까요? 파일을 삭제하더라도 해당 데이터는 디스크에 남아 있으며 이미지 파일의 공간을 차지합니다. 파일이 커지는 것을 원하지 않는 경우 유일한 방법은 파일을 더 크게 만드는 것입니다.고정된 크기창조에 대하여.

답변2

  1. 예, 보안 관점에서 사용하지 않는 블록을 즉시 삭제하는 것이 좋습니다. 완료되지 않은 이유( chattr안전 제거 플래그 및 패치 무시)는 성능 때문입니다. 최근에 해제된 블록을 사용하지 않는 경우에도 마찬가지입니다. 이로 인해 심각한 조각화가 발생하여 성능이 저하될 수 있습니다.

  2. 아니 정말. 전체 이미지를 더 작게 만들 수 있습니다(포맷한 15G다음 필요한 경우에만 확장). 그러면 이미지가 15GB를 초과하지 않습니다.

  3. discard옵션을 사용하여 파일 시스템을 마운트 해 볼 수 있습니다 . fstab(5)하지만 귀하의 것인지 확실하지 않습니다.vmware는 이것을 알아 차릴 것입니다

답변3

아마도 VMDK에 NUL을 많이 쓰면 삭제된 모든 블록을 회수하고 할당하기 때문일 것입니다 wipefile. 그러나 e4defrag왜 그렇게 하지 않는지 모르겠습니다.

관련 정보