8

Linux で、解放されたメモリ ページをゼロにして VM スナップショットのサイズを縮小するにはどうすればよいですか?

ゼロ化されていないメモリは、そのメモリが解放されて使用されなくなった場合でも、スナップショットに保存されます。たとえば、ファイルシステム キャッシュから解放されたメモリ ページは、

 sync && echo 3 > /proc/sys/vm/drop_caches

それらはゼロ化されていないため、不必要にスナップショットに保存されます。

更新機能しているように見える本当に恐ろしい解決策は、OOM キラーが作動するまでループ内で malloc + memset メモリを使用することです。これにより、テストした 1 つの VM スナップショットのサイズが約 800MB から約 400MB に減少します。より良い解決策はありますか?

4

2 に答える 2

3

このような方法でディスク キャッシュを解放し、次に dd を使用して空きメモリの量 (スワップを避けるためのヘッドルームとして 32MB を差し引いたもの) を alloc&memset します。たとえば KSM の場​​合、一時的に VM を非 CoW メモリにしますが、(割り当てられていない) メモリ ブロックをゼロで埋めたままにし、他の VM (KSM を使用) と共有/重複排除したり、簡単に圧縮したりできます。

#!/bin/bash

echo 3 > /proc/sys/vm/drop_caches
memfree=$(free -m | awk '/^Mem/ {print $4-32}')
if [ $memfree -gt 0 ]; then
        dd if=/dev/zero of=/dev/null bs=${memfree}M count=1
fi
于 2014-03-19T13:03:12.313 に答える
1

仮想マシンのサイズを縮小するには:

  1. 仮想マシンにログインします。ターミナルを開いて入力する

    cd /home/
    
    sudo dd if=/dev/zero of=foo bs=4096
    
    sudo rm foo
    
  2. 仮想マシンをシャットダウンし、VmWare/VmPlayer メニューに入り、

    vmware -> 仮想マシン設定 -> HD -> ユーティリティ -> コンパクト

    仮想マシンを圧縮します

さらにサイズを小さくしたい場合は、7-zipを使用してください。たとえば、Linux では、次のように入力できます。

7z a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=on archive.7z directory
于 2013-11-05T15:43:45.140 に答える