Update 19/05/2014 : Ce billet a été écrit en 2012. Les managers coté OVH et Online ayant (heureusement) évolués depuis, les informations et captures données dans ce billet ne sont plus forcément à jour. J’essaierai d’actualiser la partie OVH mais je ne pourrai le faire pour Online, n’ayant plus de services chez eux. Bonne lecture !

Après avoir utilisé VMware  Server pendant plus d’un an, je me suis décidé l’année dernière à passer sur Proxmox. Pourquoi ? Simplement parce qu’hébergeant principalement des VMs Linux et ayant peu de moyens (financiers) pour faire tourner le tout, je me suis dit qu’il serait bon de pouvoir profiter d’une solution de type container qui permet de mieux mutualiser les ressources (noyau) tout en gardant le principe d’isolation (OpenVZ). Proxmox étant chaudement recommandé sur les mailing lists OVH et un peu partout sur le web, je me suis donc lancé dans l’aventure.

J’ai installé pour la première fois Proxmox sur un serveur OVH, j’avais laissé le partitionnement par défaut. Le problème est que, par défaut, ce partitionnement ne permet pas de profiter d’une feature plus qu’intéressante de Proxmox : La sauvegarde en mode « snapshot ».

Pour rappel : Pour pouvoir faire ce type de sauvegarde, proxmox a besoin d’un espace libre (i.e. non partitionné) dans votre groupe LV où il va monter une partiton virtuelle, faire un rsync entre la partition où est stockée la VM que vous voulez sauvegarder et la nouvelle partiton. Une fois le rsync fait, proxmox en relancera un pour copier les fichiers qui auraient pu changer au cours de la copie. Une fois fini, il a donc accès à « un instantané » de la VM que vous souhaitez backuper. Il peut donc faire un tar de la vm tranquilement, qu’il enregistrera dans /vz/dump (par exemple), puis il supprimera la partition qu’il a créée à la volée.

Donc pour pouvoir profiter de ce mode de sauvegarde, il faut … un espace vierge.

Installation chez OVH

Par défaut chez OVH, vous aurez ce type de partitionnement :

Comme nous l’avons vu précédemment, il nous faudrait de l’espace libre et puis personnellement j’aime bien faire une partition pour « /var/lib/vz/dump« , cela me permet de ne pas remplir /vz en cas de problème.

Choisissez donc dans le manager « Partitionnement personnalisé » au lieu du « Partitionnement par défaut de la distribution Proxmox ». Cela va nous permettre d’ajouter nous-mêmes nos partitions :

NB : Sur ce serveur il y a un disque dur de 2To, je ferai donc un partitionnement en conséquence. Adaptez-le à votre capacité de stockage.

Ajoutons maintenant les partitions :

  1. Commençons par la principale : « / » (slash). Personnellement je lui mets une taille de 20Go, je trouve ça amplement suffisant.
  2. Passons au SWAP. Il n’est plus très utilisé vu l’augmentation de la capacité de la ram mais le manager oblige à l’ajouter. Je mets en général 1 ou 2Go, histoire de dire…
  3. Passons maintenant aux choses sérieuses : LVM. Comme 3ème partition nous ajouterons « /var/lib/vz« , vous devez obligatoirement commencer par le dossier le plus haut. Sur un disque de 2To, en général je mets ~1,70 To.
  4. Passons maintenant au dossier « dump », donc « /var/lib/vz/dump » qu’il faut donc ajouter après « /var/lib/vz » et non avant. Personnellement 150/200Go me suffisent, car une fois les backups faits ils partent sur un FTP et je les efface. Ce n’est donc qu’un espace temporaire.

Donc si on résume :

On peut maintenant lancer l’installation. 🙂

Installation sur une Dédibox

Sur OVH, comme vous avez pu le constater si vous l’avez lu, c’est… simple. Sur une Dédibox chez Online c’est une autre affaire. Le manager ne permet pas d’avoir une configuration un poil complexe.

Voilà le partitionnement par défaut :

Autant dire que ça ne laisse pas rêveur. 🙂 On peut refaire la même configuration que chez OVH, avec du LVM :

Le problème est que cette configuration (aux dernières nouvelles, confirmé sur le forum d’Online) plante lamentablement pendant l’installation.

Il faut donc le faire manuellement ! C’est à dire que nous allons créer une seule partition, la racine, depuis le manager. Le reste sera créé en ligne de commande une fois l’installation finie.

Création des partitions

Cette partie sera malheureusement plus simple que celle d’OVH puisque nous allons simplement créer la partition racine qui recevra le système (i.e. Proxmox).

Je vous laisse dérouler la suite de l’opération.

Ajout des partitions manuellement

Une fois que l’installation s’est correctement déroulée et que vous avez accès à votre serveur en ssh, connectez vous dessus.

Installation des packages

Pour bien commencer, installons les packages nécessaires à la manipulation de LVM :

[sourcecode language= »bash »]aptitude install lvm2[/sourcecode]

Ajout d’une partition LVM

Commençons par ajouter une partition de type LVM qui prendra le reste du disque :

[sourcecode language= »bash »]fdisk /dev/sda[/sourcecode]

Voici une copie (approximative, cela varie) de ce que vous devez faire, j’ai mis en surbrillance les champs que vous devrez remplir :

[sourcecode language= »text » highlight= »1,14,16,18,19,20,22,25,39,40,41,44,58″]
Command (m for help): p

Disk /dev/sda: 2000.4 GB, 2000398934016 bytes
255 heads, 63 sectors/track, 243201 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x0005efa4

Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1        2550    20478976+  83  Linux
/dev/sda2            2550        2678     1022976   82  Linux swap / Solaris

Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 3
First cylinder (2678-243201, default 2678):
Using default value 2678
Last cylinder, +cylinders or +size{K,M,G} (2678-243201, default 243201):
Using default value 243201

Command (m for help): p

Disk /dev/sda: 2000.4 GB, 2000398934016 bytes
255 heads, 63 sectors/track, 243201 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x0005efa4

Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1        2550    20478976+  83  Linux
/dev/sda2            2550        2678     1022976   82  Linux swap / Solaris
/dev/sda3            2678      243201  1932008032   83  Linux

Command (m for help): t
Partition number (1-4): 3
Hex code (type L to list codes): 8e
Changed system type of partition 3 to 8e (Linux LVM)

Command (m for help): p

Disk /dev/sda: 2000.4 GB, 2000398934016 bytes
255 heads, 63 sectors/track, 243201 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x0005efa4

Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1        2550    20478976+  83  Linux
/dev/sda2            2550        2678     1022976   82  Linux swap / Solaris
/dev/sda3            2678      243201  1932008032   8e  Linux LVM

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.[/sourcecode]

Chouette ! Nous avons maintenant notre partition LVM, il faut quand même l’initialiser :

[sourcecode language= »bash »]pvcreate /dev/sda3
Writing physical volume data to disk « /dev/sda3 »
Physical volume « /dev/sda3 » successfully created[/sourcecode]

Maintenant la partition est prête.

Création du groupe virtuel (VG)

Nous allons créer un groupe « pve » qui regroupera les futures partitions virtuelles :

[sourcecode language= »bash »]vgcreate pve /dev/sda3
Volume group « pve » successfully created[/sourcecode]

Maintenant le groupe virtuel « pve » est initialisé sur la partition sda3 que nous avons précédemment créée. Jetons un oeil :

[sourcecode language= »text »]vgdisplay -v pve

Using volume group(s) on command line
Finding volume group « pve »
— Volume group —
VG Name pve
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 1
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 1
Act PV 1
VG Size 1.80 TiB
PE Size 4.00 MiB
Total PE 471681
Alloc PE / Size 0 / 0
Free PE / Size 471681 / 1.80 TiB
VG UUID YBUEUF-8c7s-lwNv-kZF0-cwYO-rVqg-uqlBNA

— Physical volumes —
PV Name /dev/sda3
PV UUID tCBqu3-9EwC-8hNn-G5eo-yOqd-BAp1-oTlJ4G
PV Status allocatable
Total PE / Free PE 471681 / 471681

[/sourcecode]

Parfait ! Nous avons bien créée un VG sur /dev/sda3 et il est vide, nous allons maintenant le remplir. 😉

Création des partitions virtuelles (LV)

Nous allons commencer par créer la partition la plus haute d’un point de vue hiérarchique. C’est à dire « /var/lib/vz« . En général je lui laisse les 3/4 du disque, par exemple sur 2TO, 1,75To :

[sourcecode language= »bash »]lvcreate -L1750000 -n vz pve

Logical volume « vz » created[/sourcecode]

Regardons maintenant le résultat :

[sourcecode language= »text »]lvdisplay -v /dev/pve/vz
Using logical volume(s) on command line
— Logical volume —
LV Path /dev/pve/vz
LV Name vz
VG Name pve
LV UUID CYYvpg-IsGB-U25i-kSiF-9NaR-7A19-gzZNxq
LV Write Access read/write
LV Creation host, time ks397148, 2012-05-27 16:03:28 -0400
LV Status available
# open 0
LV Size 1.67 TiB
Current LE 437500
Segments 1
Allocation inherit
Read ahead sectors auto
– currently set to 256
Block device 253:0[/sourcecode]

Le « LE » est le nombre d’unités de PE affectées à votre volume logique et ce même « LE » fait 4Mo, donc si on prend 437500 LE et qu’on le multiplie par 4, on obtient bien 1750000. Parfait !

Création du système de fichier

Maintenant que nous avons notre partition, il faut lui ajouter une dernière couche de peinture, le système de fichiers !
PS : J’utilise ext4 tant qu’à faire mais chacun ses goûts. 😉

[sourcecode language= »text »]#mkfs.ext4 /dev/pve/vz

mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=1 blocks, Stripe width=0 blocks
112001024 inodes, 448000000 blocks
22400000 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4294967296
13672 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
102400000, 214990848

Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 33 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.[/sourcecode]

Maintenant que la partition est prête, nous allons monter « /dev/pve/vz/ » sur « /var/lib/vz » :

[sourcecode language= »bash »]mount /dev/pve/vz /var/lib/vz[/sourcecode]

Voilà ! C’est maintenant fini pour la partition vz. Je vous laisse refaire la même chose avec la partition qui sera montée sur « /var/lib/vz/dump« .

N’oubliez pas de laisser un espace vide conséquent dans le VG ! Il sera utilisé par Proxmox lors des snapshots.

Modification de la table de montage

Pour ne pas avoir à remonter les partitions à chaque reboot, nous allons modifier la table de montage. Ce qui permettra au système de remonter les LV automatiquement. Prenez votre éditeur de texte favori et éditez « /etc/fstab » :

[sourcecode language= »text »]# /etc/fstab: static file system information.
#
# <file system> <mount point> <type> <options> <dump> <pass>
proc /proc proc defaults 0 0

/dev/disk/by-uuid/38ccdbab-4be0-4037-b57f-4970ce37f38e / ext4 defaults,errors=remount-r\
o 0 1
/dev/disk/by-uuid/e79a69e6-d1b2-4b11-92b6-96efd94f2d1c none swap sw 0 0

/dev/pve/vz /var/lib/vz ext4 defaults 1 2
/dev/pve/dump /var/lib/vz/dump ext4 defaults 1 2[/sourcecode]

PS : Attention à bien mettre vz en premier !

Voilà, c’est maintenant fini, profitez bien de Proxmox et des snapshots. 😉

Si vous avez des questions ou des remarques, n’hésitez pas à laisser un commentaire, ça me permettra d’améliorer l’article. 🙂

Pour plus d’informations sur LVM, il y a cet excellent article sur lequel je me suis basé : http://linux.developpez.com/lvm/