Proxmox SCSI-Controller mit mehr als einer Festplatte nutzbar machen

ProxmoxVE meldet einen Fehler, wenn man mehr als eine virtuelle SCSI-Festpatte einer VM hizufügt.

Fehlermeldung:

kvm: -device scsi-hd,bus=scsihw0.0,channel=0,scsi-id=0,lun=1,drive=drive-scsi1,id=scsi1: bad scsi device lun: 1

In den Foren liest man leider nur einen Workaround:

Verwende „virtio-scsi“

Doch es gibt Fälle (xpenology) bei denen es zu einer Treiber-Inkompatibilität kommt. Also ergeben sich 2 Möglichkeiten:

  • richtigen Treiber mit richtigem Kernel kompilieren m(
  • Fehlermeldung von qemu-kvm beheben 8-)

Lösung:

In der Shell von Proxmox lässt sich mit folgendem Befehl die Startkonfig einer VM anzeigen. ( bei {VMID} steht zb 123)

qm showcmd {VMID}
/usr/bin/kvm -id {VMID} -chardev .......
~ usw kurzer BREAK ~
....... -device 'pvscsi,id=scsihw0,bus=pci.0,addr=0x5' -drive 'file=/dev/zvol/rpool/data/vm-{VMID}-disk-1,if=none,id=drive-scsi0,format=raw,cache=none,aio=native,detect-zeroes=on' -device 'scsi-hd,bus=scsihw0.0,channel=0,scsi-id=0,lun=0,drive=drive-scsi0,id=scsi0' -drive 'file=/dev/zvol/rpool/data/vm-{VMID}-disk-3,if=none,id=drive-scsi1,format=raw,cache=none,aio=native,detect-zeroes=on' -device 'scsi-hd,bus=scsihw0.0,channel=0,**scsi-id=0,lun=1**,drive=drive-scsi1,id=scsi1'......
~ usw bis zu 14 scsi Festplatten möglich ~ ........

In dem konkreten Beispiel wird also ein SCSI-Controller von VMware verwendet (pvscsi) mit

  • der id „scsihw0“
  • dem bus „pci.0“
  • auf Adresse „0x5“

Anschließend wird eine Festplatte erzeugt:

  • file „Pfad zur Image-Datei oder Pfad zu einem Block-Device“
  • if=none „konnte nicht herausfinden wofür dieser Parameter ist
  • id „drive-scsi0“
  • format „raw“
  • cache „none“
  • aio „native“
  • detect-zeroes „on“

Die eben erzeugte Festplatte wird nun an den SCSI-Bus angehängt:

  • scsi-hd (Typ Festplatte)
  • bus „scsihw0.0“ (ID und Bus des Controllers)
  • channel „0“
  • scsi-id „0“
  • lun „0“
  • drive „drive-scsi0“ (die ID der Festplatte)
  • id „scsi0“

die letzten 3 Werte „lun,drive,id“ werden pro Festplatte um 1 erhöht“. Soweit so gut… das erhöhen der „lun“ > 0 verursacht allerdings das oben beschriebene Problem. Besser wäre es statt der „lun“ die „scsi-id“ zu erhöhen.

Damit man das nicht händisch nach dem Anlegen der Festplatten machen muss, kann man dieses Verhalten in der Datei /usr/share/perl5/PVE/QemuServer.pm ändern: von

if (!$conf->{scsihw} || ($conf->{scsihw} =~ m/^lsi/)){
            $device = "scsi-$devicetype,bus=$controller_prefix$controller.0,scsi-id=$unit,drive=drive-$drive->{interface}$drive->{index},id=$drive->{interface}$drive->{index}";
        } else {
            $device = "scsi-$devicetype,bus=$controller_prefix$controller.0,channel=0,scsi-id=0,lun=$drive->{index},drive=drive-$drive->{interface}$drive->{index},id=$drive->{interface}$drive->{index}";
}

zu

if (!$conf->{scsihw} || ($conf->{scsihw} =~ m/^lsi/)){
            $device = "scsi-$devicetype,bus=$controller_prefix$controller.0,scsi-id=$unit,drive=drive-$drive->{interface}$drive->{index},id=$drive->{interface}$drive->{index}";
        } else {
            $device = "scsi-$devicetype,bus=$controller_prefix$controller.0,channel=0,scsi-id=$drive->{index},lun=0,drive=drive-$drive->{interface}$drive->{index},id=$drive->{interface}$drive->{index}";
}

Dies lässt die Lun immer auf 0 und setzt die ID auf die jeweilige Festplattennummer.

Ein Letzter Schritt, damit das auch alles wirksam wird:

systemctl restart pvedaemon.service

Selbstverständlich übernehme ich hier keine Garantie auf richtiger Umsetzung und ggf muss der Code nach einem Update wieder geändert werden.

Cookies helfen bei der Bereitstellung von Inhalten. Durch die Nutzung dieser Seiten erklären Sie sich damit einverstanden, dass Cookies auf Ihrem Rechner gespeichert werden. Weitere Information