Proxmox3
Nous allons voir comment installer proxmox 3 avec support d'un raid software (mdadm) et LVM2.
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:
/etc/networks/etc/network/interfaces/etc/resolv.conf/etc/hosts/etc/fstab/etc/default/rcS/etc/mdadm/mdadm.confsi vous disposez d'un raid logiciel- tout fichier de personnalisation de grub (
/etc/grub.d/06_OVHkernelpar exemple)
Partitionnement
Voici le partitionnement que je vais utiliser :
- /dev/sd*1 15 Go (/) (type de partition : FD00)
- /dev/sd*2 4096 Go (swap) (type de partition : 8200)
- /dev/sd*3 reste de l'espace disque (lvm) (type de partition : FD00)
Nous allons créer le RAID software (raid 1) suivant :
- /dev/md0 regroupant /dev/sda1 et /dev/sdb1 (/)
- /dev/md1 regroupant /dev/sda3 et /dev/sdb3 (lvm)
mdadm --create /dev/md0 --level=1 --assume-clean --raid-devices=2 /dev/sda1 /dev/sdb1 mdadm --create /dev/md1 --level=1 --assume-clean --raid-devices=2 /dev/sda3 /dev/sdb3
Création des systèmes de fichiers
mkfs.ext4 /dev/md0 mkswap /dev/sda2 mkswap /dev/sdb2
Création du LVM
pvcreate /dev/md1 vgcreate main /dev/md1
Nous ne créerons pas de volume logique dans le LVM maintenant. Nous laisserons en effet proxmox et KVM se charger de créer des volumes logiques pour chaque VM.
Installation de proxmox
Installation du système de base
aptitude install debootstrap debian-keyring debian-archive-keyring
mount /dev/md0 /mnt
debootstrap --arch=amd64 wheezy /mnt http://ftp.fr.debian.org/debian
Configuration de Debian
mount -o bind /proc /mnt/proc mount -o bind /dev /mnt/dev mount -o bind /sys /mnt/sys chroot /mnt
Editez le fichier /etc/apt/sources.list :
deb http://ftp.fr.debian.org/debian wheezy main contrib non-free deb-src http://ftp.fr.debian.org/debian wheezy main contrib non-free #mises à jour de sécurité deb http://security.debian.org/ wheezy/updates main contrib non-free deb-src http://security.debian.org/ wheezy/updates main contrib non-free #anciennement debian-volatile deb http://ftp.fr.debian.org/debian wheezy-updates main contrib non-free deb-src http://ftp.fr.debian.org/debian wheezy-updates main contrib non-free #anciennement backports #deb http://ftp.fr.debian.org/debian/ wheezy-backports main contrib non-free
Mettez à jour les paquets :
aptitude update aptitude safe-upgrade
Installez les locales et la configuration de console :
aptitude install locales dpkg-reconfigure locales aptitude install console-data dpkg-reconfigure console-data # from arch > french > latin9)
Définissez la zone horaire :
tzselect dpkg-reconfigure tzdata
Installez mdadm pour gérer le raid software :
aptitude install postfix mdadm
Configurez votre /etc/fstab :
# <file system> <mount point> <type> <options> <dump> <pass> /dev/md0 / ext4 errors=remount-ro 0 1 /dev/sda2 swap swap defaults 0 0 /dev/sdb2 swap swap defaults 0 0
/etc/network/interfaces :
# The loopback network interface
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address XXXX
netmask 255.255.255.0
network XXXX
broadcast XXXX
gateway XXXX
/etc/hosts:
# Do not remove the following line, or various programs # that require network functionality will fail. 127.0.0.1 localhost.localdomain localhost ipdelamachine machine.domain.tld machine # The following lines are desirable for IPv6 capable hosts #(added automatically by netbase upgrade) ::1 ip6-localhost ip6-loopback feo0::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters ff02::3 ip6-allhosts
echo votrehostname > /etc/hostname echo votrehostname > /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.domain.tld 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
N'oubliez pas de configurer les dns (ceux de votre hébergeur dédié) :
nameserver XX.XX.XX.XX
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 wheezy pve-no-subscription
Ajoutez la clé du dépôt proxmox :
wget -O- "http://download.proxmox.com/debian/key.asc" | apt-key add - aptitude update
Installez le kernel proxmox :
aptitude install pve-firmware aptitude install pve-kernel-2.6.32-26-pve
Lorsqu'on vous demandera où installer grub, choisissez sda et sdb.
Et les headers si vous en avez besoin :
aptitude install pve-headers-2.6.32-26-pve
Editez le fichier /etc/default/grub et décommentez la ligne suivante :
GRUB_DISABLE_LINUX_UUID=true
Relancez la configuration de grub :
update-grub
aptitude install openssh-server passwd
Vous pouvez maintenant sortir de votre chroot et démonter le système de fichier
exit umount /mnt/sys umount /mnt/dev umount /mnt/proc umount /mnt
puis rebootez sur le disque dur sur votre kernel pve
Installation de proxmox - pve
Une fois le reboot effectué, vérifiez que vous etes sur le bon kernel avec uname -a
Si c'est le cas, vous pouvez installer pve :
aptitude install ntp lvm2
aptitude install proxmox-ve-2.6.32 ksm-control-daemon vzprocps
Supprimez eth0 de votre fichier /etc/network/interfaces et ajoutez y ceci :
auto eth0
iface eth0 inet manual
auto vmbr0
iface vmbr0 inet static
address xxxxx
netmask 255.255.255.0
network xxxx
broadcast xxxx
gateway xxxx
bridge_ports eth0
bridge_stp off
bridge_fd 0
Rebootez une dernière fois pour appliquer les changements.
Votre proxmox sera accessible à l'adresse https://ip:8006)
Configuration réseau avancée
Ajout d'une IPv6 sur vmbr0
Ajoutez les lignes suivantes dans /etc/network/interfaces
iface vmbr0 inet6 static
address <votreipv6>
netmask <votre masque ipv6 (généralement 64)
Il est aussi capital d'adapter votre fichier /etc/hosts en fonction de toutes les IPs (qu'elles soient ipv4 ou ipv6 que vous configurez sur votre hôte). En effet, proxmox se sert du fichier /etc/hosts pour déterminer des éléments de configuration locale.
A noter que les dernières versions de proxmox désactives ipv6 au niveau kernel. Pensez alors a éditer /etc/modprobe.d/local.conf et remplacez options ipv6 disable=1 par options ipv6 disable=0
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
broadcast 192.168.0.255
bridge_ports dummy0
bridge_stp off
bridge_fd 0
Si vous voulez utiliser deux interfaces internes, ajoutez la ligne suivante dans /etc/modprobe.d/local.conf :
options dummy numdummies=2
Note : vous pouvez faire de même en ipv6 :
- il faut utiliser le range fd00::/8 (http://en.wikipedia.org/wiki/Unique_Local_Address)
- pour générer votre ula : http://pfoo.csnu.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 nodans/etc/ssh/sshd_config) - utilisez la directive
allowusers <user>dans/etc/ssh/sshd_configpour n'autoriser que certains utilisateurs à se connecter en ssh
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
[proxmox3]
enabled = true
port = https,http,8006
filter = proxmox3
logpath = /var/log/daemon.log
maxretry = 4
bantime = 3600 #1 heure
Créez le fichier /etc/fail2ban/filter.d/proxmox3.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/proxmox3.conf
Relancez fail2ban :
/etc/init.d/fail2ban restart
Configurer le serveur mail postfix
Configuration
Par défaut, postfix fournit une configuration suffisante. Voici les modifications que j'y ai apporté :
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no
disable_vrfy_command = yes
smtpd_helo_required = yes
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
mydomain = proxmox.domain.tld
append_dot_mydomain = yes
myhostname = proxmox.domain.tld
myorigin = /etc/mailname
mydestination = proxmox.domain.tld, localhost.localdomain, localhost
relayhost =
smtp_sasl_password_maps =
mynetworks = 127.0.0.0/8, [::1], ipv4_de_votre_serveur, [ipv6_de_votre_serveur]
relay_domains =
relay_recipient_maps =
inet_interfaces = 127.0.0.1, [::1], ipv4_de_votre_serveur, [ipv6_de_votre_serveur]
inet_protocols = all
alias_maps = proxy:hash:/etc/aliases
smtpd_sasl_auth_enable = no
smtpd_sasl_local_domain = $myhostname
smtpd_sender_restrictions =
reject_unknown_sender_domain,
reject_non_fqdn_sender
smtpd_recipient_restrictions =
permit_inet_interfaces,
permit_mynetworks,
permit_sasl_authenticated,
reject_non_fqdn_hostname,
reject_non_fqdn_sender,
reject_non_fqdn_recipient,
reject_unauth_destination
smtpd_client_restrictions =
permit_inet_interfaces,
permit_mynetworks,
permit_sasl_authenticated,
reject_unauth_pipelining
smtpd_helo_restrictions =
permit_inet_interfaces,
permit_mynetworks,
permit_sasl_authenticated,
reject_invalid_helo_hostname,
reject_non_fqdn_helo_hostname,
reject_unknown_helo_hostname
smtpd_data_restrictions =
permit_inet_interfaces,
permit_mynetworks,
permit_sasl_authenticated,
reject_unauth_pipelining
Il faudra évidemment configurer les directives inet_interfaces myhostname et mydomain
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é (onyx_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 onyx_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/onyx_ca/onyx_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 sa propre CA pour le certificat proxmox
Attention, pour que les consoles vnc fonctionnent, les fichiers .pem et .key ne doivent contenir rien d'autre que les données contenues entre -----BEGIN CERTIFICATE----- et -----END CERTIFICATE----- ou entre -----BEGIN RSA PRIVATE KEY----- et -----END RSA PRIVATE KEY-----.
Admettons que vous avez la chaine de certification suivante suivante :
- une CA : root_ca.pem
- une ca intermédiaire 1 int_ca.pem (signée par root_ca)
- un certificat serveur proxmox : proxmox.pem et proxmox.key (signé par proxmox_ca)
La configuration de proxmox se fera de la manière suivante :
- Le fichier int_ca.key va dans /etc/pve/priv/pve-root-ca.key :
- cp int_ca.key /etc/pve/priv/pve-root-ca.key
- Le fichier proxmox.key va dans /etc/pve/local/pve-ssl.key
- cp proxmox.key /etc/pve/local/pve-ssl.key
- Les fichiers int_ca.pem et root_ca vont dans /etc/pve/pve-root-ca.pem DANS CET ORDRE :
- cat int_ca.pem root.pem > /etc/pve/pve-root-ca.pem
- Le fichier proxmox.pem va dans /etc/pve/local/pve-ssl.pem :
- cat proxmox.pem > /etc/pve/local/pve-ssl.pem
Attention ! L'ordre dans lequel vous entrez les fichiers est important !
Notez que root_ca.pem devrait être importé dans les certificats trusté de votre navigateur ainsi que dans votre configuration du plugin java de votre navigateur.
Notez que si vous créez un cluster, la CA utilisée sera *partagée* entre tous les nodes du cluster ! Si vous générez certains certificats manuellement dans votre cluster, veillez à maintenant le fichier /etc/pve/priv/pve-root-ca.srl à jour.
Configurer les alertes raid software
Une fois votre serveur mail configuré, éditez le fichier /etc/mdadm/mdadm.conf et définissez l'adresse à laquelle vous souhaitez recevoir les alertes à la ligne MAILADDR
Relancez mdadm :
/etc/init.d/mdadm restart
Surveiller l'état des disques avec SMART
Commencez par installer le paquet smartmontools :
aptitude 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 -d ata /dev/sda
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.
Pour autoriser le lancement de smartd, éditez le fichier /etc/default/smartmontools ainsi :
# uncomment to start smartd on system startup start_smartd=yes # uncomment to pass additional options to smartd on startup smartd_opts="--interval=1800"
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 mail@domain.tld /dev/sdb -a -o on -S on -s (S/../.././02|L/../../6/03) -m mail@domain.tld
Nous activons la surveillance de tous les attributs (-a), 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é à mail@domain.tld.
Lancez smart :
/etc/init.d/smartmontools restart
Protéger votre proxmox
Eviter les reboots accidentels avec molly-gard
aptitude install molly-guard
sshguard
http://wiki.csnu.org/index.php?title=Prot%C3%A9ger_SSH_avec_sshguard
firewall iptables
Voici un petit script pour bloquer l'accès ssh, ftp et proxmox aux ips non française
Attention, ce script doit être lancé APRÈS sshguard, sinon sshguard ne sera plus efficace
#! /bin/bash
trusted_ipv6="blocipv6_1 blocipv6_2"
db=fr.zone
wget http://www.ipdeny.com/ipblocks/data/countries/fr.zone
trusted=$(egrep -v "^#|^$" $db)
rm $db
echo "clearing iptables"
/sbin/iptables -t filter -D INPUT -p tcp -i vmbr0 -m multiport --dports 21,22,8006 -j firewall
/sbin/iptables -F firewall
/sbin/iptables -X firewall
echo "adding rules to iptables"
/sbin/iptables -t filter -N firewall
/sbin/iptables -t filter -A INPUT -p tcp -i vmbr0 -m multiport --dports 21,22,8006 -j firewall
for ipblock in $trusted; do
/sbin/iptables -t filter -A firewall -s $ipblock -j ACCEPT
done
/sbin/iptables -t filter -A firewall -j DROP
echo "clearing ip6tables"
/sbin/ip6tables -t filter -D INPUT -p tcp -i vmbr0 -m multiport --dports 21,22,8006 -j firewall
/sbin/ip6tables -F firewall
/sbin/ip6tables -X firewall
echo "adding rules to ip6tables"
/sbin/ip6tables -t filter -N firewall
/sbin/ip6tables -t filter -A INPUT -p tcp -i vmbr0 -m multiport --dports 21,22,8006 -j firewall
for ipv6 in $trusted_ipv6; do
/sbin/ip6tables -t filter -A firewall -s $ipv6 -j ACCEPT
done
/sbin/ip6tables -t filter -A firewall -j DROP
VMs
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 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
Accéder a une VM avec un client vnc
http://pve.proxmox.com/wiki/Vnc_2.0
Importer une VM depuis vmware ESXi
qm et modification des VMs en ligne de commande
Protéger SSH dans une VM
Reportez vous à Protéger SSH avec sshguard
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 = 1 048 576
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 -c blowfish -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
Annexes
Désactiver le login root sur l'interface proxmox
Cela n'est malheureusement pas directement supporté par l'interface web, la meilleure solution reste de désactiver le mot-de-passe de l'utilisateur root :
passwd --lock root
Attention 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 !
N'oubliez pas de créer avant cela un utilisateur ayant les droits d'administration pour accéder à l'interface de proxmox
Une autre solution consiste à créer des utilisateurs pve au lieu de pam, et de 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 #password required pam_deny.so #session required pam_deny.so
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 votre fichier /etc/sysctl.conf :
net.ipv6.conf.all.autoconf = 0 net.ipv6.conf.default.autoconf = 0 net.ipv6.conf.lo.autoconf = 0 net.ipv6.conf.eth0.autoconf = 0 net.ipv6.conf.vmbr0.autoconf = 0 net.ipv6.conf.vmbr1.autoconf = 0 net.ipv6.conf.dummy0.autoconf = 0
Si vous avez créé d'autres interfaces réseau, il faudra faire selon le même modèle.
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, apache n'est pas lancé, 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
Gestion du raid virtuel avec mdadm
mdadm --detail /dev/md0
mdadm --manage /dev/md0 --set-faulty /dev/sdb1 mdadm --manage /dev/md0 --remove /dev/sdb1 mdadm --manage /dev/md0 --add /dev/sdb1
Vous pouvez suivre la reconstruction avec
cat /proc/mdstat
Surveillance des disques durs
smartctl -t offline /dev/sda
Pour vérifier le journal d'erreur
smartctl -l error /dev/sda
Les selftests :
smartctl -t short /dev/sda smartctl -t long /dev/sda smartctl -t conveyance /dev/sda
Pour vérifier le journal d'erreur des selftests :
smartctl -l selftest /dev/sda
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