web-dev-qa-db-ja.com

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

同じVMですが、ディスクを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です。私のホストは現在、Vanillaカーネルビルド5.1(ish)を実行しているため、現時点では少し「カスタマイズ」されていますが、私はストックのFedoraカーネル構成から始めてビルドしました。

VirtIOで破棄サポートを有効にする方法はありますか?または、コードはまだそれをサポートしていませんか?私は必ずしもそれを有効にする方法の正確な指示を必要としないが、私は驚いて好奇心が強く、確実な答えが欲しい:-)。

4
sourcejedi

その設定では破棄はサポートされていなかったようです。ただし、ディスクを「VirtIO」から「SCSI」に変更し、SCSIコントローラーを「VirtIO」に変更すると機能します。 ウォークスルー が見つかりました。いくつかのウォークスルーがあります。それは最初の検索結果でした。この新しいオプションはvirtio-scsiと呼ばれます。もう1つの古いシステムはvirtio-blockまたはvirtio-blkと呼ばれます。

buntuバグ追跡システム にも素晴らしいスレッドがありました。 Linux 5.0でvirtio-blkが破棄要求のサポートを開始することが指摘されています。これには、2019年2月22日にコミットされたQEMUでのサポートも必要であると述べています。したがって、将来のバージョンでは、VirtIOと破棄の両方のサポートを自動的に取得すると思います。


現在、私のvirt-managerは、Fedora 29をインストールしていることがわかっていても、デフォルトではvirtio-scsiディスクを作成しません。基本的な「VirtIO」ディスクを作成するだけです。 virtio-scsiに切り替えることの欠点があるかどうかはわかりません。

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

OVirtウェブサイトにはいくつかの Nice propaganda があり、

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