Proxmox - Passthrough - RaidController
Hallo zusammen, Ich melde mich jetzt nochmal zu Wort.
Ich hatte vor geraumer Zeit leider erfolglos versucht unter Proxmox einen Passthrough eines HP P410 RaidControllers auf meinem Gen8 durchzuführen.
Ich habe mich nun wochenlang durch unzählige Tutorials geschlagen und kann Erfolg verkünden. Ich habe es geschafft unter Proxmox erfolgreich meinen RaidController samt Festplatten an ein virtuelles Openmediavault durchzureichen.
Da ich selbst erfahren habe, wie anstrengend und Zeitaufwendig die Suche und das Ausprobieren der fast unzähligen Möglichkeiten ist, habe ich mich dazu entschieden meine Erkenntnis mit dem Rest der Welt zu teilen
Hier also mein Aufbau und mein Weg zum Ziel =)
Aufbau:
- Microserver Gen8.
- Mit einer Intel(R) Xeon E3-1230 V2 @3.30 GHz
- HP Smart Array P410 Raid Controller 512MB
- 1X 500GB SSD (fürs System und VMs & Co.)
- 2X 1TB HDD (Für das NAS zb. Openmediavault)
Die SSD hängt am ODD Port. Über HPs Raid Konfiguration habe ich die SSD als Raid0 eingebunden um von ODD booten zu können.
Die beiden 1TB Platten hängen auch jeweils als Raid0 am P410 Raid Controller (sicherlich geht auch hier ein richtiger Verbund wie Mirror bzw. Raid1 - zum Testen habe ich aber dann später ein SoftwareRaid erstellt)
Grundinstallation
Ich habe das ganze nicht mit einer aktuellen Proxmox Version (4.3 bzw. 4.X) zum laufen bekommen, weswegen ich hier auf eine ältere Version zurückgreife.
Es sind zwar ein paar Abstriche (LXC etc.) zu machen, aber im Großen und Ganzen hat man trotzdem ein tolles System.
Ich greife hier auf die Version 3.4 von Proxmox und auch eine andere Kernelversion 3.10 zurück.
Installation von Proxmox 3.4:
proxmox-ve_3.4-102d4547-6.iso
Proxmox VE 3.4 ISO Installer
Das System habe ich auf die SSD installiert. Die Platte muss im Raid Konfigurationsmanager von HP natürlich auch als Bootbar markiert werden.
Aktualisierung
nach der Installation soltle ein komplettes Update und ein Neustart durchgeführt werden.
Dazu muss folgendes in die Paketquellen hinzugefügt werden:
/etc/apt/sources.list anpassen und folgendes hinzufügen:
Code:
#Proxmox VE 3.x No-Subscription
deb http://download.proxmox.com/debian wheezy pve-no-subscription
#Proxmox VE 3.x Test
deb http://download.proxmox.com/debian wheezy pvetest
danach noch ein:
apt-get update && apt-get upgrade && apt-get dist-upgrade
und das System neu starten.
Anderen Kernel installieren 3.10:
Sammlung:
Index of /debian/dists/wheezy/pve-no-subscription/binary-amd64
Installiert:
pve-kernel-3.10.0-3-pve_3.10.0-11_amd64.deb
Direktlink:
http://download.proxmox.com/debian/...4/pve-kernel-3.10.0-3-pve_3.10.0-11_amd64.deb
Ich habe es bislang wirklich nur mit dem oben stehenden Kernel:
pve-kernel-3.10.0-3-pve_3.10.0-11_amd64.deb zum Laufen bekommen.
Die Datei mit wget in die laufende Proxmox Instanz herunterladen.
Installieren mit :
dpkg -i pve-kernel-3.10.0-3-pve_3.10.0-11_amd64.deb
vorsichtshalber noch ein: update-grub
danach ein Neustart und in Grub darauf achten, dass auch von dem Kernel gebootet wird.
Einstellungen in Proxmox:
/etc/default/grub anpassen
folgende Zeile muss entsprechend angepasst werden:
Code:
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt"
iommu=pt war bei mir wichtig, da ich sonst diesen Fehler beim durchreichen erhalten hatte:
Code:
[ 35.715620] dmar: DMAR:[DMA Write] Request device [07:00.0] fault addr ffee0000
[ 35.715620] DMAR:[fault reason 05] PTE Write access is not set
Module:
als nächstes müssen benötigte Module beim Start geladen werden:
in /etc/modules folgendes einfügen:
Code:
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd
Blacklist:
Über ein lspci -vvv kann man beim entsprechenden Controller auslesen welchen Treiber, bzw welches Kernel Modul für die Hardware verwendet wird.
Dieses Modul muss beim Booten auf die blacklist gesetzt werden, damit die Hardwäre im Host zwar ersichtlich, aber nicht aktiv ist, bzw. verwendet wird.
bei mir ergab das folgende Zeile:
Code:
Kernel driver in use: hpsa
Somit musste bei mir auch das Kernelmodul hpsa geblockt werden.
Treibermodul auf die Blacklist:
/etc/modprobe.d/blacklist.conf und darin:
danach noch initramfs neu schreiben:
update-initramfs -u
und Grub updaten:
update-grub
danach alles neu starten !!!!!
nach dem Reboot folgendes in die vm.conf eintragen:
Code:
hostpci0: 07:00.0,driver=vfio
07:00.0 ist natürlich die Adresse meiner PCI Karte. Es könnte natürlich sein, dass das auch anders aussehen könnte.
der Befehl lspci zeigt einem natürlich die Adresse der eigenen PCI Karte.
über:
dmesg | grep -e DMAR -e IOMMU
kann man sich dann anzeigen lassen, ob iommu aktiviert ist.
über:
find /sys/kernel/iommu_groups/ -type l
kann man sich anzeigen lassen, wie die Geräte in die jeweiligen iommu Gruppen sortiert sind.
Nachdem das alles funktioniert hat, hatte ich den RaidController in meiner Openmediavault VM. Zugriff auf den Controller, auf die Platten und und und..
Wäre zwar sehr cool, wenn das mit den neueren Versionen von Proxmox auch so funktionieren würde. aber immerhin läuft es jetzt mal so wie ich es haben wollte..
Ich hoffe, dass ich dem Einen oder Anderen damit etwas, oder etwas mehr Arbeit ersparen kann
Zum Nachverfolgen noch meinen Thread im Proxmox-Forum:
https://forum.proxmox.com/threads/raidcontroller-hp-p410-passthrough-probleme.30547/
Noch die Ausgaben Meines Systems:
dmesg | grep -e DMAR -e IOMMU
Code:
[ 0.000000] ACPI: DMAR 00000000adde4a80 0051C (v01 HP ProLiant 00000001 \xffffffd2? 0000162E)
[ 0.000000] Intel-IOMMU: enabled
[ 0.015612] dmar: IOMMU 0: reg_base_addr fed90000 ver 1:0 cap c9008020660262 ecap f010da
[ 0.015688] IOAPIC id 8 under DRHD base 0xfed90000 IOMMU 0
[ 0.365863] DMAR: No ATSR found
[ 0.365881] IOMMU 0 0xfed90000: using Queued invalidation
[ 0.365893] IOMMU: hardware identity mapping for device 0000:00:00.0
[ 0.365894] IOMMU: hardware identity mapping for device 0000:00:01.0
[ 0.365895] IOMMU: hardware identity mapping for device 0000:00:06.0
[ 0.365896] IOMMU: hardware identity mapping for device 0000:00:1a.0
[ 0.365897] IOMMU: hardware identity mapping for device 0000:00:1c.0
[ 0.365898] IOMMU: hardware identity mapping for device 0000:00:1c.4
[ 0.365899] IOMMU: hardware identity mapping for device 0000:00:1c.6
[ 0.365900] IOMMU: hardware identity mapping for device 0000:00:1c.7
[ 0.365901] IOMMU: hardware identity mapping for device 0000:00:1d.0
[ 0.365902] IOMMU: hardware identity mapping for device 0000:00:1f.0
[ 0.365907] IOMMU: hardware identity mapping for device 0000:04:00.0
[ 0.365911] IOMMU: hardware identity mapping for device 0000:01:00.1
[ 0.365912] IOMMU: hardware identity mapping for device 0000:01:00.4
[ 0.365913] IOMMU: Setting RMRR:
[ 0.365919] IOMMU: Setting identity map for device 0000:02:00.0 [0xc0000000 - 0xdfffffff]
[ 0.368064] IOMMU: Setting identity map for device 0000:01:00.0 [0xc0000000 - 0xdfffffff]
[ 0.370206] IOMMU: Setting identity map for device 0000:01:00.2 [0xc0000000 - 0xdfffffff]
[ 0.372342] IOMMU: Setting identity map for device 0000:00:1f.2 [0xc0000000 - 0xdfffffff]
[ 0.374480] IOMMU: Setting identity map for device 0000:03:00.0 [0xc0000000 - 0xdfffffff]
[ 0.376621] IOMMU: Setting identity map for device 0000:03:00.1 [0xc0000000 - 0xdfffffff]
[ 0.378758] IOMMU: Setting identity map for device 0000:07:00.0 [0xc0000000 - 0xdfffffff]
[ 0.380894] IOMMU: Setting identity map for device 0000:01:00.0 [0xaddee000 - 0xaddeefff]
[ 0.380901] IOMMU: Setting identity map for device 0000:01:00.2 [0xaddee000 - 0xaddeefff]
[ 0.380909] IOMMU: Setting identity map for device 0000:02:00.0 [0xe8000 - 0xe8fff]
[ 0.380916] IOMMU: Setting identity map for device 0000:01:00.0 [0xe8000 - 0xe8fff]
[ 0.380924] IOMMU: Setting identity map for device 0000:01:00.2 [0xe8000 - 0xe8fff]
[ 0.380931] IOMMU: Setting identity map for device 0000:00:1f.2 [0xe8000 - 0xe8fff]
[ 0.380938] IOMMU: Setting identity map for device 0000:03:00.0 [0xe8000 - 0xe8fff]
[ 0.380945] IOMMU: Setting identity map for device 0000:03:00.1 [0xe8000 - 0xe8fff]
[ 0.380953] IOMMU: Setting identity map for device 0000:07:00.0 [0xe8000 - 0xe8fff]
[ 0.380960] IOMMU: Setting identity map for device 0000:02:00.0 [0xf4000 - 0xf4fff]
[ 0.380961] IOMMU: Setting identity map for device 0000:01:00.0 [0xf4000 - 0xf4fff]
[ 0.380963] IOMMU: Setting identity map for device 0000:01:00.2 [0xf4000 - 0xf4fff]
[ 0.380964] IOMMU: Setting identity map for device 0000:00:1f.2 [0xf4000 - 0xf4fff]
[ 0.380965] IOMMU: Setting identity map for device 0000:03:00.0 [0xf4000 - 0xf4fff]
[ 0.380966] IOMMU: Setting identity map for device 0000:03:00.1 [0xf4000 - 0xf4fff]
[ 0.380968] IOMMU: Setting identity map for device 0000:07:00.0 [0xf4000 - 0xf4fff]
[ 0.380969] IOMMU: Setting identity map for device 0000:02:00.0 [0xadf7e000 - 0xadf7efff]
[ 0.380976] IOMMU: Setting identity map for device 0000:01:00.0 [0xadf7e000 - 0xadf7efff]
[ 0.380980] IOMMU: Setting identity map for device 0000:01:00.2 [0xadf7e000 - 0xadf7efff]
[ 0.380984] IOMMU: Setting identity map for device 0000:00:1f.2 [0xadf7e000 - 0xadf7efff]
[ 0.380991] IOMMU: Setting identity map for device 0000:03:00.0 [0xadf7e000 - 0xadf7efff]
[ 0.380998] IOMMU: Setting identity map for device 0000:03:00.1 [0xadf7e000 - 0xadf7efff]
[ 0.381006] IOMMU: Setting identity map for device 0000:07:00.0 [0xadf7e000 - 0xadf7efff]
[ 0.381013] IOMMU: Setting identity map for device 0000:02:00.0 [0xadf7f000 - 0xb1f7efff]
[ 0.381283] IOMMU: Setting identity map for device 0000:01:00.0 [0xadf7f000 - 0xb1f7efff]
[ 0.381550] IOMMU: Setting identity map for device 0000:01:00.2 [0xadf7f000 - 0xb1f7efff]
[ 0.381818] IOMMU: Setting identity map for device 0000:00:1f.2 [0xadf7f000 - 0xb1f7efff]
[ 0.382087] IOMMU: Setting identity map for device 0000:03:00.0 [0xadf7f000 - 0xb1f7efff]
[ 0.382358] IOMMU: Setting identity map for device 0000:03:00.1 [0xadf7f000 - 0xb1f7efff]
[ 0.382626] IOMMU: Setting identity map for device 0000:07:00.0 [0xadf7f000 - 0xb1f7efff]
[ 0.382893] IOMMU: Setting identity map for device 0000:02:00.0 [0xb1f7f000 - 0xb5f7efff]
[ 0.383161] IOMMU: Setting identity map for device 0000:01:00.0 [0xb1f7f000 - 0xb5f7efff]
[ 0.383433] IOMMU: Setting identity map for device 0000:01:00.2 [0xb1f7f000 - 0xb5f7efff]
[ 0.383701] IOMMU: Setting identity map for device 0000:00:1f.2 [0xb1f7f000 - 0xb5f7efff]
[ 0.383968] IOMMU: Setting identity map for device 0000:03:00.0 [0xb1f7f000 - 0xb5f7efff]
[ 0.384238] IOMMU: Setting identity map for device 0000:03:00.1 [0xb1f7f000 - 0xb5f7efff]
[ 0.384507] IOMMU: Setting identity map for device 0000:07:00.0 [0xb1f7f000 - 0xb5f7efff]
[ 0.384775] IOMMU: Setting identity map for device 0000:02:00.0 [0xb5f7f000 - 0xb5f8efff]
[ 0.384776] IOMMU: Setting identity map for device 0000:01:00.0 [0xb5f7f000 - 0xb5f8efff]
[ 0.384778] IOMMU: Setting identity map for device 0000:01:00.2 [0xb5f7f000 - 0xb5f8efff]
[ 0.384779] IOMMU: Setting identity map for device 0000:00:1f.2 [0xb5f7f000 - 0xb5f8efff]
[ 0.384780] IOMMU: Setting identity map for device 0000:03:00.0 [0xb5f7f000 - 0xb5f8efff]
[ 0.384782] IOMMU: Setting identity map for device 0000:03:00.1 [0xb5f7f000 - 0xb5f8efff]
[ 0.384784] IOMMU: Setting identity map for device 0000:07:00.0 [0xb5f7f000 - 0xb5f8efff]
[ 0.384785] IOMMU: Setting identity map for device 0000:02:00.0 [0xb5f8f000 - 0xb5f92fff]
[ 0.384787] IOMMU: Setting identity map for device 0000:01:00.0 [0xb5f8f000 - 0xb5f92fff]
[ 0.384788] IOMMU: Setting identity map for device 0000:01:00.2 [0xb5f8f000 - 0xb5f92fff]
[ 0.384789] IOMMU: Setting identity map for device 0000:00:1f.2 [0xb5f8f000 - 0xb5f92fff]
[ 0.384790] IOMMU: Setting identity map for device 0000:03:00.0 [0xb5f8f000 - 0xb5f92fff]
[ 0.384792] IOMMU: Setting identity map for device 0000:03:00.1 [0xb5f8f000 - 0xb5f92fff]
[ 0.384794] IOMMU: Setting identity map for device 0000:07:00.0 [0xb5f8f000 - 0xb5f92fff]
[ 0.384795] IOMMU: Setting identity map for device 0000:02:00.0 [0xb5f93000 - 0xb5f94fff]
[ 0.384796] IOMMU: Setting identity map for device 0000:01:00.0 [0xb5f93000 - 0xb5f94fff]
[ 0.384797] IOMMU: Setting identity map for device 0000:01:00.2 [0xb5f93000 - 0xb5f94fff]
[ 0.384799] IOMMU: Setting identity map for device 0000:00:1f.2 [0xb5f93000 - 0xb5f94fff]
[ 0.384800] IOMMU: Setting identity map for device 0000:03:00.0 [0xb5f93000 - 0xb5f94fff]
[ 0.384801] IOMMU: Setting identity map for device 0000:03:00.1 [0xb5f93000 - 0xb5f94fff]
[ 0.384803] IOMMU: Setting identity map for device 0000:07:00.0 [0xb5f93000 - 0xb5f94fff]
[ 0.384804] IOMMU: Setting identity map for device 0000:01:00.0 [0xb5ff6000 - 0xb5ffcfff]
[ 0.384805] IOMMU: Setting identity map for device 0000:01:00.2 [0xb5ff6000 - 0xb5ffcfff]
[ 0.384809] IOMMU: Prepare 0-16MiB unity mapping for LPC
find /sys/kernel/iommu_groups/ -type l
Code:
/sys/kernel/iommu_groups/0/devices/0000:00:00.0
/sys/kernel/iommu_groups/1/devices/0000:00:01.0
/sys/kernel/iommu_groups/1/devices/0000:07:00.0
/sys/kernel/iommu_groups/2/devices/0000:00:06.0
/sys/kernel/iommu_groups/2/devices/0000:02:00.0
/sys/kernel/iommu_groups/3/devices/0000:00:1a.0
/sys/kernel/iommu_groups/4/devices/0000:00:1c.0
/sys/kernel/iommu_groups/5/devices/0000:00:1c.4
/sys/kernel/iommu_groups/6/devices/0000:00:1c.6
/sys/kernel/iommu_groups/7/devices/0000:00:1c.7
/sys/kernel/iommu_groups/8/devices/0000:00:1d.0
/sys/kernel/iommu_groups/9/devices/0000:00:1e.0
/sys/kernel/iommu_groups/10/devices/0000:00:1f.0
/sys/kernel/iommu_groups/10/devices/0000:00:1f.2
/sys/kernel/iommu_groups/11/devices/0000:03:00.0
/sys/kernel/iommu_groups/11/devices/0000:03:00.1
/sys/kernel/iommu_groups/12/devices/0000:04:00.0
/sys/kernel/iommu_groups/13/devices/0000:01:00.0
/sys/kernel/iommu_groups/13/devices/0000:01:00.1
/sys/kernel/iommu_groups/13/devices/0000:01:00.2
/sys/kernel/iommu_groups/13/devices/0000:01:00.4
vm.conf
Code:
boot: cdn
bootdisk: virtio0
cores: 4
hostpci0: 07:00.0,driver=vfio
ide2: none,media=cdrom
memory: 4096
name: NAS
net0: virtio=3E:E9:E1:56:2D:38,bridge=vmbr0
numa: 0
ostype: l26
smbios1: uuid=d751a01c-39eb-410e-9475-0e2dce2d79a6
sockets: 1
virtio0: local:101/vm-101-disk-1.qcow2,format=qcow2,size=10G
lspci -vvv (nach dem passthrough)
Code:
07:00.0 RAID bus controller: Hewlett-Packard Company Smart Array G6 controllers (rev 01)
Subsystem: Hewlett-Packard Company Smart Array P410
Physical Slot: 1
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr+ Stepping- SERR+ FastB2B- DisINTx+
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0, Cache Line Size: 64 bytes
Interrupt: pin A routed to IRQ 16
Region 0: Memory at fbe00000 (64-bit, non-prefetchable) [size=2M]
Region 2: Memory at fbdf0000 (64-bit, non-prefetchable) [size=4K]
Region 4: I/O ports at 4000 [size=256]
Expansion ROM at bc000000 [disabled] [size=512K]
Capabilities: [40] Power Management version 3
Flags: PMEClk- DSI- D1- D2- AuxCurrent=375mA PME(D0+,D1-,D2-,D3hot-,D3cold-)
Status: D0 NoSoftRst+ PME-Enable- DSel=0 DScale=0 PME-
Capabilities: [50] MSI: Enable- Count=1/1 Maskable- 64bit+
Address: 0000000000000000 Data: 0000
Capabilities: [70] Express (v2) Endpoint, MSI 00
DevCap: MaxPayload 256 bytes, PhantFunc 0, Latency L0s <1us, L1 <8us
ExtTag- AttnBtn- AttnInd- PwrInd- RBE+ FLReset-
DevCtl: Report errors: Correctable- Non-Fatal+ Fatal+ Unsupported-
RlxdOrd+ ExtTag- PhantFunc- AuxPwr- NoSnoop+
MaxPayload 256 bytes, MaxReadReq 4096 bytes
DevSta: CorrErr- UncorrErr- FatalErr- UnsuppReq- AuxPwr- TransPend-
LnkCap: Port #0, Speed 5GT/s, Width x8, ASPM unknown, Latency L0 <512ns, L1 <64us
ClockPM- Surprise- LLActRep- BwNot-
LnkCtl: ASPM Disabled; RCB 64 bytes Disabled- Retrain- CommClk+
ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
LnkSta: Speed 2.5GT/s, Width x8, TrErr- Train- SlotClk+ DLActive- BWMgmt- ABWMgmt-
DevCap2: Completion Timeout: Not Supported, TimeoutDis+
DevCtl2: Completion Timeout: 50us to 50ms, TimeoutDis-
LnkCtl2: Target Link Speed: 5GT/s, EnterCompliance- SpeedDis-, Selectable De-emphasis: -6dB
Transmit Margin: Normal Operating Range, EnterModifiedCompliance- ComplianceSOS-
Compliance De-emphasis: -6dB
LnkSta2: Current De-emphasis Level: -3.5dB, EqualizationComplete-, EqualizationPhase1-
EqualizationPhase2-, EqualizationPhase3-, LinkEqualizationRequest-
Capabilities: [ac] MSI-X: Enable+ Count=16 Masked-
Vector table: BAR=0 offset=001c2000
PBA: BAR=0 offset=001c4000
Capabilities: [100 v1] Advanced Error Reporting
UESta: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
UEMsk: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq+ ACSViol-
UESvrt: DLP- SDES+ TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
CESta: RxErr+ BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr-
CEMsk: RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr-
AERCap: First Error Pointer: 00, GenCap+ CGenEn- ChkCap+ ChkEn-
Kernel driver in use: vfio-pci