如何将未使用的内存归零以减少VM快照大小

fel*_*lix 7 linux virtual-machine linux-kernel

在Linux中,如何将释放的内存页面清零以减小VM快照的大小?

非归零内存存储在快照中,即使该内存已被释放且不再使用.例如,内存页面从文件系统缓存中释放出来

 sync && echo 3 > /proc/sys/vm/drop_caches
Run Code Online (Sandbox Code Playgroud)

不必要地存储在快照中,因为它们尚未归零.

更新一个看似有用的非常糟糕的解决方案是在循环中使用malloc + memset内存,直到OOM杀手进入.这将我测试的一个VM快照的大小从大约800MB减少到大约400MB.有更好的解决方案吗?

Cla*_*dio 1

要减小虚拟机的大小:

  1. 登录虚拟机;打开终端并输入

    cd /home/
    
    sudo dd if=/dev/zero of=foo bs=4096
    
    sudo rm foo
    
    Run Code Online (Sandbox Code Playgroud)
  2. 关闭虚拟机,进入VmWare/VmPlayer菜单,进入

    vmware -> 虚拟机设置 -> HD -> 实用程序 -> 紧凑

    并压缩虚拟机

如果您想进一步减小尺寸,请使用 7-zip。例如,在 Linux 上,您可以键入:

7z a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=on archive.7z directory
Run Code Online (Sandbox Code Playgroud)