« Proxmox3 » : différence entre les versions

Aller à la navigation Aller à la recherche
24 752 octets ajoutés ,  23 décembre 2018
 
(137 versions intermédiaires par le même utilisateur non affichées)
Ligne 3 : Ligne 3 :
[[Category:virtualisation]]
[[Category:virtualisation]]


Nous allons voir comment installer proxmox 2 (en beta à l'heure où j'écris ces lignes) avec support d'un raid virtuel (mdadm) et LVM2.
Nous allons voir comment installer proxmox 3 avec support d'un raid software (mdadm) et LVM2.


=Prérequis=
=Prérequis=
Ligne 18 : Ligne 18 :
* <code>/etc/hosts</code>
* <code>/etc/hosts</code>
* <code>/etc/fstab</code>
* <code>/etc/fstab</code>
* <code>/etc/default/rcS</code>
* <code>/etc/mdadm/mdadm.conf</code> si vous disposez d'un raid logiciel
* <code>/etc/mdadm/mdadm.conf</code> si vous disposez d'un raid logiciel
* tout fichier de personnalisation de grub (<code>/etc/grub.d/06_OVHkernel</code> par exemple)
* tout fichier de personnalisation de grub (<code>/etc/grub.d/06_OVHkernel</code> par exemple)
Ligne 24 : Ligne 25 :


Voici le partitionnement que je vais utiliser :
Voici le partitionnement que je vais utiliser :
* /dev/sd*1 15 Go (/) (type de partition : FD)
* /dev/sd*1 15 Go (/) (type de partition : FD00)
* /dev/sd*2 4096 Go (swap) (type de partition : 82)
* /dev/sd*2 4096 Go (swap) (type de partition : 8200)
* /dev/sd*3 reste de l'espace disque (lvm) (type de partition : FD)
* /dev/sd*3 reste de l'espace disque (lvm) (type de partition : FD00)


Nous allons créer le RAID software (raid 1) suivant :
Nous allons créer le RAID software (raid 1) suivant :
Ligne 52 : Ligne 53 :
</pre>
</pre>


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.  
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 de proxmox=


==Installation du système de base==
==Installation du système de base==
<pre>aptitude install debootstrap debian-keyring debian-archive-keyring</pre>


<pre>
<pre>
Ligne 62 : Ligne 65 :
</pre>
</pre>


<pre>debootstrap --arch=amd64 squeeze /mnt http://ftp.fr.debian.org/debian</pre>
<pre>debootstrap --arch=amd64 wheezy /mnt http://ftp.fr.debian.org/debian</pre>


==Configuration de Debian==
==Configuration de Debian==
Ligne 75 : Ligne 78 :
Editez le fichier <code>/etc/apt/sources.list</code> :
Editez le fichier <code>/etc/apt/sources.list</code> :
<pre>
<pre>
deb http://ftp.fr.debian.org/debian squeeze main contrib non-free
deb http://ftp.fr.debian.org/debian wheezy main contrib non-free
deb-src http://ftp.fr.debian.org/debian squeeze main contrib non-free
deb-src http://ftp.fr.debian.org/debian wheezy main contrib non-free


#Sec
#mises à jour de sécurité
deb http://security.debian.org/ squeeze/updates main contrib non-free
deb http://security.debian.org/ wheezy/updates main contrib non-free
deb-src http://security.debian.org/ squeeze/updates main contrib non-free
deb-src http://security.debian.org/ wheezy/updates main contrib non-free


#anciennement debian-volatile
#anciennement debian-volatile
deb http://ftp.fr.debian.org/debian squeeze-updates main contrib non-free
deb http://ftp.fr.debian.org/debian wheezy-updates main contrib non-free
deb-src http://ftp.fr.debian.org/debian squeeze-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
</pre>
</pre>


Ligne 140 : Ligne 146 :
# that require network functionality will fail.
# that require network functionality will fail.
127.0.0.1      localhost.localdomain localhost
127.0.0.1      localhost.localdomain localhost
ipdelamachine    votrehostname
ipdelamachine    machine.domain.tld machine
# The following lines are desirable for IPv6 capable hosts
# The following lines are desirable for IPv6 capable hosts
#(added automatically by netbase upgrade)
#(added automatically by netbase upgrade)
Ligne 159 : Ligne 165 :
<pre>
<pre>
127.0.0.1 localhost
127.0.0.1 localhost
225.182.54.9 proxmox.domain.tld
225.182.54.9 proxmox.domain.tld proxmox
</pre>
</pre>


Ligne 169 : Ligne 175 :
Ajoutez le dépot proxmox dans le fichier /etc/apt/source.list :
Ajoutez le dépot proxmox dans le fichier /etc/apt/source.list :
<pre>
<pre>
# PVE packages provided by proxmox.com
# PVE pve-no-subscription repository provided by proxmox.com, NOT recommended for production use
deb http://download.proxmox.com/debian squeeze pve
deb http://download.proxmox.com/debian wheezy pve-no-subscription
</pre>
</pre>


Ligne 180 : Ligne 186 :
Installez le kernel proxmox :
Installez le kernel proxmox :
<pre>
<pre>
aptitude install pve-kernel-2.6.32-6-pve
aptitude install pve-firmware
aptitude install pve-kernel-2.6.32-26-pve
</pre>
</pre>


Lorsqu'on vous demandera où installer grub, choisissez sda et sdb.
'''Lorsqu'on vous demandera où installer grub, choisissez sda et sdb.'''


Et les headers si vous en avez besoin :
Et les headers si vous en avez besoin :
<pre>
<pre>
aptitude install pve-headers-2.6.32-6-pve
aptitude install pve-headers-2.6.32-26-pve
</pre>
</pre>


Ligne 219 : Ligne 226 :
Si c'est le cas, vous pouvez installer pve :
Si c'est le cas, vous pouvez installer pve :
<pre>aptitude install ntp lvm2</pre>
<pre>aptitude install ntp lvm2</pre>
<pre>aptitude install proxmox-ve-2.6.32</pre>
<pre>aptitude install proxmox-ve-2.6.32 ksm-control-daemon vzprocps</pre>


Supprimez eth0 de votre fichier <code>/etc/network/interfaces</code> et ajoutez y ceci :
Supprimez eth0 de votre fichier <code>/etc/network/interfaces</code> et ajoutez y ceci :
Ligne 254 : Ligne 261 :
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.
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.


===Ajout d'un réseau interne===
A noter que les dernières versions de proxmox désactives ipv6 au niveau kernel. Pensez alors a éditer <code>/etc/modprobe.d/local.conf</code> et remplacez <code>options ipv6 disable=1</code> par <code>options ipv6 disable=0</code>
 
===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.
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.
Ligne 269 : Ligne 278 :
         bridge_stp off
         bridge_stp off
         bridge_fd 0
         bridge_fd 0
        #post-up /etc/pve/kvm-networking.sh
</pre>
</pre>


Si vous voulez utiliser deux interfaces internes, ajoutez la ligne suivante dans <code>/etc/modprobe.d/local</code> :
Si vous voulez utiliser deux interfaces internes, ajoutez la ligne suivante dans <code>/etc/modprobe.d/local.conf</code> :
<pre>
<pre>
options dummy numdummies=2
options dummy numdummies=2
Ligne 286 : Ligne 294 :
* utilisez la directive <code>allowusers <user></code> dans <code>/etc/ssh/sshd_config</code> pour n'autoriser que certains utilisateurs à se connecter en ssh
* utilisez la directive <code>allowusers <user></code> dans <code>/etc/ssh/sshd_config</code> pour n'autoriser que certains utilisateurs à se connecter en ssh


=Utiliser son propre certificat ssl pour l'interface web=
===Protéger l'interface web avec fail2ban===
 
<pre>aptitude install fail2ban</pre>
 
Créez le fichier <code>/etc/fail2ban/jail.local</code> contenant :
<pre>
[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
</pre>
 
Créez le fichier <code>/etc/fail2ban/filter.d/proxmox3.conf</code> :
<pre>
[Definition]
failregex = pvedaemon\[.*authentication failure; rhost=<HOST> user=.* msg=.*
ignoreregex =
</pre>
 
Vous pouvez tester votre configuration avec la commande <code>fail2ban-regex /var/log/daemon.log /etc/fail2ban/filter.d/proxmox3.conf</code>
 
Relancez fail2ban :
<pre>/etc/init.d/fail2ban restart</pre>
 
=Configurer le serveur mail postfix=
 
==Configuration==
Par défaut, postfix fournit une configuration suffisante. Voici les modifications que j'y ai apporté :
<pre>
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
</pre>
 
Il faudra évidemment configurer les directives <code>inet_interfaces</code> <code>myhostname</code> et <code>mydomain</code>
 
==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 [http://wiki.csnu.org/index.php?title=Installation_et_configuration_de_OpenSSL ceci] afin d'apprendre à créer votre autorité ssl.
 
Ajoutez les lignes suivantes dans <code>/etc/ssl/openssl.cnf</code> :
<pre>
[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
</pre>
 
Puis générez la clé et le certificat, et signez le avec votre autorité (onyx_ca dans mon cas) :
<pre>
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
</pre>
 
Déplacez les fichiers dans le répertoire <code>/etc/postfix/ssl</code>:
<pre>
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
</pre>
 
Il faut encore modifier <code>/etc/postfix/main.cf</code> :
<pre>
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
</pre>
 
=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 <code>-----BEGIN CERTIFICATE-----</code> et <code>-----END CERTIFICATE-----</code> ou entre <code>-----BEGIN RSA PRIVATE KEY-----</code> et <code>-----END RSA PRIVATE KEY-----</code>.
 
<br/>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)
 
<br/>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 <code>/etc/mdadm/mdadm.conf</code> et définissez l'adresse à laquelle vous souhaitez recevoir les alertes à la ligne <code>MAILADDR</code>
 
Relancez mdadm :
<pre>/etc/init.d/mdadm restart</pre>
 
=Surveiller l'état des disques avec SMART=
 
Commencez par installer le paquet smartmontools :
<pre>aptitude install smartmontools</pre>
 
Vérifiez que vos disques gèrent smart et qu'il est activé :
<pre>
smartctl -i /dev/sda
smartctl -i /dev/sdb
</pre>
 
Si smart n'est pas activé, essayez de l'activer comme ceci :
<pre>
smartctl -s on -d ata /dev/sda
</pre>
 
Vérifiez le statut de santé de vos disques :
<pre>
smartctl -H /dev/sda
smartctl -H /dev/sdb
</pre>
S'il indique <code>PASSED</code> c'est bon de ce côté. S'il vous indique <code>FAILED</code>, sauvegardez immédiatement vos données !
 
Vérifiez la présence d'erreurs dans le log smart :
<pre>
smartctl -l error /dev/sda
smartctl -l error /dev/sdb
</pre>
 
Si vous voyez <code>No Errors Logged</code> ou quelques erreurs, c'est bon. S'il y eu a beaucoup, il faut envisager de changer le disque.


=Sécuriser et configurer le serveur mail de son host=
Pour autoriser le lancement de smartd, éditez le fichier <code>/etc/default/smartmontools</code> ainsi :
<pre>
# uncomment to start smartd on system startup
start_smartd=yes
 
# uncomment to pass additional options to smartd on startup
smartd_opts="--interval=1800"
</pre>
 
Le fichier de configuration de smartd est <code>/etc/smartd.conf</code>. Commentez la ligne <code>DEVICESCAN</code> puis ajoutez les lignes suivantes pour surveiller les deux disques durs :
<pre>
/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
</pre>
 
Nous activons la surveillance de tous les attributs (-a), et lançons un <code>short self test</code> tous les jours à 2h du matin, et un <code>long self test</code> tous les samedi à 3h du matin. Si des erreurs sont détectés, un email est envoyé à mail@domain.tld.
 
Lancez smart :
<pre>/etc/init.d/smartmontools restart</pre>


=Protéger votre proxmox=
=Protéger votre proxmox=


=Télécharger vos images=
==Eviter les reboots accidentels avec molly-gard==
<pre>aptitude install molly-guard</pre>
 
==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
 
<pre>
#! /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
</pre>


=VMs=
=VMs=
==Télécharger vos images==
Vous pouvez placer les iso dans <code>/var/lib/vz/template/iso/</code> avec <code>wget</code> par exemple.
Notez que l'interface graphique de proxmox propose une fonction d'upload.


==Créer votre première VM==
==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 :
<pre>dd if=/dev/zero | pv -ptrb | dd of=/dev/main/vm-100-disk1 bs=1M</pre>
===Configuration réseau en bridge vmbr0 (ip public)===
===Configuration réseau en bridge vmbr1 (ip locale)===
Configuration réseau de la VM :
<pre>
iface eth0 inet static
address 192.168.0.2
netmask 255.255.255.0
gateway 192.168.0.1
</pre>
Règle iptables à ajouter sur l'hôte :
<pre>iptables -t nat -A POSTROUTING -s 192.168.0.2 -o vmbr0 -j SNAT --to IP-PUBLIC-DE-VOTRE-HOTE</pre>
Si vous souhaitez rendre accessible l'un des services de la VM depuis l'ip de l'hote sur un port sépcifique :
<pre>
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
</pre>
==Bloquer le spoofing d'adresse mac==
Sur l'hyperviseur, installez <code>ebtables</code> :
<pre>aptitude install ebtables</pre>
Admettons ensuite que votre VM a comme adresse ip <code>84.93.26.3</code> et que son adresse mac doit être <code>52:54:00:00:98:b6</code> :
<pre>ebtables -A FORWARD -p IPv4 --ip-src 84.93.26.3 -s ! 52:54:00:00:98:b6 -j DROP</pre>
Vous pouvez faire de même pour l'ipv6. Dans l'exemple suivant, seul le bloc ipv6 <code>2a01:d4h:123b:100::/56</code> est utilisable par la vm :
<pre>ebtables -A FORWARD -p IPv6 --ip6-src 2a01:d4h:123b:100::/56 -s ! 52:54:00:00:08:b1 -j DROP</pre>


==Accéder a une VM avec un client vnc==
==Accéder a une VM avec un client vnc==
Ligne 307 : Ligne 652 :


==Protéger SSH dans une VM==
==Protéger SSH dans une VM==
Reportez vous à [[Protéger SSH avec sshguard]]


==Monter les partitions d'une VM depuis l'host==
==Monter les partitions d'une VM depuis l'host==
<pre>
~# 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
</pre>
pour la partition 1 : start*blocksize = offset
donc 2048*512 = 1 048 576
<pre>losetup /dev/loop1 -o 1048576 /dev/main/vm-101-disk-1 </pre>
Et enfin :
<pre>mount /dev/loop1 /mnt</pre>
Quand vous avez terminé vos modifications :
<pre>
umount /mnt
losetup -d /dev/loop1
losetup -d /dev/loop0
</pre>
===Si la partition que vous voulez monter est un lvm===
Scannez les nouveaux volumes :
<pre>lvm pvscan</pre>
Activez les groupes :
<pre>lvm vgchange -ay</pre>
listez les lvms avec :
<pre>lvm lvs</pre>
Les LV devraient apparaître dans <code>/dev/mapper/</code>
Quand vous avez terminé :
* démontez les LV
* Désactivez le groupe avec <code>vgchange -an</code>
* désactivez le loopback : <code>losetup -d /dev/loop0</code>
==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 :
<pre>lvextend -L 140G /dev/main/vm-110-disk-1</pre>
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 :
<pre>aptitude install dmsetup ruby</pre>
Récupérez <code>lvmsync</code> 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 :
<pre>lvcreate --snapshot -L200G -n 102-lvmsync main/vm-102-disk-1</pre>
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.
<pre>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"</pre>
Note : sur un réseauu 100Mbps utilisez plutôt <code>-o "Compressionlevel 1"</code>
Une fois la copie terminée, coupez la vm 102 sur server1, puis lancez lvmsync sur le snapshot (toujours sur server1) :
<pre>lvmsync /dev/main/102-lvmsync server2.domain.tld:/dev/main/vm-102-disk-1</pre>
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 :
<pre>lvconvert --merge /dev/main/102-lvmsync</pre>


=Annexes=
=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 :
<pre>passwd --lock root</pre>
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 <code>/etc/pam.d/other</code> et en y ajoutant, en début de fichier, les lignes suivantes :
<pre>
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
</pre>
==Problème de layout dans la console vnc==
Dans l'interface web de proxmox : datacenter > option > passez Keyboard de <code>default</code> à <code>French</code>.
==Erreurs du type <code>IPv6 addrconf: prefix with wrong length 56</code> ==
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 <code>/etc/sysctl.conf</code> :
<pre>
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
</pre>
Si vous avez créé d'autres interfaces réseau, il faudra faire selon le même modèle.
Terminez par relancer procps :
<pre>/etc/init.d/procps restart</pre>
==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 :
<pre>echo ipv6 >> /etc/modules</pre>


==LVM inaccessible depuis l'host==
==LVM inaccessible depuis l'host==
Ligne 334 : Ligne 811 :


Si par exemple <code>/etc/hostname</code> contient <code>proxmox.domain.tld</code> vous devriez avoir la ligne suivante dans <code>/etc/hosts</code> :
Si par exemple <code>/etc/hostname</code> contient <code>proxmox.domain.tld</code> vous devriez avoir la ligne suivante dans <code>/etc/hosts</code> :
<pre>VOTREIP proxmox.domain.tld</pre>
<pre>VOTREIP proxmox.domain.tld proxmox</pre>


==Gestion du raid virtuel avec mdadm==
==Gestion du raid virtuel avec mdadm==
<pre>
mdadm --detail /dev/md0
</pre>
<pre>
mdadm --manage /dev/md0 --set-faulty /dev/sdb1
mdadm --manage /dev/md0 --remove /dev/sdb1
mdadm --manage /dev/md0 --add /dev/sdb1
</pre>
Vous pouvez suivre la reconstruction avec
<pre>cat /proc/mdstat</pre>


==Surveillance des disques durs==
==Surveillance des disques durs==
<pre>smartctl -t offline /dev/sda</pre>
Pour vérifier le journal d'erreur
<pre>smartctl -l error /dev/sda</pre>
Les selftests :
<pre>
smartctl -t short /dev/sda
smartctl -t long /dev/sda
smartctl -t conveyance /dev/sda
</pre>
Pour vérifier le journal d'erreur des selftests :
<pre>smartctl -l selftest /dev/sda</pre>
==Pas assez d'interfaces loopback==
Créer le fichier <code>/etc/modprobe.d/local-loop.conf</code> contenant :
<pre>options loop max_loop=64</pre>
Vous pouvez ensuite redémarrer ou recharger le module loop :
<pre> rmmod loop && modprobe loop</pre>
==Défragmentation LVM : exemple==
<pre>
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
</pre>
Comme vous pouvez le voir, on a un trou "vide" entre l'extent <span style="color:blue">227328</span> et 282111, puis à nouveau des données entre l'extent <span style="color:green">282112</span> et <span style="color:red">307711</span>.
Pour combler ce trou, nous allons déplacer les données des  /dev/main/vm-108-disk-1 situés entre les extents <span style="color:green">282112</span> et <span style="color:red">307711</span> (soit 25599 extents au total) vers l'espace libre avec <code>pvmove</code> :<br>
pvmove /dev/sda4:<span style="color:green">282112</span>-<span style="color:red">307711</span> /dev/sda4:<span style="color:blue">227328</span>-<span style="color:pink">252927</span> --alloc anywhere
Notez qu'il faut attribuer exactement le même nombre d'extents à la destination qu'à l'origine : <span style="color:blue">227328</span> + 25599 = <span style="color:pink">252927</span>
==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 <code>/etc/lvm/archive/</code>. 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 :
<pre>
vgcfgrestore -f /etc/lvm/archive/main_00007-587941649.vg main
lvm vgchange -ay
</pre>
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 :
<pre>
# 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
</pre>
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 <code>Disk /dev/loop0 doesn't contain a valid partition table</code>, il va falloir récupérer la table de partition.
Installez testdisk :
<pre>aptitude install testdisk</pre>
Lancez le:
<pre>
# losetup /dev/loop0 /dev/main/vm-101-disk-1
# testdisk /dev/loop0
</pre>
Selectionez le media <code>/dev/loop0</code> et validez avec <code>enter</code>.
Au menu suivant, sélectionnez <code>intel</code> comme type de table de partition.
Au menu suivant, sélectionnez <code>analyse</code>
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 <code>lvs --options 'vg_name,lv_name,lv_size,tags'</code> :
<pre>
~# 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
</pre>
Comme vous le voyez, le lv de la vm 101 n'est pas tagué. Vous pouvez ajouter le tag avec <code>lvchange --addtag pve-vm-101 /dev/main/vm-101-disk-1</code> :
<pre>
~# 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
</pre>
Si cela ne fonctionne pas,  essayez de passer un petit coup de <code>qm rescan</code>
4 234

modifications

Menu de navigation