Vagrant + libvirt + openSUSE Leap = /dev/sda not found

Beim Bereitstellen neuer openSUSE Leap 15.1-Vagrantboxes der generic- und roboxes-Projekte bin ich kürzlich auf den folgenden Fehler gestoßen:

1[ TIME ] Timed out waiting for device dev-sda2.device.
2[DEPEND] Dependency failed for Resume from hibernation using device /dev/sda2.
3[  OK  ] Reached target Local File System (Pre).
4[  137.377508] dracut-initqueue[242] Warning: dracut-initqueue timeout - starting timeout scripts
5...

Neben openSUSE sind auch noch einige Versionen von Fedora, RHEL und CentOS betroffen.

Der Hintergrund ist, dass der standardmäßig von den einzelnen Vagrant-Projekten verwendete Symbios Logic SCSI-Treiber (sym53c8xx) bei den betroffenen Distributionen aus dem Kernel entfernt wurde.

Daher wurde als neuer Speichercontroller virtio verwendet, was einige Distributionen jedoch nicht vollständig zu unterstützen scheinen. Der Hauptgrund ist vor allem, dass sich die Gerätenamen von /dev/sda nach /dev/vda ändern - und an einigen Stellen (z. B. /etc/fstab) leider hardkodierte Gerätenamen verwendet werden.

Die Lösung sollte es eigentlich sein, den Speichercontroller manuell auf scsi zu setzen, was in meinem Fall jedoch nicht klappte - sata hingegen funktionierte.

Weitere Details finden sich in einem entsprechenden Issue auf GitHub.

Das Vagrantfile muss einfach um die Provider-Direktive libvirt.disk_bus erweitert werden:

1Vagrant.configure("2") do |config|
2  config.vm.box = "generic/opensuse15"
3  config.vm.box_version = "3.0.18"
4
5  config.vm.provider :libvirt do |libvirt|
6    libvirt.disk_bus = "sata"
7  end
8end

Anschließend funktionierte die Bereitstellung einwandfrei.

Gesetzter SATA-Controller

Das Problem konnte ich bei den folgenden Vagrantboxes nachstellen:

Übersetzungen: