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