Debian+LVM sur un VPS OVH

Le contenu risque d'être assez long, et sera donc découpé en 4 parties.

L'objectif est d'installer Debian 8 avec LVM sur un VPS OVH. Par défaut, une seule partition est présente, et c'est assez chaotique à gérer avec des volumes (Et oui, si le VPS est commandé depuis l'interface Cloud, on peut lui ajouter de l'espace disque).

Petit sommaire.

  1. Destruction et création des partitions
  2. Installation de Debian
  3. Ajouter un volume OVH à notre configuration
  4. Bonus: changer la taille du volume OVH

Destruction et création des partitions

Une fois le VPS commandé, redémarrez le en mode Rescue (en précisant bien Debian!) et connectez-vous en SSH. Petit sudo -i si vous n'êtes pas root, et on peut commencer.

On commence par formater notre disque principal (qui se trouve dans /dev/vdb en mode rescue) : une partition /boot de 250Mo et le reste du disque en partition LVM.

root@vps:~# fdisk /dev/vdb

Welcome to fdisk (util-linux 2.25.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

// On supprime la partition déjà présente

Command (m for help): d
Selected partition 1
Partition 1 has been deleted.

Command (m for help): o
Created a new DOS disklabel with disk identifier 0x200b422e.

// On créé une nouvelle partition pour /boot
Command (m for help): n
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1):(entrée)
First sector (2048-20971519, default 2048):(entrée)
Last sector, +sectors or +size{K,M,G,T,P} (2048-20971519, default 20971519): +250M

Created a new partition 1 of type 'Linux' and of size 250 MiB.


Command (m for help): n
Partition type
   p   primary (1 primary, 0 extended, 3 free)
   e   extended (container for logical partitions)
Select (default p):(entrée)

Using default response p.
Partition number (2-4, default 2):(entrée)
First sector (514048-20971519, default 514048):(entrée)
Last sector, +sectors or +size{K,M,G,T,P} (514048-20971519, default 20971519):(entrée)
// On appuie sur entrée, ce qui remplit le disque avec l'espace restant

Created a new partition 2 of type 'Linux' and of size 9.8 GiB.

// On change le type de partition
Command (m for help): t
Partition number (1,2, default 2):(entrée)
Hex code (type L to list all codes): L

 0  Empty           24  NEC DOS         81  Minix / old Lin bf  Solaris
 1  FAT12           27  Hidden NTFS Win 82  Linux swap / So c1  DRDOS/sec (FAT-
 2  XENIX root      39  Plan 9          83  Linux           c4  DRDOS/sec (FAT-
 3  XENIX usr       3c  PartitionMagic  84  OS/2 hidden C:  c6  DRDOS/sec (FAT-
 4  FAT16 <32M      40  Venix 80286     85  Linux extended  c7  Syrinx
 5  Extended        41  PPC PReP Boot   86  NTFS volume set da  Non-FS data
 6  FAT16           42  SFS             87  NTFS volume set db  CP/M / CTOS / .
 7  HPFS/NTFS/exFAT 4d  QNX4.x          88  Linux plaintext de  Dell Utility
 8  AIX             4e  QNX4.x 2nd part 8e  Linux LVM       df  BootIt
 9  AIX bootable    4f  QNX4.x 3rd part 93  Amoeba          e1  DOS access
 a  OS/2 Boot Manag 50  OnTrack DM      94  Amoeba BBT      e3  DOS R/O
 b  W95 FAT32       51  OnTrack DM6 Aux 9f  BSD/OS          e4  SpeedStor
 c  W95 FAT32 (LBA) 52  CP/M            a0  IBM Thinkpad hi eb  BeOS fs
 e  W95 FAT16 (LBA) 53  OnTrack DM6 Aux a5  FreeBSD         ee  GPT
 f  W95 Ext'd (LBA) 54  OnTrackDM6      a6  OpenBSD         ef  EFI (FAT-12/16/
10  OPUS            55  EZ-Drive        a7  NeXTSTEP        f0  Linux/PA-RISC b
11  Hidden FAT12    56  Golden Bow      a8  Darwin UFS      f1  SpeedStor
12  Compaq diagnost 5c  Priam Edisk     a9  NetBSD          f4  SpeedStor
14  Hidden FAT16 <3 61  SpeedStor       ab  Darwin boot     f2  DOS secondary
16  Hidden FAT16    63  GNU HURD or Sys af  HFS / HFS+      fb  VMware VMFS
17  Hidden HPFS/NTF 64  Novell Netware  b7  BSDI fs         fc  VMware VMKCORE
18  AST SmartSleep  65  Novell Netware  b8  BSDI swap       fd  Linux raid auto
1b  Hidden W95 FAT3 70  DiskSecure Mult bb  Boot Wizard hid fe  LANstep
1c  Hidden W95 FAT3 75  PC/IX           be  Solaris boot    ff  BBT
1e  Hidden W95 FAT1 80  Old Minix
Hex code (type L to list all codes): 8e

Changed type of partition 'Linux' to 'Linux LVM'.

// On valide

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

Bon, ça c'est fait. On a bien nos deux partitions.
On formate notre futur /boot:

root@vps:~# mkfs.ext4 -L boot /dev/vdb1

Et on configure LVM.

root@vps:~# pvcreate /dev/vdb2
  Physical volume "/dev/vdb2" successfully created
root@vps:~# vgcreate vg0 /dev/vdb2
  Volume group "vg0" successfully created

Par habitude, j'aime bien créer beaucoup de volumes logiques. Les tailles allouées dépendent de vos goûts. Avec mon VPS et ses 10G de disque, j'alloue 7G ... et je peux le modifier à tout moment (c'est tout l'intérêt de LVM !).

root@vps:~# lvcreate -L 500m -n root vg0
  Logical volume "root" created
root@vps:~# lvcreate -L 1.5g -n usr vg0
  Logical volume "usr" created
root@vps:~# lvcreate -L 3g -n var vg0
  Logical volume "var" created
root@vps:~# lvcreate -L 1g -n home vg0
  Logical volume "home" created
root@vps:~# lvcreate -L 1g -n srv vg0
  Logical volume "srv" created
root@vps:~# lvcreate -L 500m -n swap vg0
  Logical volume "swap" created
root@vps:~# lvcreate -L 100m -n tmp vg0
  Logical volume "tmp" created
root@vps:~# for i in home root srv tmp usr var; do
> mkfs.ext4 -L $i /dev/mapper/vg0-$i;
> done
mke2fs 1.42.12 (29-Aug-2014)
Creating filesystem with 786432 4k blocks and 196608 inodes
Filesystem UUID: f38cda3f-5e31-4618-884b-5f30fb50ea69
Superblock backups stored on blocks:
    32768, 98304, 163840, 229376, 294912

Allocating group tables: done
Writing inode tables: done
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done
# On en profite pour configurer le swap
root@vps:~# mkswap -L swap /dev/mapper/vg0-swap
Setting up swapspace version 1, size = 511996 KiB
LABEL=swap, UUID=d955f898-121d-438b-935b-cdbab6ba017d

On monte notre volume dans /mnt/:

root@vps:~# mkdir /mnt  
root@vps:~# mount /dev/mapper/vg0-root /mnt  
root@vps:~# mkdir /mnt/{boot,home,srv,tmp,usr,var}  
root@vps:~# mount /dev/vdb1 /mnt/boot  
root@vps:~# for i in home srv tmp usr var; do mount /dev/mapper/vg0-$i /mnt/$i; done  
root@vps:~# swapon /dev/mapper/vg0-swap  
root@vps:~# chmod 1777 /mnt/tmp  

Et c'est tout pour cette partie.


Installation de Debian 8 (à la main, s'il vous plaît!)

Afin d'installer Debian sur le disque, et pour nous simplifier la vie, nous allons utiliser debootstrap. Il est utilisé par l'installateur Live, et fonctionne parfaitement dans notre cas (sauf qu'il faut l'installer manuellement ;D)

root@vps:~# apt install debootstrap  
The following NEW packages will be installed:  
  debootstrap
Get:1 http://debian.mirrors.ovh.net/debian/ jessie/main debootstrap all 1.0.67 [62.7 kB]  
Setting up debootstrap (1.0.67) ...  

On note qu'il utilise le repository http://debian.mirrors.ovh.net/debian/, hébergé par OVH… et on le réutilise dans la commande d'après, la fameuse commande debootstrap. On lui précise l'architecture désirée (amd64, n'oubliez pas, sinon Grub ne va pas apprécier), la version voulue (jessie), le dossier d'installation (/mnt) et l'endroit où aller chercher les packages.

root@vps:~# debootstrap --arch amd64 jessie /mnt http://debian.mirrors.ovh.net/debian  
I: Retrieving Release  
I: Retrieving Release.gpg  
I: Checking Release signature  
I: Valid Release signature (key id ED6D65271AACF0FF15D123036FB2A1C265FFB764)  
...
I: Configuring tasksel-data...  
I: Base system installed successfully.  
root@vps:~#  

Après quelques 627 lignes de log, l'installation est terminée et on a un Debian fonctionnel dans /mnt.

On configure /dev, /proc et /sys, puis on s'y introduit par surprise pour installer quelques paquets (ssh, au hasard) et modifier le mot de passe root.

root@vps:~# mount -o bind /dev /mnt/dev  
root@vps:~# mount -t proc proc /mnt/proc  
root@vps:~# mount -t sysfs sys /mnt/sys  
root@vps:~# chroot /mnt /bin/bash  

On commence par modifier /etc/fstab, et on y inscrit une configuration qui va bien. Dans mon cas, ceci fera l'affaire:

root@cloudtruc:~# cat /etc/fstab  
# file system   mount point type    options             dump    pass
LABEL=boot      /boot       ext4    rw,nosuid,nodev     0       2

LABEL=root      /           ext4    errors=remount-ro   0       1  
LABEL=tmp       /tmp        ext4    rw,nosuid,nodev     0       2  
LABEL=var       /var        ext4    rw                  0       2  
LABEL=usr       /usr        ext4    rw,nodev            0       2  
LABEL=home      /home       ext4    rw,nosuid,nodev     0       2  
LABEL=srv       /srv        ext4    rw,nosuid,nodev     0       2  
LABEL=swap      none        swap    sw                  0       0  

On restaure le fichier /etc/network/interfaces à la valeur utilisée sur notre machine OVH avant formatage. Vous l'avez sauvegardé bien sûr ?! Non ? Tant pis, le voici:

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo  
iface lo inet loopback

# The primary network interface
allow-hotplug eth0  
auto eth0  
iface eth0 inet dhcp  

On installe lvm et ssh. On en profite pour demander un petit kernel et Grub2 (vous pouvez essayer sans, si ça vous amuse).

root@vps:/# apt-get update  
root@vps:/# apt-get install lvm2 ssh linux-image-amd64 grub2  

Si tout se passe bien, grub devrait vous demander quelle configuration utiliser pour grub-pc, dans une jolie boîte de dialogue:

On se déplace avec les flèches, on sélectionne /dev/vdb en appuyant sur espace et on valide avec entrée. Un jeu d'enfant.

Les quelques dernières lignes de cet apt-get sont

update-initramfs: Generating /boot/initrd.img-3.2.0-4-amd64  
df: Warning: cannot read table of mounted file systems: No such file or directory  

Pas grave, on ferme les yeux pour cette fois. :-)

On définit un mot de passe avec passwd, on pense bien à vérifier dans /etc/ssh/sshd_config qu'on autorise la connexion par mot de passe ... (PermitRootLogin yes et non without-password).

Et c'est tout. On peut sortir du mode rescue. Enfin. \o/

À la prochaine connexion, la clé SSH aura changée (j'espère, sinon vous avez formaté la mauvaise machine :oops:) et vous pourrez jouer avec un Debian tout propre.


Ajouter un volume OVH à LVM

L'offre Cloud d'OVH, en plus de nous proposer des VPS de qualités (cher staff OVH, on négocie les réductions via Twitter ? ;D), permet de lier des Volumes à nos VPS. Pour cela, il faut créer le volume, spécifier ses performances et sa taille [Activez l'option disque amorçable, on ne sait jamais], et l'associer à notre machine. (C'est assez simple, et l'interface risque de changer, donc pas d'imprim' écran.)

On se connecte en SSH à notre machine, petit sudo -i si vous n'êtes pas déjà root, et on cherche notre volume (avec fdisk -l, par exemple). Par défaut, c'est /dev/vdb.
Cette fois-ci, il suffit de partitioner (en LVM) le disque entier.
Mais vous savez faire, n'est ce pas ?
fdisk /dev/vdb, o, n, entrée 4 fois, t, 8e, w.

Ensuite, on ajoute notre disque à vg0. Par exemple, pour attribuer 4Go supplémentaires à /srv :

root@vps:~# pvcreate /dev/vdb1  
  Writing physical volume data to disk "/dev/vdb1"
  Physical volume "/dev/vdb1" successfully created
root@vps:~# vgextend vg0 /dev/vdb1  
  Volume group "vg0" successfully extended
root@vps:~# lvextend -l +3G /dev/vg0/srv  
  Extending logical volume srv to 4.00 GiB
  Logical volume root successfully resized
root@vps:~# resize2fs /dev/vg0/srv  
resize2fs 1.42.5 (29-Jul-2012)  
Filesystem at /dev/vg0/srv is mounted on /srv; on-line resizing required  
...

BONUS: Changer la taille du volume OVH

Oui, avoir un volume supplémentaire c'est bien et peu couteux, mais étant donné qu'ils sont de taille variable, il faut en profiter !

Attention Cette opération est risquée et je ne recommande pas de l'executer sur un système en production (il est préférable de créer un second volume et de transférer les données, je pense). En effet, changer la taille du volume OVH a pour conséquence ... de démonter le volume et de le remonter sous un autre nom.

En le faisant, vous aurez des erreurs à chaque fois que vous manipulez un disque. Par ex.:

root@vps:/etc/lvm# vgdisplay  
  /dev/root: read failed after 0 of 1024 at 13597868032: Input/output error
  /dev/root: read failed after 0 of 1024 at 13597925376: Input/output error
  --- Volume group ---
  VG Name               vg0
  ...

La solution: nettoyer le cache LVM en executant cette commande: vgmknodes --refresh vg0.

Cette fois-ci, il faut supprimer la partition LVM et la re-créer.
fdisk /dev/vdc, puis d (delete), n, entrée 4 fois, t, 8e, w.

Ensuite, on resize: pvresize /dev/vdc1.

Et voilà, on peut utiliser les commandes LVM usuelles à présent.


C'est tout pour le moment ! :-)