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.
Das Problem konnte ich bei den folgenden Vagrantboxes nachstellen:
- generic/opensuse15 ab 3.0.12
- roboxes/opensuse15 ab 3.0.12
- generic/centos7 älter als 1905.1
- generic/centos8 älter als 1905.1