VirtIOストレージは廃棄(fstrim)をサポートしていますか?

VirtIOストレージは廃棄(fstrim)をサポートしていますか?
$ uname -r
5.0.9-301.fc30.x86_64
$ findmnt /
TARGET SOURCE    FSTYPE OPTIONS
/      /dev/vda3 ext4   rw,relatime,seclabel
$ sudo fstrim -v /
fstrim: /: the discard operation is not supported

同じ仮想マシンですが、ディスクをVirtIOからSATAに切り替えた後:

$ findmnt /
TARGET SOURCE    FSTYPE OPTIONS
/      /dev/sda3 ext4   rw,relatime,seclabel
$ sudo fstrim -v /
/: 5.3 GiB (5699264512 bytes) trimmed

仮想ディスクは QCOW2 ファイルとしてサポートされます。 virt-manager/libvirtを使用しています。 libvirt-daemonのバージョンは4.7.0-2.fc29.x86_64です。私のホストは現在バニラカーネルバージョン5.1(ish)を実行しているので、今は少し「カスタマイズされた」ですが、既存のFedoraカーネル構成から始めて構築しました。

VirtIOでドロップサポートを有効にする方法はありますか?それともコードはまだサポートしていませんか?有効にする方法についての正確な指示は必ずしも必要ではありませんが、驚くほど疑問に思われ、確実な答えが欲しいです:-).

答え1

明らかに、この設定は削除をサポートしていません。ただし、ディスクを「VirtIO」から「SCSI」に変更し、SCSIコントローラを「VirtIO」に変更すると機能します。私が一つ見つけた。いくつかの練習があります。これは最初の検索結果にすぎません。この新しいオプションと呼ばれますvirtio-scsivirtio-blockvirtio-blk

私も良いテーマを見つけました。Ubuntuのバグトラッカーvirtio-blk削除要求のサポートはLinux 5.0から始まると述べられています。これはまた、2019年2月22日に提出されたQEMUのサポートが必要であると言います。そのため、今後のリリースでは VirtIO を取得し、自動的にサポートを停止する予定です。


現在は、Fedora 29をインストールしていることを知っていても、デフォルトではディスクをvirt-manager作成しません。デフォルトの「VirtIO」ディスクのみを作成します。virtio-scsi何に切り替えるべきかわかりませんvirtio-scsi

私はSATAエミュレーションと比較してvirtio-scsiSATAと同じパフォーマンス上の利点を提供すると思います。 (VirtIOの有無にかかわらずvirtio-blk:-PどこでもNVMEプロトコルを使用するオプションは表示されません。)virt-manager

oVirtのウェブサイトにはいくつかあります。良いプロモーション、言及した

  1. いくつかの制限virtio-blk
  2. virtio-scsiSCSI LUNのパススルーモードで使用でき、SCSIパススルーを使用せずにさまざまな新しいSCSIコマンド機能を使用できますvirtio-scsi。特にSCSIパススルーを使用しない場合、新しいコマンドにはQEMUの新しいサポートが必要です。しかし、virtio-scsiコードのサポートは必要ありません。
  3. virtio-scsi複数のキューのサポートが含まれます。 (これが単一のキューハードウェアの効率を向上させるのにも役立つかどうかはわかりません。)

答え2

これを行うには、libvirtドメインXMLファイルで破棄を明示的に有効にする必要がありました。

   <devices>
     <disk type='file' device='disk'>
-      <driver name='qemu' type='raw'/>
+      <driver name='qemu' type='raw' discard='unmap'/>
       <source file='...'/>
       <target dev='vda' bus='virtio'/>
       <address type='pci' domain='0x0000' bus='0x04' slot='0x00' function='0x0'/>
     </disk>

答え3

sourcejediの答えに小さな追加

virtio-blkでの削除をサポートするには、仮想マシン構成の「マシン」も更新する必要があります。

  • pc-q35-3.1では、virtio-blkは廃棄をサポートしていません。
  • pc-q35-4.2では実際にそうです

それにもかかわらず、仮想マシン構成を最新のマシンに更新することをお勧めします。または、正しいバージョンを指定せずに「q35」エイリアスを使用してください。

バラより

qemu-system-x86_64 -machine help | grep q35

例えば、

<type arch='x86_64' machine='pc-q35-7.2'>hvm</type>

関連情報