LoginSignup
7
6

More than 5 years have passed since last update.

KVM のゲストで fstrim する

Posted at

下記の環境で試しています。

  • centos-release-7-2.1511.el7.centos.2.10.x86_64
  • kernel-3.10.0-327.10.1.el7.x86_64
  • qemu-kvm-1.5.3-105.el7_2.3.x86_64
  • libvirt-1.2.17-13.el7_2.3.x86_64

下記の記事などを参考にやってみました。


ゲストの設定の編集を開始します。

virsh edit GUEST

scsi controller を追加します(既にあるなら不要です)。

<controller type='scsi' model='virtio-scsi' index='0'/>

ディスクの設定を変更します。

<disk type='block' device='disk'>
  <driver name='qemu' type='raw' discard='unmap'/>
  <source dev='/dev/vg1/guest.img'/>
  <target dev='sda' bus='scsi'/>
</disk>
  • <target/>dev='sda' bus='scsi' に変更する
  • <driver/>discard='unmap' を追記する
  • <address/> は削除する

変更を保存して、ゲストを開始します。

virsh start GUEST
virsh console GUEST

fstrim してみます。

fstrim -a -v

TRIM されました。

/: 3.2 GiB (3422597120 bytes) trimmed

なお、元のゲストのディスクが virtio で接続されていた場合はディスクデバイスの名前が /dev/vda から /dev/sda に変わりますのでご注意ください。

ホストで SystemTap で TRIM を確認

下記の記事の通りの方法で、ホスト側で SystemTap を使って、ゲストで fstrim したときに実際に TRIM されていることを確認してみました。

ホスト側で次の通り準備します。

yum install systemtap \
  kernel-devel-$(uname -r) \
  kernel-headers-$(uname -r)

debuginfo-install kernel-$(uname -r)

cat <<'EOS'> /tmp/discard.stp
probe kernel.function("blkdev_issue_discard").return {
  printf("%s, sector=%d, nr_sects=%d, return=%d (%d - %d KiB)\n",
    execname(), $sector, $nr_sects, $return,
    $sector / 2, ($sector + $nr_sects) / 2 - 1);
}
EOS

stap -v /tmp/discard.stp

上がゲストで下がホストです。

kvm-lvm-fstrim.gif

7
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
6