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 --port0--device0--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 / xfsdefaults,discard0 0
,discard を追記する
fstrimコマンドの使い方
# fstrim -v / /: 8.9 GiB (9564991488 バイト) に切り揃えました
でかいファイル、でかいディレクトリの見つけ方
sortコマンドで 16Mや255Kなど ヒューマンに優しい数値をソートする - 揮発性のメモ2
$ sudo du-x-h /* 2>/dev/null | sort-hr | head -n20
これで見つけて削除してまたfstrimみたいな