揮発性のメモ2

知識をメモ書きしておく

VirtualBoxで fstrimコマンドを使う

fstrimコマンドとは

fstrimコマンドは SSDなどに使用し、ディスクの未使用領域をちゃんと削除して 新規の書き込み速度を向上させたりするのに使うコマンド。

未使用領域はそのままだと 未使用なだけでゴミデータが残ってるので、仮想ディスクのイメージをエクスポートするときに そのゴミを見てしまうので圧縮効率がダダ下がりになってしまう。
初期化することで 圧縮が効率良く効くようになる。

zerofreeではなぜダメか

zerofreeコマンドもあるけど、これは書き込み可でマウントしている領域を処理できないので、アンマウントするか書込み不可でremountするのが必須になる。
そのため、 ルートディレクトリをきれいにするのが非常に面倒くさい。


VirtualBoxで使えるようにする

fstrimはそのままではVirtualBoxでは使えない。

# fstrim -v /
fstrim: /: 破棄の操作が未対応です

# LANG=C fstrim -v /
fstrim: /: the discard operation is not supported

VirtualBoxのハードディスクイメージのdiscard機能がオフになっているため。


VirtualBox - PIB
ここを参考に、discard機能を有効にする

VBoxManage.exe storageattach "HOGE2" --storagectl SATA --port 0 --device 0 --discard on

対応状況の確認

うまくいけば、discard機能がonになる。確認は次のコマンドでできる

> VBoxManage.exe showvminfo HOGE2
Name:                        HOGE2
Groups:                      /
Guest OS:                    Fedora (64-bit)
(中略)
SATA (0, 0): D:\VirtualBox\VMs\HOGE2\HOGE2.vdi (UUID: ef0114a5-37e3-4216-92ed-0f9b3706d626) (discards unused blocks)

(discards unused blocks) というのが付いてたら成功。

HOGE2.vbox ファイルでも確認できる

      <StorageController name="SATA" type="AHCI" PortCount="1" useHostIOCache="true" Bootable="true" IDE0MasterEmulationPort="0" IDE0SlaveEmulationPort="1" IDE1MasterEmulationPort="2" IDE1SlaveEmulationPort="3">
        <AttachedDevice discard="true" type="HardDisk" hotpluggable="false" port="0" device="0">
          <Image uuid="{ef0114a5-37e3-4216-92ed-0f9b3706d626}"/>
        </AttachedDevice>
      </StorageController>

discard="true" というのが付いてたら成功。

fstabの編集

fstabに discard オプションをつけると discard がやっと有効になる

/dev/mapper/fedora-root /      xfs     defaults,discard        0 0

,discard を追記する


fstrimコマンドの使い方

Manpage of FSTRIM

# fstrim -v /
/: 8.9 GiB (9564991488 バイト) に切り揃えました

でかいファイル、でかいディレクトリの見つけ方

sortコマンドで 16Mや255Kなど ヒューマンに優しい数値をソートする - 揮発性のメモ2

$ sudo du -x -h /* 2>/dev/null | sort -hr | head -n20

これで見つけて削除してまたfstrimみたいな