Bhyve: Import von Image funktioniert nicht

Krull

Well-Known Member
Ich benutze schon seit einer kleinen Ewigkeit Virtualbox mit einer Debian-VM. Sofern es einen einfachen Weg gibt, würde ich gerne zu Bhyve wechseln, allein schon um von Oracle wegzukommen. Da ich keine wirklich brauchbare Dokumentation finden konnte, habe ich mal einen zugegeben etwas naiven Ansatz versucht. Zuerst habe ich das Abbild mit VBoxManage clonehd von VDI nach RAW konvertiert. Ein Neuaufsetzen der VM kommt für mich nicht in frage. Dann habe ich mit vm-bhyve eine Dummy-VM angelegt:
Code:
# vm create -t debian -s 20G debian
Das Dummyimage habe ich dann durch mein zuvor konvertiertes Image ausgetauscht. Wenn ich aber dann
Code:
# vm start -f debian
versuche, lande ich bloß im Bootloader. Nachdem ich mir die grub.cfg der VM angesehen habe, wollte ich mich zu Fuß auf den Weg machen. Hat aber leider auch nicht geklappt, weil der Kernel nicht gefunden wird.
Code:
grub> ls
(hd0) (hd0,msdos5) (hd0,msdos1) (host) (lvm/anon--vg-home) (lvm/anon--vg-tmp) (lvm/anon--vg-swap_1) (lvm/anon--vg-root)
grub> insmod gzio
grub> insmod part_msdos
grub> insmod ext2
grub> set root='hd0,msdos1'
grub> insmod xzio
grub> insmod lzopio
grub> search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1  61f39d77-8d8b-321e-8e0a-f84fdc8652d5
grub> linux   /vmlinuz-6.1.0-20-amd64 root=/dev/mapper/anon--vg-root ro  quiet
error: file `/vmlinuz-6.1.0-20-amd64' not found.
Bevor ich mein kleines Abenteuer gleich wieder sang- und klanglos beende wollte ich noch mal fragen, ob hier vielleicht jemand schon mal etwas ähnliches versucht hat und dabei etwas weiter gekommen ist als ich?

Code:
$ cat debian.conf  
loader="grub"
cpu=2
memory=4G
network0_type="virtio-net"
network0_switch="public"
disk0_type="ahci-hd"
disk0_name="disk0.img"
grub_run_partition="1"
grub_run_dir="/boot/grub"
uuid="a1b442c1-0863-11ef-ca0f-70fa5b4b8e65"
network0_mac="08:00:2a:c7:f0:3c"
 
Wie ist das Image partitioniert?
Code:
# fdisk -l /dev/sda
Disk /dev/sda: 19.53 GiB, 20971520000 bytes, 40960000 sectors
Disk model: VBOX HARDDISK   
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x296ce6da

Device     Boot  Start      End  Sectors  Size Id Type
/dev/sda1  *      2048   499711   497664  243M 83 Linux
/dev/sda2       501758 40957951 40456194 19.3G  5 Extended
/dev/sda5       501760 40957951 40456192 19.3G 8e Linux LVM
 
Versuche mal dein Glück die VM mit UEFI zu starten.

Hmm, die VM hat gar keine EFI-Partition und auch kein Verzeichnis /boot/efi/EFI. Aber gut, ich habe loader="uefi" in die Konfig eingetragen:
Code:
# vm start -f debian
Starting debian
  * found guest in /vm/debian
  * booting...

# vm list
NAME    DATASTORE  LOADER  CPU  MEMORY  VNC  AUTO  STATE
debian  default    uefi    2    4G      -    No    Stopped
So scheint es auch nicht zu klappen :-/
 
Die Frage ist eben, auf welcher Partition liegt der Kernel?
Wenn es die erste ist, dann sollte es vielleicht so gehen:

Code:
grub> linux (hd0,msdos1)/vmlinuz-6.1.0-20-amd64 root=/dev/mapper/anon--vg-root ro  quiet
grub> boot

Das laden des initrd-Images sollte auch noch hinzugefügt werden, sobald du weißt, von welcher Partition der Kernel geladen werden muss.

Rob
 
Gut, wenn /boot/efi/EFI nicht vorhanden ist, kann das nicht klappen.
Aber da steht ja, dass man das erstellen soll und dann welche files hinkopiert werden müssen.

Du hast ja sicherlich snapshots gemacht, damit hast du ja unendlich Versuche ;)

Edit: und ja...nicht mischen. Entweder UEFI oder GRUB. Eins davon muss klappen.
 
Die Frage ist eben, auf welcher Partition liegt der Kernel?
Wenn es die erste ist, dann sollte es vielleicht so gehen:

Code:
grub> linux (hd0,msdos1)/vmlinuz-6.1.0-20-amd64 root=/dev/mapper/anon--vg-root ro  quiet
grub> boot
Damit findet Grub den Kernel leider auch nicht. Obwohl die Position korrekt ist. hd0,msdos1 stimmt.
 
Ich habe nun auch noch mal das Image neu erzeugt. Dieses mal mit qemu-tools, um einen Fehler bei der Konvertierung weniger wahrscheinlich zu machen. Das Ergebnis bleibt gleich, ich komme so nicht über Grub hinaus.
 
Man kann ja auch ein ganz anderen Weg gehen.
Man kann für bhyve eine neue VM erzeugen. Mit einem minimal-Debian. Dort installiert man dann alle Pakete aus der alten VM installieren. Eine Liste der manuell installierten Pakete (das reicht ja; der Rest wird dann via Abhängigkeitsauflösung installiert) aus dem Altsystem kriegt man mit
apt-mark showmanual
Die Liste übergibt man nem apt install
Den Rest zieht man sich aus /etc, /home und /var ( je nachdem, was man braucht). Und viola, hat man sein Linux-System kopiert.
 
Man kann ja auch ein ganz anderen Weg gehen.
Man kann für bhyve eine neue VM erzeugen.
Das ist bestimmt der sauberste Weg. Keine Frage. Aber mit dem Installieren von einigen Paketen ist es leider nicht getan. Das alles wieder herzurichten würde mich Tage, wenn nicht Wochen kosten. Soviel Zeit mag ich dafür im Moment nicht aufbringen. Der Schmerz ist auch nicht groß genug. VBox funktioniert ja prima. Ich dachte eben, nach etwa 10 Jahren ist Bhyve vielleicht halbwegs ausgereift. So hätte ich eine native Lösung mit weniger Oracle. Aber wenn es nicht aus dem Stand läuft, würde ich bis auf weiteres beim status quo bleiben wollen.

Für meinen FreeBSD-Hauptrechner habe ich mir eine Ansible-Rolle gebastelt. Für die VM habe ich sowas leider nicht.
 
Ich schätze mal, dass das "die Installation ist aktuell" heißen soll. Was gibt denn "ls (hd0,msdos1)/" aus?
 
So, ich bin ein wenig weiter gekommen. Die VM startet jetzt, wenn ich diese Zeilen der debian.conf hinzufüge:
Code:
grub_run0="linux   /vmlinuz-6.1.0-20-amd64 root=/dev/mapper/anon--vg-root ro  quiet modules=part_msdos,ext2,lvm"
grub_run1="initrd  /initrd.img-6.1.0-20-amd64"
Im Grunde eine inakzeptable Lösung, weil sie scheinbar nur funktioniert, wenn ich die konkreten Kernelversion angebe (nur /vmlinuz geht leider nicht). Beim nächsten Update müsste ich wieder per Hand nachfummeln.

Aber gut, immerhin startet das Ding nun. Das Netzwerk läuft nicht, aber das hatte ich mir schon gedacht. Aber ich hätte eigentlich schon erwartet, dass die Grafikausgabe klappt. Das tut sie aber leider nicht.
Das steht in der debian.conf:
Code:
graphics="yes"
graphics_res="1440x900"
Code:
# vm list
NAME    DATASTORE  LOADER  CPU  MEMORY  VNC  AUTO  STATE
debian  default    grub    2    4G      -    No    Running (91665)
Fehlt dazu noch irgendwas?
 
Das graphics bezieht sich auf die Ausgabe der VM selbst und von außen darauf gibts nativ VNC (wenn konfiguriert) oder man richtet sich nachträglich ein RDP ein.

Vielleicht noch ein Tip, weil das ja bisher nicht zufriedenstellend ist: ein frisches Debian mit UEFI installieren und da abspicken wie die Partitionen sein sollten, danach anpassen und die reboots/updates testen.
 
Der Symlink liegt aber direkt im root und verlinkt nach /boot/vmlinuz-FOO.
Grub wird hier wohl die /boot-Partition angeboten, dort liegt der Symlink nicht.

Rob
 
Evtl. kann man ueber der grub shell bzw. der grub rescue shell schauen, welche disks und partitions vorhanden sind und dann den Kernel von Hand setzen und booten?

 
dann leg dir in /etc/initramfs/post-update.d ein scriptchen an, dass die symlinks innerhalb /boot setzt.
Die version info kommt via $1 also grob cd /boot; ln -sf vmlinuz-$1 vmlinuz
 
So, ich denke ich werde meine Bemühungen an dieser Stelle beenden. Ich dachte dieser Ansatz könnte am schnellsten zum Ziel führen. Aber danach sieht es nicht aus.
Was ich noch zum Schluss probieren möchte ist, wie Andy_m4 und mr44er vorgeschlagen haben, eine frische Debian-VM aufzusetzen. Mal sehen wie weit ich komme. Wenn's gut läuft werde ich meine Daten vielleicht doch per Hand rüberziehen. Der Installer läuft immerhin, allerdings scheint das Netzwerk mausetot zu sein. Aber das schreibe ich gleich in den nächsten Forumsbeitrag.

Vielen Dank allen, die hier fleißig mitgerätselt und diskutiert haben! Vielleicht sehen wir uns im anderen Thread wieder :)
 
Zurück
Oben