Discos NVMe en una máquina virtual

per Victor Carceler darrera modificació 2021-04-18T12:58:21+01:00

Los discos NVMe se han popularizado mucho sobre todo en los dispositivos portátiles. Desde el punto de vista del sistema operativo, cuando se utiliza un disco de este tipo se puede ver que ha cambiado el nombre del dispositivo de almacenamiento y sus particiones.

Por ejemplo:

vcarceler@vostok:~$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
nvme0n1 259:0 0 238,5G 0 disk
├─nvme0n1p1 259:1 0 512M 0 part /boot/efi
├─nvme0n1p2 259:2 0 2G 0 part [SWAP]
├─nvme0n1p3 259:3 0 2G 0 part
└─nvme0n1p4 259:4 0 234G 0 part
vcarceler@vostok:~$

Y la herramienta nvme nos permitirá realizar operaciones sobre el dispositivo o obtener información:

root@vostok:/home/vcarceler# nvme list
Node SN Model Namespace Usage Format FW Rev
---------------- -------------------- ---------------------------------------- --------- -------------------------- ---------------- --------
/dev/nvme0n1 20372F807563 WDC PC SN530 SDBPMPZ-256G-1101 1 256,06 GB / 256,06 GB 512 B + 0 B 21110001
root@vostok:/home/vcarceler#

O consultar los valores SMART:

root@vostok:/home/vcarceler# nvme smart-log /dev/nvme0
Smart Log for NVME device:nvme0 namespace-id:ffffffff
critical_warning : 0
temperature : 31 C
available_spare : 100%
available_spare_threshold : 10%
percentage_used : 0%
data_units_read : 919.777
data_units_written : 2.102.811
host_read_commands : 11.338.362
host_write_commands : 57.398.477
controller_busy_time : 101
power_cycles : 190
power_on_hours : 45
unsafe_shutdowns : 13
media_errors : 0
num_err_log_entries : 1
Warning Temperature Time : 0
Critical Composite Temperature Time : 0
Thermal Management T1 Trans Count : 0
Thermal Management T2 Trans Count : 0
Thermal Management T1 Total Time : 0
Thermal Management T2 Total Time : 0
root@vostok:/home/vcarceler#

Y ¿es posible tener discos NVMe en una máquina virtual? Bueno, pues la respuesta depende de la herramienta de virtualización que se utilice.

Con VirtualBox

Con la versión de VirtualBox que se encuentra en los repositorios de Ubuntu 20.04 es posible añadir un controlador y un disco NVMe.

VirtualBox-NVMe.png

Pero el soporte para estos discos lamentablemente depende de VirtualBox Extension Pack que, a diferencia de VirtualBox, no utiliza la GPL y no es libre. Así que no es una opción para nosotros.

Con KVM/Qemu

Afortunadamente kvm/qemu-system-x86_64 tienen un excelente soporte para estos discos. Sin embargo este soporte todavía no se ha hecho extensivo a libvirt o virt-manager. Así que de momento no se puede definir una máquina virtual que tenga este tipo de discos de manera gráfica.

En estos dos artículos:

Se explica el uso de <qemu:commandline> en el XML de libvirt para pasar los parámetros específicos a qemu para estos discos. De esta manera, una vez modificada la máquina virtual ya se podrá gestionar con las herramientas habituales.

Pero si únicamente se quiere una MV con un disco NVMe para realizar cualquier test, como por ejemplo la instalación desatendida con OpenZFS del centro, entonces me parece más cómodo utilizar directamente qemu-system-x86_64 con los siguientes parámetros:

qemu-system-x86_64 -enable-kvm -m 2048 -smp 2 -cdrom ~/Descargas/ubuntu-20.04.2.0-desktop-amd64.iso -drive file=disco1.img,if=none,id=D22 -device nvme,drive=D22,serial=1234 -boot d

Tal y como se puede comprobar en la siguiente captura el sistema operativo cree estar controlando un disco NVMe.

qemu-nvme.png