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 kernel build 5.1 (ish),所以它現在有點“定制”,但我從一個股票的 Fedora 核心配置開始建構它。
有沒有辦法以某種方式在 VirtIO 上啟用丟棄支持?還是程式碼還不支持它?我不一定需要確切的說明如何啟用它,但我很驚訝和好奇,我想要一個可靠的答案:-)。
顯然該設置不支持丟棄。但是,如果您將磁碟從“VirtIO”更改為“SCSI”,並將 SCSI 控制器更改為“VirtIO”,它可以工作。我找到了一個演練。有幾個演練;那隻是第一個搜尋結果。這個新選項稱為
virtio-scsi
. 另一個較舊的系統稱為virtio-block
orvirtio-blk
。我還在Ubuntu bug tracker上找到了一個很棒的文章。它指出
virtio-blk
在 Linux 5.0 中開始支持丟棄請求。它說這也需要在 2019 年 2 月 22 日送出的 QEMU 中的支持。因此,在未來的版本中,我認為我們將自動獲得 VirtIO 和丟棄支持。目前我預設
virt-manager
不創建virtio-scsi
磁碟,即使它知道我正在安裝 Fedora 29;它只創建基本的“VirtIO”磁碟。不知道改用 有沒有什麼壞處virtio-scsi
。與仿真 SATA 相比,我猜想
virtio-scsi
提供與 SATA 相同的性能優勢。virtio-blk
(我在 :-P 的任何地方都看不到使用 NVME 協議的選項,無論virt-manager
有沒有 VirtIO)。oVirt 網站有一些不錯的宣傳,其中提到
- 中的一些限制
virtio-blk
virtio-scsi
可以在 SCSI LUN 的直通模式下使用,並且可以使用各種新的 SCSI 命令功能,而無需在virtio-scsi
. 如果您沒有專門使用 SCSI 直通,那麼任何新命令都需要 QEMU 中的新支持,但virtio-scsi
程式碼中不需要。virtio-scsi
包括對多個隊列的支持。(我不清楚這是否也有助於提高單隊列硬體的效率)。