Pour "passer" un périphérique PCI du serveur à une machine virtuelle, il faut connaitre son ID.
Pour commencer, dans la console de XenServer, tapez la commande :
Bash
lspci
Cette commande affichera une liste de périphériques PCI dont le contrôleur USB 2 de notre serveur :
Plain Text
02:03.0 USB Controller: VMware USB2 EHCI Controller
"02:03.0" étant l'ID de ce périphérique PCI du coté serveur physique.
Ensuite, pour pouvoir passer un périphérique PCI à une machine virtuelle, il faut d'abord le masquer du serveur physique.
Pour cela, modifiez le fichier "/boot/extlinux.conf" pour ajouter l'option "pciback.hide(02:03.0)".
Bash
vi /boot/extlinux.conf
02:03.0 étant de nouveau l'ID PCI du contrôleur USB 2 de notre serveur physique.
Ensuite, tapez les commandes :
Bash
extlinux -i /boot reboot
Note : pour masquer plusieurs périphériques PCI du serveur, utiliser cette syntaxe : pciback.hide=(02:02.0)(02:03.0)
Une fois que XenServer aura redémarré, reconnectez XenCenter à XenServer puis allez dans les propriétés de la machine virtuelle Debian.
Dans la partie "Boot Options", ajoutez l'option "iommu=soft".
Pour les options de démarrage, il y a 2 options qui existent.
Comme indiqué dans le wiki de Xen :
Toujours dans la console de XenServer, tapez la commande "xe vm-list" pour lister les machines virtuelles disponibles sur votre serveur.
Bash
xe vm-list
Pour passer 1 périphérique PCI à une machine virtuelle
Utilisez la commande "xe vm-param-set other-config:pci=0/0000:[PCI ID] uuid=[VM UUID]" pour passer le périphérique PCI souhaité à la machine virtuelle souhaitée.
Bash
xe vm-param-set other-config:pci=0/0000:02:03.0 uuid=1f08f35f-12ba-321a-49f4-3ac187776f38
Infos :
Pour passer plusieurs périphériques PCI à une machine virtuelle
Utilisez la commande "xe vm-param-set other-config:pci=0/0000:[un ID PCI],0/0000:[un autre ID PCI] uuid=[VM UUID]".
Bash
xe vm-param-set other-config:pci=0/0000:02:02.0,0/0000:02:03.0 uuid=1f08f35f-12ba-321a-49f4-3ac187776f38
Où "02:02.0" correspond au contrôleur Audio et "02:03.0" au contrôleur USB2 du serveur.
Pour enlever les périphériques PCI passés à une machine virtuelle
Utilisez la commande "xe vm-param-remove uuid=[VM UUID] param-name=other-config param-key=pci".
Bash
xe vm-param-remove uuid=2b1bd48c-fb42-93bb-f91b-f7cbeaf3e0ac param-name=other-config param-key=pci
Démarrez la machine virtuelle Debian et vérifiez que le message "Device offline" n'apparait pas.
Comme vous pouvez le voir, Debian nous affiche ceci :
Plain Text
... pcifront pci-0: Could not claim resources 0000:00:00.0/0! Device offline. Try using e820_host=1 in the guest config.
Ainsi que des avertissements à propos d'une ressource 32 Bits.
La solution indiquée dans cette erreur n'a pas fonctionné dans notre cas, et après avoir chercher une solution sur Internet, nous avons trouvé ce signalement de bug : Bogue 1673 - 3GB memory restriction for pv domU with PCI
Comme indiqué dans ce rapport, ce problème se produit lorsque l'OS invité (Debian dans notre cas) possède plus de 3 GB de RAM. Ce qui est effectivement le cas.
Du coup, nous avons arrêté la machine Debian, nous avons mis 2 GB de RAM (2048 MB) pour cette machine virtuelle.
Ensuite, au démarrage de la machine virtuelle, cette erreur a disparue.
On se connecte en root sur la machine virtuelle Debian, et on liste les périphériques PCI avec la commande "lspci".
Bash
root@debian:~# lspci 00:00.0 USB Controller: VMware USB2 EHCI Controller
Comme vous pouvez le voir, le périphérique PCI a un ID différent dans la machine virtuelle (00:00.0) et dans le serveur physique (02:03.0).
Ensuite, on liste les périphériques USB avec la commande lsusb.
Bash
root@debian:~# lsusb Bus 001 Device 002: ID 0930:6545 Toshiba Corp. Kingston DataTraveler 102 Flash Drive / HEMA Flash Drive 2 GB / PNY Attache 4 GB Stick Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Donc, Debian reconnait bien notre clé USB branchée physiquement sur le serveur XenServer.
Pour utiliser la clé USB, il suffit de monter la clé USB grâce à la commande "mount" de linux.
Mais pour cela, il faut connaitre le chemin de la partition présente sur la clé USB.
Pour le connaitre, tapez la commande "fdisk -l".
Cette commande nous affiche :
Comme vous pouvez le voir sur cette image, la partition de notre clé USB est "/dev/sda1" et le système de fichiers est FAT32 (compatible avec Windows et linux).
Nous montons la clé USB grâce à ces commandes linux :
Bash
mkdir /mnt/my-usb-key mount /dev/sda1 /mnt/my-usb-key
On va dans le dossier "/mnt/my-usb-key" et on liste les fichiers qui s'y trouvent.
Et comme vous pouvez le voir sur cette image, le fichier "tuto-iw.txt" que l'on avait créé sur la clé USB est bien affiché.
Tentons d'ouvrir ce fichier grâce à vi.
Le contenu s'affiche.
Voilà, notre machine virtuelle a accès directement à la clé USB branchée sur le serveur XenServer grâce à la technologie "PCI passthrough".
Citrix 30/12/2014
Citrix 21/6/2017
Citrix 21/5/2017
Citrix 13/6/2017
Contenu épinglé
Contact
® InformatiWeb-Pro.net - InformatiWeb.net 2008-2022 - © Lionel Eppe - Tous droits réservés.
Toute reproduction totale ou partielle de ce site est interdite et constituerait une contrefaçon sanctionnée par les articles L.335-2 et suivants du Code de la propriété intellectuelle.
Pas de commentaire