Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
| fr:xen [2018/12/21 10:03] – [Création d'une VM] Deed | fr:xen [2025/10/25 08:38] (Version actuelle) – [Failed to free memory for the domain] Résolution à la noix zatalyz | ||
|---|---|---|---|
| Ligne 40: | Ligne 40: | ||
| Installer les divers outils dont on va avoir besoin : | Installer les divers outils dont on va avoir besoin : | ||
| apt update | apt update | ||
| - | apt install xen-linux-system-amd64 xen-tools qemu-system-x86 | + | apt install |
| + | avant buster : xen-linux-system-amd64 | ||
| ==== Booter sur le bon noyau : configuration de GRUB ==== | ==== Booter sur le bon noyau : configuration de GRUB ==== | ||
| + | Avec Stretch sur online.net, je n'ai pas eu besoin de changer manuellement le noyau | ||
| + | | ||
| - | Il faut ensuite [[https:// | + | Sinon il faut ensuite [[https:// |
| dpkg-divert --divert / | dpkg-divert --divert / | ||
| # La ligne ci-dessous ne concerne que les machines chez OVH. | # La ligne ci-dessous ne concerne que les machines chez OVH. | ||
| Ligne 56: | Ligne 58: | ||
| Name ID Mem VCPUs State Time(s) | Name ID Mem VCPUs State Time(s) | ||
| Domain-0 | Domain-0 | ||
| - | |||
| - | |||
| </ | </ | ||
| + | Si ça fonctionne passez au 1.3 . | ||
| === Si ça ne marche pas === | === Si ça ne marche pas === | ||
| Ligne 303: | Ligne 304: | ||
| Si vous avez les éléments pour expliquer la théorie, complétez l' | Si vous avez les éléments pour expliquer la théorie, complétez l' | ||
| - | --- //[[wiki:user: | + | --- // |
| </ | </ | ||
| Ligne 333: | Ligne 334: | ||
| xl console myvm | xl console myvm | ||
| Puis retour à la ligne pour entrer dans le terminal (sinon, la commande reste affichée sans rien d' | Puis retour à la ligne pour entrer dans le terminal (sinon, la commande reste affichée sans rien d' | ||
| + | |||
| + | Pour sortir de la VM, depuis l’hôte : | ||
| + | crlt + ( ou 5 | ||
| Pour éteindre une VM, depuis l' | Pour éteindre une VM, depuis l' | ||
| Ligne 386: | Ligne 390: | ||
| Pensez aussi, si ce n'est pas déjà fait, à bien configurer fail2ban sur l' | Pensez aussi, si ce n'est pas déjà fait, à bien configurer fail2ban sur l' | ||
| + | |||
| + | <WRAP center round tip 90%> | ||
| + | Je mets ici un exemple de config iptable | ||
| + | </ | ||
| + | |||
| + | <code bash> | ||
| + | #!/bin/bash | ||
| + | |||
| + | #acepter les connexions ssh | ||
| + | iptables -t nat -I PREROUTING -i eno1 -p tcp --destination-port ssh -j ACCEPT | ||
| + | |||
| + | #rediriger tous les ports sur une VM proxy | ||
| + | iptables -t nat -A PREROUTING -i eno1 -j DNAT --to-destination 192.168.**.10 | ||
| + | |||
| + | #ouvrir un port ssh pour chaque VM | ||
| + | iptables -t nat -I PREROUTING -p tcp --destination-port 3510 -j DNAT --to 192.168.**.10: | ||
| + | iptables -t nat -I PREROUTING -p tcp --destination-port 3511 -j DNAT --to 192.168.**.11: | ||
| + | iptables -t nat -I PREROUTING -p tcp --destination-port 3512 -j DNAT --to 192.168.**.12: | ||
| + | iptables -t nat -I PREROUTING -p tcp --destination-port 3513 -j DNAT --to 192.168.**.13: | ||
| + | iptables -t nat -I PREROUTING -p tcp --destination-port 3514 -j DNAT --to 192.168.**.14: | ||
| + | |||
| + | #exemple pour diriger un port sur une VM | ||
| + | iptables -t nat -I PREROUTING -i eno1 -p tcp --destination-port **** -j DNAT --to 192.168.**.**: | ||
| + | |||
| + | |||
| + | #exemple pour prosody | ||
| + | iptables -t nat -I PREROUTING -i eno1 -p tcp --destination-port 5222 -j DNAT --to 192.168.**.13: | ||
| + | iptables -t nat -I PREROUTING -i eno1 -p tcp --destination-port 5269 -j DNAT --to 192.168.**.13: | ||
| + | iptables -t nat -I PREROUTING -i eno1 -p tcp --destination-port 5280 -j DNAT --to 192.168.**.13: | ||
| + | iptables -t nat -I PREROUTING -i eno1 -p tcp --destination-port 5281 -j DNAT --to 192.168.**.13: | ||
| + | |||
| + | </ | ||
| ==== Réinitialiser le mot de passe root d'une VM ==== | ==== Réinitialiser le mot de passe root d'une VM ==== | ||
| Ouais, bon, ça arrive. Si on a accès à l' | Ouais, bon, ça arrive. Si on a accès à l' | ||
| Ligne 406: | Ligne 442: | ||
| xl create / | xl create / | ||
| + | ===== Pallier à une RAM trop basse ===== | ||
| + | Sur une machine pas très puissante, la RAM est vite un plafond limitant. Et même sur une grosse machine, on veut rapidement faire plus de VM qu'on n'a de ram. | ||
| + | |||
| + | Xen permet de négocier avec ça. | ||
| + | |||
| + | De base, on peut créer plus des VM avec plus de RAM cumulé que le serveur ne le permet. Par exemple si on a 4 Go de RAM physique, il est possible d' | ||
| + | |||
| + | <WRAP center round help 60%> | ||
| + | Swap ou pas swap ? | ||
| + | |||
| + | Ça dépend vraiment des besoins et des capacités. Sur une grosse machine, ça se discute vraiment, car le passage en swap va pourrir les disques durs et reculer le diagnostic d'une ram sur-utilisée. Sur une petite machine, cela permet de faire face à des surcharges ponctuelles. | ||
| + | </ | ||
| + | |||
| + | Xen a des mécanismes " | ||
| + | |||
| + | Exemple | ||
| + | < | ||
| + | # Mémoire pour le démarrage (en Mo) | ||
| + | memory = ' | ||
| + | # Mémoire qui peut être libéré par le Dom0 si disponible | ||
| + | maxmem = ' | ||
| + | </ | ||
| + | |||
| + | On peut ainsi temporairement et dynamiquement ajuster la mémoire sur une VM active, avec la commande suivante sur l' | ||
| + | xl mem-set < | ||
| + | Mais attention, cette valeur doit être au maximum celle de " | ||
| + | |||
| + | Pour faciliter l' | ||
| + | |||
| + | <WRAP center round todo 100%> | ||
| + | Je ne sais pas trop si automatiquement la VM va demander à utiliser jusque la valeur déclarée avec " | ||
| + | </ | ||
| + | |||
| + | |||
| + | <WRAP center round info 100%> | ||
| + | Il est conseillé de toujours garder 1 Go de RAM pour l' | ||
| + | |||
| + | Par ailleurs, il parait que cette option dans le GRUB peut forcer à réserver de la RAM à l' | ||
| + | GRUB_CMDLINE_XEN_DEFAULT=" | ||
| + | Mais par défaut, la commande '' | ||
| + | </ | ||
| + | |||
| + | ==== Failed to free memory for the domain ==== | ||
| + | J'ai découvert une erreur inattendue après une mise à jour système de l' | ||
| + | failed to free memory for the domain | ||
| + | |||
| + | Quelques vérifications de l' | ||
| + | < | ||
| + | xl info | grep -E " | ||
| + | xl dmesg | grep -i memory | ||
| + | xl list</ | ||
| + | |||
| + | Dans mon cas, le résultat significatiof est là : | ||
| + | |||
| + | < | ||
| + | total_memory | ||
| + | free_memory | ||
| + | # xl list | ||
| + | Name ID Mem VCPUs State Time(s) | ||
| + | Domain-0 | ||
| + | |||
| + | Je confirme : y'a ce qu'il faut, mais le Domain-0 s'est soudainement mis à se réserver 3Go de RAM, ne laissant plus rien pour mes VM sur ma petite machine. | ||
| + | |||
| + | On peut d' | ||
| + | |||
| + | Comme il consomme réellement 150 Mo de Ram, je peux temporairement lui forcer une utilisation moindre : | ||
| + | |||
| + | xl mem-set Domain-0 1024 | ||
| + | |||
| + | Là, mes VM peuvent se lancer... | ||
| + | |||
| + | Officiellement il faudrait bidouiller ''/ | ||
| + | < | ||
| + | |||
| + | Puis | ||
| + | update-grub | ||
| + | |||
| + | MAIS la gestion mémoire semble bien pétée et, en faisant ça, on se retrouve surtout avec un ordi qui ne boote plus... La solution va probablement être de lancer la commande "xl mem-set" | ||
| + | |||
| + | <code bash xen-memory-fix.service> | ||
| + | [Unit] | ||
| + | Description=Fix Xen Dom0 memory | ||
| + | After=xen.service | ||
| + | |||
| + | [Service] | ||
| + | Type=oneshot | ||
| + | ExecStart=/ | ||
| + | RemainAfterExit=yes | ||
| + | |||
| + | [Install] | ||
| + | WantedBy=multi-user.target | ||
| + | |||
| + | </ | ||
| + | |||
| + | On active et démarre le service : | ||
| + | < | ||
| + | sudo systemctl start xen-memory-fix.service</ | ||
| + | |||
| + | Je ne prétendrais pas que c'est l' | ||
| ===== Faire des snapshots, cloner une VM ===== | ===== Faire des snapshots, cloner une VM ===== | ||
| Il s'agit de manipulations propres à LVM((En tout cas, chez nous. Il y a d' | Il s'agit de manipulations propres à LVM((En tout cas, chez nous. Il y a d' | ||
| + | ===== Upgrade de Stretch à Buster ===== | ||
| + | Mettre à jour la distribution puis : | ||
| + | apt autoremove | ||
| + | | ||
| + | Changer dans / | ||
| + | bootloader = '/ | ||
| + | | ||
| + | Vérifier que / | ||
| + | net.ipv4.ip_forward = 1 | ||
| + | | ||
| + | Dans / | ||
| + | echo handle_iptable | ||
| + | ===== Bugs récurrents ===== | ||
| + | Il y en a quelques uns déjà listé sur cette page, mais consultez aussi la [[fr: | ||
| + | |||
| + | Si lors du lancement d'un VM, vous avez ceci en erreur : | ||
| + | |||
| + | < | ||
| + | Parsing config from / | ||
| + | libxl: error: libxl_device.c: | ||
| + | libxl: error: libxl_create.c: | ||
| + | libxl: error: libxl.c: | ||
| + | libxl: error: libxl.c: | ||
| + | libxl: error: libxl.c: | ||
| + | |||
| + | Allez voir [[fr: | ||
| + | |||
| + | ==== Horloge ==== | ||
| + | Les VM peuvent avoir une heure aberrante par rapport à Dom0. Ce qui est lié à la timezone mal déclarée. | ||
| + | |||
| + | Ça se règle en exécutant en root | ||
| + | dpkg-reconfigure tzdata | ||
| + | |||
| + | Une liste de choix permet alors de cibler le bon fuseau. | ||
| ===== Sources et documentation ===== | ===== Sources et documentation ===== | ||
| Ligne 414: | Ligne 583: | ||
| * [[http:// | * [[http:// | ||
| - | {{tag> | + | {{tag> |





