Proxmox 8
Nous allons voir comment installer proxmox 7.x sur un raid 1 logiciel (md / mdadm) avec debootstrap.
Prérequis
Ce tutoriel se base sur l'utilisation de debootstrap pour installer une base de système d'exploitation debian. La plupart des hébergeurs proposent un système de "rescue" permettant l'installation de debian par ce moyen. Si vous ne disposez pas de mode rescue, vous pouvez toujours utiliser l'installeur proposé par votre hébergeur, ou encore passer par un kvm pour installer vous même le système avec l'iso de debian.
Pour les débutants
Si vous êtes débutant en administration linux, je vous conseil de sauvegarder quelque part les fichier suivant issu d'une précédente installation de debian ou de proxmox
/etc/networks
/etc/network/interfaces
/etc/resolv.conf
/etc/hosts
/etc/fstab
/etc/mdadm/mdadm.conf
si vous disposez d'un raid logiciel- tout fichier de personnalisation de grub (
/etc/grub.d/
par exemple)
Cela vous permettra de vous faire une idée plus précise de ce qui doit figurer dans ces différents fichiers.
Partitionnement et système de fichier
Voici le partitionnement que je vais utiliser :
- Partition root (/) de 20 Go (/) en raid 1 sur les disques sda et sdb
- Partitions swap de 4096 Go chacune réparties sur sda et sdb
- Le reste de l'espace sera utilisé plus tard pour un LVM dédié aux VMs
Partitionnement
Possibilité 1 : Partitionnement GPT pour EFI / UEFI
Nous allons créer avec gdisk
3 partitions sur chaque disque :
- sda1 et sdb1 : partitions EFI (ESP), obligatoire pour le démarrage EFI/UEFI. Il faudra leur attribuer le type
EF00
. Pour assurer une bonne compatibilité avec les multiples firmwares EFI, il est recommandé de leur attribuer une taille de 512 MiB (+512M au prompt gdisk). - sda2 et sdb2 : partitions pour le raid root (/). Il faudra leur attribuer le type
FD00
. - sda3 et sdb3 : partitions swap séparées. Il faudra leur attribuer le type
8200
.
Pour les partitions EFI, nous créons un système de fichier FAT32 avec le label (nom) EFI_SYSPART
:
mkfs.fat -F 32 -n EFI_SYSPART /dev/sda1 mkfs.fat -F 32 -n EFI_SYSPART /dev/sdb1
Possibilité 2 : Partitionnement GPT pour BIOS
Nous allons créer avec gdisk
3 partitions sur chaque disque :
- sda1 et sdb1 : partitions pour le bootloader. Il faudra leur attribuer le type
EF02
. On peut la créer idéalement du secteur 34 au secteur 2047 du disque. - sda2 et sdb2 : partitions pour le raid root (/). Il faudra leur attribuer le type
FD00
. - sda3 et sdb3 : partitions swap séparées. Il faudra leur attribuer le type
8200
.
Notez que la partition du bootloader ne doit pas être formatée.
Possibilité 3 : partitionnement MBR pour BIOS (non prise en charge dans ce wiki)
A titre informatif : création avec parted
, sans nécessité de créer une partition dédiée au bootloader/grub.
Création du RAID
Pour des raisons esthétiques, définissez l'hostname de votre système de rescue :
hostname proxmox
Pour créer votre raid 1 avec 2 disques :
mdadm --create --verbose /dev/md2 --level=1 --raid-devices=2 /dev/sda2 /dev/sdb2
Notez que si vous souhaitez utiliser plus que 2 disques, il faut augmenter la valeur de --raid-devices
et ajouter les partitions des disques à la suite.
Attendez que le raid soit synchronisé avant de continuer. Vous pouvez surveiller facilement cela avec la commande watch cat /proc/mdstat
.
Création des systèmes de fichiers
Créez un système de fichier ext4 pour le raid du root :
mkfs.ext4 /dev/md2
Enfin, initialisez les swaps :
mkswap /dev/sda3 mkswap /dev/sdb3
Installation de proxmox
Installation du système de base
Nous débutons par installer le système de base de Debian avec debootstrap
Installez les paquets nécessaires dans votre rescue :
apt install debootstrap debian-keyring debian-archive-keyring
Montez votre partition raid root sur /mnt
:
mount /dev/md2 /mnt
Installez le système de base debian, version bookworm :
debootstrap --arch=amd64 bookworm /mnt http://ftp.fr.debian.org/debian
Configuration de Debian
Montez les vfs suivants, puis chrootez dans votre nouveau système debian :
mount -o bind /proc /mnt/proc mount -o bind /dev /mnt/dev mount -o bind /dev/pts /mnt/dev/pts mount -o bind /sys /mnt/sys chroot /mnt
Configurez les archives apt : éditez le fichier /etc/apt/sources.list
:
# main archive deb http://deb.debian.org/debian/ bookworm main contrib non-free non-free-firmware deb-src http://deb.debian.org/debian/ bookworm main contrib non-free non-free-firmware # security updates deb http://security.debian.org/debian-security bookworm-security main contrib non-free non-free-firmware deb-src http://security.debian.org/debian-security bookworm-security main contrib non-free non-free-firmware # bookworm-updates, previously known as 'volatile' deb http://deb.debian.org/debian/ bookworm-updates main contrib non-free non-free-firmware deb-src http://deb.debian.org/debian/ bookworm-updates main contrib non-free non-free-firmware # backports archive deb http://deb.debian.org/debian bookworm-backports main contrib non-free non-free-firmware deb-src http://deb.debian.org/debian bookworm-backports main contrib non-free non-free-firmware
Mettez à jour les paquets :
apt update apt full-upgrade
Installez les locales et la configuration de console :
apt install locales dpkg-reconfigure locales apt install console-data console-setup-linux console-setup wget dpkg-reconfigure console-data # from arch > french > latin9)
Définissez la zone horaire :
tzselect dpkg-reconfigure tzdata
Configurez votre fichier /etc/fstab
.
Pour GPT pour EFI / UEFI :
# <file system> <mount point> <type> <options> <dump> <pass> /dev/md2 / ext4 defaults,errors=remount-ro,relatime 0 1 /dev/sda1 /boot/efi vfat defaults 0 1 /dev/sda3 swap swap sw,pri=1 0 0 /dev/sdb3 swap swap sw,pri=1 0 0
Pour GPT pour BIOS :
# <file system> <mount point> <type> <options> <dump> <pass> /dev/md2 / ext4 defaults,errors=remount-ro,relatime 0 1 /dev/sda3 swap swap sw,pri=1 0 0 /dev/sdb3 swap swap sw,pri=1 0 0
Montez la partition EFI / ESP dans le cas d'un partitionnement GPT pour EFI / UEFI :
mkdir /boot/efi mount /boot/efi
Configurez les interfaces réseaux dans /etc/network/interfaces
:
# The loopback network interface auto lo iface lo inet loopback auto eno3 iface eno3 inet static address XXXX/24 gateway XXXX
Configurez le fichier /etc/hosts
:
# local 127.0.0.1 localhost ::1 localhost ip6-localhost ip6-loopback ff02::1 ip6-allnodes ff02::2 ip6-allrouters # main ipdelamachine proxmox.domain.tld proxmox pvelocalhost
Définissez les hostnames dans ces fichiers :
# Pour celui la : non-fqdn echo proxmox > /etc/hostname # Pour celui la : fqdn echo proxmox.domain.tld > /etc/mailname
ATTENTION Le fichier /etc/hosts
DOIT être cohérent avec le fichier /etc/hostname
.
Par exemple, si le contenu de /etc/hostname
est proxmox
et que l'ip de votre proxmox est 225.182.54.9 il faudra veiller a avoir les informations suivantes dans /etc/hosts
:
127.0.0.1 localhost 225.182.54.9 proxmox.domain.tld proxmox pvelocalhost
Attention : n'utilisez pas 127.0.1.1 (comme le fait debian) mais bien la vrai ip (ici 225.182.54.9)
N'oubliez pas de configurer les dns (ceux de votre hébergeur dédié) dans /etc/resolv.conf
:
nameserver XX.XX.XX.XX
Installez postfix :
hostname -F /etc/hostname apt install postfix
Enfin, comme nous installons notre partition de boot sur un raid software, il faut installer madadm
à ce stade :
apt install mdadm
Vérifiez si votre array root s'est bien défini automatiquement dans /etc/mdadm/mdadm.conf
. Si ce n'est pas me cas, ajoutez la configuration de l'array manuellement :
mdadm --examine --scan >> /etc/mdadm/mdadm.conf
Installation de proxmox - kernel
Ajoutez le dépot proxmox dans le fichier /etc/apt/source.list :
# PVE pve-no-subscription repository provided by proxmox.com, NOT recommended for production use deb http://download.proxmox.com/debian/pve bookworm pve-no-subscription
Ajoutez la clé du dépôt proxmox :
wget https://enterprise.proxmox.com/debian/proxmox-release-bookworm.gpg -O /etc/apt/trusted.gpg.d/proxmox-release-bookworm.gpg
Mettez à jour le système :
apt update apt full-upgrade
Possibilité 1 : Partitions GPT pour EFI / UEFI
Vérifiez que /boot/efi
est bien monté. Si ce n'est pas le cas, faites le.
Installez le kernel proxmox :
apt install pve-firmware apt install proxmox-default-kernel grub-efi-amd64 gdisk
Supprimez les paquets suivant si vous n'avez pas besoin de secureboot :
apt purge grub-efi-amd64-signed mokutil shim-helpers-amd64-signed shim-signed shim-signed-common shim-unsigned
Normalement tout doit se faire avec des promps. Si ce n'était pas le cas :
grub-install --bootloader-id=proxmox
Si jamais vous utilisez un démarrage en PXE (c'est le cas sur un serveur OVH par exemple), utilisez l'argument --no-nvram
pour empêcher grub de mettre à jour la NVRAM et casser votre mécanique de démarrage PXE :
grub-install --bootloader-id=proxmox --no-nvram
Etant donné que seul /dev/sda1
est monté sur /boot/efi
, il faut transférer manuellement les données sur /dev/sdb1
:
mount /dev/sdb1 /mnt rsync -av /boot/efi/ /mnt/ umount /mnt
Si pour une raison quelconque, vous aviez besoin des headers du kernel :
apt install pve-headers-5.15
Possibilité 2 : Partitions GPT pour BIOS OU Partitions MBR pour BIOS
apt install pve-firmware apt install proxmox-default-kernel grub-pc gdisk
Lorsqu'on vous demandera où installer grub, choisissez sda
ET sdb
. Sinon :
grub-install /dev/sda grub-install /dev/sdb
Installation de proxmox - OpenSSH
Installez openssh et définissez un password root. Autorisez le login root par password temporairement.
hostname -F /etc/hostname apt install openssh-server passwd sed -i "s/#PermitRootLogin prohibit-password/PermitRootLogin yes/g" /etc/ssh/sshd_config
Installation de proxmox - Vérifications finales et redémarrage sur le kernel proxmox
Si vous avez une configuration particulière à entrer dans /etc/default/grub
, faites le maintenant. Par exemple :
GRUB_CMDLINE_LINUX="nomodeset iommu=pt"
Puis régénérez la configuration de grub :
update-grub
Vous pouvez vérifier que votre fstab est valide avec :
findmnt --verify --verbose
Vous pouvez maintenant sortir de votre chroot et démonter le système de fichier
umount /boot/efi/ exit umount /mnt/sys umount /mnt/dev/pts umount /mnt/dev umount /mnt/proc umount /mnt
Enfin, redémarrez le serveur sur le disque dur.
Installation de ifupdown2
Le paquet ifupdown2
est en voie de devenir le remplaçant officiel de ifupdown
pour proxmox.
apt install ifupdown2 apt purge ifupdown systemctl enable networking
Pour vérifier que votre configuration est fonctionnelle : lancez ifquery -a
Redémarrez à nouveau votre serveur
Installation de proxmox - pve
Une fois le redémarrage effectué, vous allez enfin pouvoir installer pve :
apt install proxmox-ve ksm-control-daemon chrony
apt remove os-prober
Editez la configuration réseau /etc/network/interfaces
afin d'y créer votre bridge :
auto eno3 iface eno3 inet manual auto vmbr0 iface vmbr0 inet static address xxxxx/24 gateway xxxx hwaddress AA:BB:CC:11:22:33 bridge_ports eno3 bridge_stp off bridge_fd 0
Définissez la ligne hwaddress
avec l'adresse MAC de l'interface eno3.
Installez votre clé SSH dans /root/.ssh/authorized_keys
puis désactivez le login root par password de OpenSSH dans /etc/ssh/sshd_config
.
Une fois tout installé, je vous conseille de reconfigurer grub afin de mettre à jour la configuration interne de debian:
- Pour EFI :
dpkg-reconfigure grub-efi-amd64
- Pour BIOS :
dpkg-reconfigure grub-pc
Redémarrez une dernière fois pour appliquer les changements.
Votre proxmox sera accessible à l'adresse https://ip:8006
Nettoyage des paquets
Si vous ne comptez pas utiliser ZFS, vous pouvez supprimer les paquets suivantes :
apt purge zfs-zed libnvpair3linux libuutil3linux libzfs4linux libzpool5linux zfsutils-linux
Configuration réseau avancée
Ajout d'une IPv6 sur vmbr0
Ajout d'un réseau interne vmbr1
Nous allons voir comment créer un réseau interne avec proxmox, c'est à dire, un réseau qui ne sera attaché à aucune interface réseau physique. L'intérêt est d'offrir un débit bien supérieur pour les communications entre les VMs.
Ajoutez les lignes suivantes dans /etc/network/interfaces
:
auto vmbr1 iface vmbr1 inet static address 192.168.0.1 netmask 255.255.255.0
Note : vous pouvez faire de même en ipv6 :
- il faut utiliser le range Unique Local Address (ULA) fd00::/8 (http://en.wikipedia.org/wiki/Unique_Local_Address)
- pour générer votre ULA : http://pfoo.unscdf.org/ula/gen-ula.html
Sécurisation de base
Je vous conseil de commencer à sécuriser votre ssh :
- désactivez le login root (directive
PermitRootLogin no
dans/etc/ssh/sshd_config
). Pensez néanmoins à créer un utilisateur pour vous connecter en ssh avant de désactiver le login root. - utilisez la directive
allowusers <user>
dans/etc/ssh/sshd_config
pour n'autoriser que certains utilisateurs à se connecter en ssh.
Il est aussi préférable d'installer le serveur de temps NTP à la place de systemd-timesyncd:
apt install chrony apt purge systemd-timesyncd
Configurer le serveur mail postfix
Configuration
Certificats SSL
Si vous avez votre propre autorité ssl, vous pouvez générer votre propre certificat. Si ce n'est pas le cas, vous pouvez toujours aller lire ceci afin d'apprendre à créer votre autorité ssl.
Ajoutez les lignes suivantes dans /etc/ssl/openssl.cnf
:
[POSTFIX] nsComment = "SMTP Server Certificate" subjectKeyIdentifier = hash authorityKeyIdentifier = keyid,issuer:always issuerAltName = issuer:copy basicConstraints = critical,CA:FALSE keyUsage = critical, digitalSignature, nonRepudiation, keyEncipherment nsCertType = server extendedKeyUsage = serverAuth
Puis générez la clé et le certificat, et signez le avec votre autorité (int_ca dans mon cas) :
openssl req -config /etc/ssl/openssl.cnf -nodes -newkey rsa:2048 -keyout postfix.key -out postfix.req openssl ca -config /etc/ssl/openssl.cnf -name int_ca -extensions POSTFIX -in postfix.req -out postfix.pem
Déplacez les fichiers dans le répertoire /etc/postfix/ssl
:
mkdir /etc/postfix/ssl mv postfix.key /etc/postfix/ssl/ mv postfix.pem /etc/postfix/ssl/ chmod 600 /etc/postfix/ssl/* cat /etc/ssl/root_ca/root_ca.pem /etc/ssl/int_ca/int_ca.pem > /etc/postfix/ssl/ca_chain.pem
Il faut encore modifier /etc/postfix/main.cf
:
smtpd_tls_cert_file=/etc/postfix/ssl/postfix.pem smtpd_tls_key_file=/etc/postfix/ssl/postfix.key smtpd_tls_CAfile=/etc/postfix/ssl/ca_chain.pem smtpd_use_tls=yes smtp_tls_cert_file=/etc/postfix/ssl/postfix.pem smtp_tls_key_file=/etc/postfix/ssl/postfix.key smtp_tls_CAfile=/etc/postfix/ssl/ca_chain.pem smtpd_tls_security_level=may smtp_tls_security_level=may smtpd_tls_loglevel = 1 smtp_tls_loglevel = 1 #smtp_tls_policy_maps = hash:/etc/postfix/tls_policy
Utiliser son propre certificat SSL proxmox avec un signataire intermédiaire
Depuis Proxmox 5.2, il n'est plus recommandé d'adapter manuellement les fichiers contenant les certificats et clés privés de proxmox.
Cependant, vous pouvez placer directement votre clé privé dans le fichier /etc/pve/local/pveproxy-ssl.key
et la chaîne de certification dans le fichier /etc/pve/local/pveproxy-ssl.pem
. Vous pouvez également déposer ces fichiers via la webui de proxmox au niveau de chaque serveur.
Surveiller l'état des disques avec SMART
Commencez par installer le paquet smartmontools :
apt install smartmontools
Vérifiez que vos disques gèrent smart et qu'il est activé :
smartctl -i /dev/sda smartctl -i /dev/sdb
Si smart n'est pas activé, essayez de l'activer comme ceci :
smartctl -s on /dev/sda smartctl -s on /dev/sdb
Vérifiez le statut de santé de vos disques :
smartctl -H /dev/sda smartctl -H /dev/sdb
S'il indique PASSED
c'est bon de ce côté. S'il vous indique FAILED
, sauvegardez immédiatement vos données !
Vérifiez la présence d'erreurs dans le log smart :
smartctl -l error /dev/sda smartctl -l error /dev/sdb
Si vous voyez No Errors Logged
ou quelques erreurs, c'est bon. S'il y eu a beaucoup, il faut envisager de changer le disque.
Le fichier de configuration de smartd est /etc/smartd.conf
. Commentez la ligne DEVICESCAN
puis ajoutez les lignes suivantes pour surveiller les deux disques durs :
/dev/sda -a -o on -S on -s (S/../.././02|L/../../6/03) -m vous@domain.tld /dev/sdb -a -o on -S on -s (S/../.././02|L/../../6/03) -m vous@domain.tld
Nous activons la surveillance globale (-a
), la vérification automatique offline, (-o on
), la sauvegarde automatique des attributs (-S on
et lançons un short self test
tous les jours à 2h du matin, et un long self test
tous les samedi à 3h du matin. Si des erreurs sont détectés, un email est envoyé à vous@domain.tld.
Relancez smartd :
/etc/init.d/smartmontools restart
Pour plus d'information sur SMART et ses arguments : Diagnostic smart d'un disque
Protégez votre proxmox
Désactiver le login root sur l'interface proxmox
Avant toute manipulation, n'oubliez pas de créer un utilisateur ayant les droits d'administration pour accéder à l'interface de proxmox
Via l'interface proxmox
Dans Datacenter > Permissions > Users : Editez l'utilisateur root et décochez la case Enabled
Via les droits linux
passwd --lock root
Attention, dans ce cas, vous ne pourrez plus vous loguer en root sur le serveur par ssh (sauf si vous avez une clé ssh défini), écran ou kvm !
Via PAM
Vous pouvez désactiver le login pam en éditant /etc/pam.d/other
et en y ajoutant, en début de fichier, les lignes suivantes :
auth required pam_deny.so auth required pam_warn.so account required pam_deny.so account required pam_warn.so
Attention, cette méthode peut avoir des effets de bord si d'autres programmes utilisent l'entité pam/other
Désactiver rpcbind
Si vous n'utilisez pas de montage NFS vous pouvez désactiver rpcbind.
Editez /etc/default/nfs-common
et passez l'argument suivant :
NEED_STATD=no
Puis désactivez rpcbind :
systemctl disable rpcbind.target systemctl disable rpcbind.socket systemctl disable rpcbind.service systemctl stop rpcbind.target systemctl stop rpcbind.socket systemctl stop rpcbind.service
Eviter les reboots accidentels avec molly-gard
apt install molly-guard
Protection SSH avec sshguard
Protéger l'interface web avec fail2ban
aptitude install fail2ban
Créez le fichier /etc/fail2ban/jail.local
contenant :
[DEFAULT] # "ignoreip" can be an IP address, a CIDR mask or a DNS host ignoreip = 127.0.0.1 bantime = 1800 maxretry = 3 # # Destination email address used solely for the interpolations in # jail.{conf,local} configuration files. destemail = root@localhost action = %(action_mwl)s [ssh] enabled = false [sshd] enabled = false [proxmox] enabled = true port = https,http,8006 filter = proxmox logpath = /var/log/daemon.log maxretry = 4 bantime = 3600 #1 heure
Créez le fichier /etc/fail2ban/filter.d/proxmox.conf
:
[Definition] failregex = pvedaemon\[.*authentication failure; rhost=<HOST> user=.* msg=.* ignoreregex =
Vous pouvez tester votre configuration avec la commande fail2ban-regex /var/log/daemon.log /etc/fail2ban/filter.d/proxmox.conf
Relancez fail2ban :
/etc/init.d/fail2ban restart
firewall iptables
Création d'un stockage pour les VMs
Créez les partitions sda4 et sdb4 au moyen de gdisk (EFI) ou parted (BIOS).
Créez sur ces partitions un raid :
mdadm --create --verbose /dev/md4 --level=1 --raid-devices=2 /dev/sda4 /dev/sdb4
Maintenez à jour mdadm.conf
et votre initramfs afin de conserver le bon naming du raid après reboot :
mdadm --examine --scan >> /etc/mdadm/mdadm.conf update-initramfs -u
Puis initialisez-y un LVM :
pvcreate /dev/md4 vgcreate main /dev/md4
Il ne reste plus qu'a déclarer ce Volume Group LVM dans l'interface proxmox.
VM qemu/kvm
Télécharger vos images
Vous pouvez placer les iso dans /var/lib/vz/template/iso/
avec wget
par exemple.
Notez que l'interface graphique de proxmox propose également une fonction d'upload.
Créer votre première VM
Une fois la VM crées dans l'interface proxmox, je vous recommande d'écrire des zero sur son disque afin de réduire la taille des futurs backups. Si votre vm porte le numéro 100 et possède un seul disque :
dd if=/dev/zero | pv -ptrb | dd of=/dev/main/vm-100-disk1 bs=1M
Configuration réseau en bridge vmbr0 (ip public)
Configuration réseau en bridge vmbr1 (ip locale)
Configuration réseau de la VM :
iface eth0 inet static address 192.168.0.2 netmask 255.255.255.0 gateway 192.168.0.1
Règle iptables à ajouter sur l'hôte :
iptables -t nat -A POSTROUTING -s 192.168.0.2 -o vmbr0 -j SNAT --to IP-PUBLIC-DE-VOTRE-HOTE
Si vous souhaitez rendre accessible l'un des services de la VM depuis l'ip de l'hote sur un port sépcifique :
iptables -t nat -A PREROUTING -p tcp -d <ip de l'hote> --dport <port souhaité> -i vmbr0 -j DNAT --to-destination 192.168.0.2:port
Bloquer le spoofing d'adresse mac
Sur l'hyperviseur, installez ebtables
:
aptitude install ebtables
Admettons ensuite que votre VM a comme adresse ip 84.93.26.3
et que son adresse mac doit être 52:54:00:00:98:b6
:
ebtables -A FORWARD -p IPv4 --ip-src 84.93.26.3 -s ! 52:54:00:00:98:b6 -j DROP
Vous pouvez faire de même pour l'ipv6. Dans l'exemple suivant, seul le bloc ipv6 2a01:d4h:123b:100::/56
est utilisable par la vm :
ebtables -A FORWARD -p IPv6 --ip6-src 2a01:d4h:123b:100::/56 -s ! 52:54:00:00:08:b1 -j DROP
Importer une VM depuis vmware ESXi
qm et modification des VMs en ligne de commande
Monter les partitions d'une VM depuis l'host
# losetup /dev/loop0 /dev/main/vm-101-disk-1 # fdisk -lu /dev/loop0 Disk /dev/loop0: 10.7 GB, 10737418240 bytes 255 heads, 63 sectors/track, 1305 cylinders, total 20971520 sectors Units = sectors of 1 * 512 = 512 bytes Disk identifier: 0x0002f94d Device Boot Start End Blocks Id System /dev/loop0p1 * 2048 20013055 10005504 83 Linux /dev/loop0p2 20015102 20969471 477185 5 Extended /dev/loop0p5 20015104 20969471 477184 82 Linux swap / Solaris
pour la partition 1 : start*blocksize = offset donc 2048*512 = 1048576
losetup /dev/loop1 -o 1048576 /dev/main/vm-101-disk-1
Et enfin :
mount /dev/loop1 /mnt
Quand vous avez terminé vos modifications :
umount /mnt losetup -d /dev/loop1 losetup -d /dev/loop0
Si la partition que vous voulez monter est un LVM
Scannez les nouveaux volumes :
lvm pvscan
Activez les groupes :
lvm vgchange -ay
listez les lvms avec :
lvm lvs
Les LV devraient apparaître dans /dev/mapper/
Quand vous avez terminé :
- démontez les LV
- Désactivez le groupe avec
vgchange -an
- désactivez le loopback :
losetup -d /dev/loop0
Augmenter la taille du disque d'une VM
Coupez la VM.
Sur l'host pour modifier la taille du disque 1 de la vm 110 ) 140G :
lvextend -L 140G /dev/main/vm-110-disk-1
Il faut ensuite, sur la vm lancée, utiliser resize2fs
Migrer une VM vers un autre serveur manuellement (pas de cluster) avec un downtime minimum
Nous allons voir comment migrer une VM proxmox stockée sur un LVM d'un serveur à un autre, et ce, en minimisant au maximum le downtime. Pour cela, nous allons coupler la fonctionnalité de snapshot de lvm avec un petit script (lvmsync) qui permet de ne transférer que les blocs modifiés d'un snapshot.
Installez dmsetup et ruby (1.8 minimum) sur le serveur d'origine et de destination :
aptitude install dmsetup ruby
Récupérez lvmsync
sur https://github.com/mpalmer/lvmsync et placez le dans /sbin/ sur les serveurs d'origine et de destination.
Dans cet exemple, nous allons migrer la vm 102 disposant d'un seul disque virtuel nommé vm-102-disk-1 et stocké dans le vg main du serveur server1.domain.tld vers le serveur server2.domain.tld. Pour commencer, créez un snapshot de votre vm sur server1 :
lvcreate --snapshot -L200G -n 102-lvmsync main/vm-102-disk-1
Désormais, tous les io de cette vm seront stockés dans le snapshot 102-lvmsync.
Sur votre nouveau serveur, créez une VM identique à celle de votre premier serveur (surtout en qui concerne la taille de disque). Depuis server1, copiez avec un dd over ssh le disque d'origine de votre vm vers votre nouveau serveur.
dd if=/dev/main/vm-102-disk-1 | pv -ptrb | ssh -o "Compression no" root@server2.domain.tld "dd of=/dev/main/vm-102-disk-1 bs=100M"
Note : sur un réseauu 100Mbps utilisez plutôt -o "Compressionlevel 1"
Une fois la copie terminée, coupez la vm 102 sur server1, puis lancez lvmsync sur le snapshot (toujours sur server1) :
lvmsync /dev/main/102-lvmsync server2.domain.tld:/dev/main/vm-102-disk-1
Une fois le travail de lvmsync achevé, il ne nous reste plus qu'a relancer la vm sur server2
A titre d'information, si vous voulez merger le snapshot de la vm 102 sur server 1, tapez :
lvconvert --merge /dev/main/102-lvmsync
Conteneur LXC
Empêcher la mise à jour automatique de certains fichiers de configuration système du conteneur
Certains fichiers de configuration du conteneur sont mis à jour automatiquement à chaque démarrage (voir https://pve.proxmox.com/pve-docs/pve-admin-guide.html#_guest_operating_system_configuration)
On peut empêcher la mise à jour de ces fichiers en créant un fichier .pve-ignore.NOM
Par exemple, /etc/.pve-ignore.resolv.conf
empêchera le fichier /etc/resolv.conf
d'être mis à jour à chaque démarrage.
Annexes
Problème de layout dans la console vnc
Dans l'interface web de proxmox : datacenter > option > passez Keyboard de default
à French
.
Erreurs du type IPv6 addrconf: prefix with wrong length 56
Cette erreur est typique sous linux si les routeurs de votre serveur annoncent des blocs IPv6 /56 alors que vous configurez des /64.
Ajouter les lignes suivantes dans un fichier /etc/sysctl.d/local.conf
:
net.ipv6.conf.all.autoconf = 0 net.ipv6.conf.default.autoconf = 0 net.ipv6.conf.eno3.autoconf = 0 net.ipv6.conf.vmbr0.autoconf = 0
Terminez par relancer procps :
/etc/init.d/procps restart
paramètre sysctl ipv6 non appliqué au boot
Ajoutez le module ipv6 dans /etc/modules afin d'assurer le chargement d'ipv6 avant l’exécution de sysctl :
echo ipv6 >> /etc/modules
LVM inaccessible depuis l'host
lvm pvscan lvm vgchange -ay
L'interface web ne fonctionne pas et la commande qm retourne une erreur ipcc_send_rec failed: Connection refused
Vérifiez la présence de fichiers et dossiers dans /etc/pve/
. Si ce dossier est vide, c'est probablement que votre fichier /etc/hosts
est mal configuré.
Essayez de relancer pve-cluster
:
/etc/init.d/pve-cluster restart
Si vous avez une erreur ou un warning, lancez la commande pmxcfs. Vous devriez obtenir ceci :
$# pmxcfs Jan 21 15:28:19 proxmox pmxcfs[1846]: Unable to get local IP address (pmxcfs.c:721:main)
Vérifiez alors que le contenu de /etc/hostname
est défini dans /etc/hosts
.
Si par exemple /etc/hostname
contient proxmox.domain.tld
vous devriez avoir la ligne suivante dans /etc/hosts
:
VOTREIP proxmox.domain.tld proxmox
Pas assez d'interfaces loopback
Créer le fichier /etc/modprobe.d/local-loop.conf
contenant :
options loop max_loop=64
Vous pouvez ensuite redémarrer ou recharger le module loop :
rmmod loop && modprobe loop
Défragmentation LVM : exemple
hub:~# pvdisplay --maps --- Physical volume --- PV Name /dev/sda4 VG Name main PV Size 1.76 TB / not usable 456.00 KB Allocatable yes PE Size (KByte) 4096 Total PE 461649 Free PE 208721 Allocated PE 252928 PV UUID PUqV5Q-WRW2-n20t-eFVM-CA1r-RhDl-2RTJHq --- Physical Segments --- Physical extent 0 to 7935: Logical volume /dev/main/vm-101-disk-1 Logical extents 0 to 7935 Physical extent 7936 to 72191: Logical volume /dev/main/vm-101-disk-2 Logical extents 0 to 64255 Physical extent 72192 to 136703: Logical volume /dev/main/vm-102-disk-1 Logical extents 0 to 64511 Physical extent 136704 to 144895: Logical volume /dev/main/vm-103-disk-1 Logical extents 0 to 8191 Physical extent 144896 to 209151: Logical volume /dev/main/vm-103-disk-2 Logical extents 0 to 64255 Physical extent 209152 to 214271: Logical volume /dev/main/vm-104-disk-1 Logical extents 0 to 5119 Physical extent 214272 to 227327: Logical volume /dev/main/vm-104-disk-2 Logical extents 0 to 13055 Physical extent 227328 to 282111: FREE Physical extent 282112 to 307711: Logical volume /dev/main/vm-108-disk-1 Logical extents 0 to 25599 Physical extent 307712 to 461648: FREE
Comme vous pouvez le voir, on a un trou "vide" entre l'extent 227328 et 282111, puis à nouveau des données entre l'extent 282112 et 307711.
Pour combler ce trou, nous allons déplacer les données des /dev/main/vm-108-disk-1 situés entre les extents 282112 et 307711 (soit 25599 extents au total) vers l'espace libre avec pvmove
:
pvmove /dev/sda4:282112-307711 /dev/sda4:227328-252927 --alloc anywhere
Notez qu'il faut attribuer exactement le même nombre d'extents à la destination qu'à l'origine : 227328 + 25599 = 252927
Oups: j'ai supprimé le mauvais lvm
Pas de panique, mais ne bougez plus ! Pour l'instant, seul les métadonnées du lvm sont impactés.
Et comme c'est bien foutu, lvm conserve un backup des anciennes metadonnées après chaque modification. Ces archives sont situés dans /etc/lvm/archive/
. Les fichiers y sont nommés sous la forme vg_XXXX-YYYYYYY.vg. Normalement, le fichier ayant le XXXX le plus élevé sera celui de l'état précédent votre erreur.
Pour vérifier que vous avez sélectionné le bon fichier, vous pouvez l'ouvrir avec nano et regarder si l'état du lvm dans cette archive correspond a ce que vous attendez.
Pour restaurer l'archive des métadonnées main_00007-587941649.vg pour le vg main :
vgcfgrestore -f /etc/lvm/archive/main_00007-587941649.vg main lvm vgchange -ay
Votre volume devrait être de retour.
Il faut encore vérifier que la table de partition contenu sur ce lvm n'a pas morphlé. En admettant que /dev/main/vm-101-disk-1 est la lvm que vous venez de restaurer :
# losetup /dev/loop0 /dev/main/vm-101-disk-1 # fdisk -lu /dev/loop0 Disk /dev/loop0: 10.7 GB, 10737418240 bytes 255 heads, 63 sectors/track, 1305 cylinders, total 20971520 sectors Units = sectors of 1 * 512 = 512 bytes Disk identifier: 0x0002f94d Device Boot Start End Blocks Id System /dev/loop0p1 * 2048 20013055 10005504 83 Linux /dev/loop0p2 20015102 20969471 477185 5 Extended /dev/loop0p5 20015104 20969471 477184 82 Linux swap / Solaris
Si vous voyez ça, c'est bon, vous êtes sauvés ! Si ce n'est pas le cas, continuez à lire ;)
Récupération de la table de partition
Si fdisk vous envois chier avec un message du style Disk /dev/loop0 doesn't contain a valid partition table
, il va falloir récupérer la table de partition.
Installez testdisk :
aptitude install testdisk
Lancez le:
# losetup /dev/loop0 /dev/main/vm-101-disk-1 # testdisk /dev/loop0
Selectionez le media /dev/loop0
et validez avec enter
.
Au menu suivant, sélectionnez intel
comme type de table de partition.
Au menu suivant, sélectionnez analyse
A l'écran suivant, tapez enter.
Avec de la chance, testdisk retrouvera vos partitions. Une fois qu'il aura terminé de travailler, il ne restera plus qu'à taper sur enter encore une fois, puis demander à testdisk de sauvegarder la table de partition
L'interface proxmox n'affiche pas les disques de certaines VMs
Ceci arrive typiquement si vous avez créé un volume logique à la main sans y ajouter le bon tag.
Vérifiez la présence des tags sur vos LV avec la commande lvs --options 'vg_name,lv_name,lv_size,tags'
:
~# lvs --options 'vg_name,lv_name,lv_size,tags' VG LV LSize LV Tags main vm-100-disk-1 2.00g pve-vm-100 main vm-101-disk-1 20.00g
Comme vous le voyez, le lv de la vm 101 n'est pas tagué. Vous pouvez ajouter le tag avec lvchange --addtag pve-vm-101 /dev/main/vm-101-disk-1
:
~# lvchange --addtag pve-vm-101 /dev/main/vm-101-disk-1 ~# lvs --options 'vg_name,lv_name,lv_size,tags' VG LV LSize LV Tags main vm-100-disk-1 2.00g pve-vm-100 main vm-101-disk-1 16.00g pve-vm-101
Si cela ne fonctionne pas, essayez de passer un petit coup de qm rescan