Ketika menjalankan Guest atau VM menggunakan Libvirt, Anda dapat menambahkan disk ke dalam VM dengan tipe Bus seperti IDE, SCSI, SATA, atau yang paling sering digunakan yaitu Virtio.
Pemilihan tipe bus dapat juga tergantung dari device atau OS yang akan digunakan. Misal untuk menambahkan device CD-ROM ke dalam VM, maka Bus yang biasanya dipilih adalah SATA.
Namun seiring bekembangnya teknologi, muncul SSD dan NVMe untuk meningkatkan performa dan efisiensi virtualisasi yang kini dapat ditemukan pada Cloud Provider seperti AWS dan lainnya. Sehingga apakah memungkinkan jika SSD dan NVMe dapat ditambahkan menggunakan virtualisai KVM di Libvirt ?
Berikut pembahasannya.
NVMe drives
QEMU support emulating NVMe drive sebagai argumen menggunakan CLI namun Anda tidak dapat menggunakannya secara langsung dengan virt-manager
sehingga
untuk menambahkan disk baru bertipe nvme maka Anda dapat menambahkan argumen QEMU ke file XML guest libvirt.
Untuk QEMU command line args yang digunakan.
-drive file=nvm.img,if=none,id=nvme1
-device nvme,serial=nvme-1,drive=nvme1
Definisinya pada XML Libvirt menjadi.
<qemu:commandline xmlns:qemu="http://libvirt.org/schemas/domain/qemu/1.0">
<qemu:arg value='-drive'/>
<qemu:arg value='file=/path/to/nvm.img,format=raw,if=none,id=nvme1'/>
<qemu:arg value='-device'/>
<qemu:arg value='nvme,serial=nvme-1,drive=nvme1'/>
</qemu:commandline>
Untuk baris <qemu:commandline>
ditambahkan setelah element </devices>
Simpan konfigurasi XML dan start VM.
Untuk mengecek disk NVMe gunakan perintah lsblk
# lsblk -d -o name,size,type
NAME SIZE TYPE
vda 5G disk
vdb 20G disk
nvme0n1 8G disk
Atau bisa dengan menginstall package nvme-cli
lalu jalankan perintah berikut.
# nvme list
Node SN Model Namespace Usage Format FW Rev
--------------------- -------------------- ---------------------------------------- --------- -------------------------- ---------------- --------
/dev/nvme0n1 nvme-1 QEMU NVMe Ctrl 1 8.59 GB / 8.59 GB 512 B + 0 B 1.0
SSD drives
Drive SSD sedikit berbeda karena Anda dapat menambahkan drive seperti biasa namun tipe bus yang dapat digunakan hanya SCSI atau SATA.
<disk type='file'>
<driver type='qcow2' cache='none'/>
<source file='/path/to/disk1.qcow2'/>
<target dev='sdb' bus='scsi'/>
</disk>
Setelah Anda menambahkan atau mengubah tipe bus menjadi SCSI atau SATA, jalankan perintah berikut untuk mengetahui id
dari device drive.
virsh qemu-monitor-command --domain domname --hmp --cmd "info qtree"
Cari bagian dev: scsi-hd
jika menggunakan bus SCSI.
dev: scsi-hd, id "scsi0-0-0"
drive = "libvirt-2-format"
backend_defaults = "auto"
logical_block_size = 512 (512 B)
physical_block_size = 512 (512 B)
min_io_size = 0 (0 B)
opt_io_size = 0 (0 B)
discard_granularity = 4096 (4 KiB)
write-cache = "on"
Saat menggunakan QEMU, command line args yang digunakan adalah.
-set device.scsi0-0-0-0.rotation_rate=1
Untuk definisinya pada XML Libvirt menjadi.
<qemu:commandline xmlns:qemu="http://libvirt.org/schemas/domain/qemu/1.0">
<qemu:arg value='-set'/>
<qemu:arg value='device.scsi0-0-0-0.rotation_rate=1'/>
</qemu:commandline>
Selanjutnya untuk memastikan disk adalah SSD gunakan perintah lsblk
lsblk -d -o name,rota
Untuk rotation 0
berarti SSD, lalu rotation 1
adalah non-SSD.
NAME ROTA
sda 0
sdb 0
nvme0n1 0
Atau bisa juga menggunakan smartctl
dengan menginstall package smartmontools
# smartctl -i /dev/sda
smartctl 7.1 2019-12-30 r5022 [x86_64-linux-4.18.0-477.10.1.el8_8.x86_64] (local build)
Copyright (C) 2002-19, Bruce Allen, Christian Franke, www.smartmontools.org
=== START OF INFORMATION SECTION ===
Vendor: QEMU
Product: QEMU HARDDISK
Revision: 2.5+
Compliance: SPC-3
User Capacity: 21,474,836,480 bytes [21.4 GB]
Logical block size: 512 bytes
LU is thin provisioned, LBPRZ=0
Rotation Rate: Solid State Device
Device type: disk
Local Time is: Tue Jan 30 23:38:45 2024 WIB
SMART support is: Unavailable - device lacks SMART capability.
Reference