Contactez-nous : 01 71 18 39 72
Suivez-nous sur Facebook

Redimensionner les partitions d'un serveur OVH Kimsufi

Dans cet article, nous allons voir comment redimensionner une partition sous Linux.
Pour l'exemple, et pour la pratique, nous allons redimensionner les partitions d'un serveur OVH Kimsufi sous Ubuntu.

Pourquoi un serveur OVH Kimsufi sous Ubuntu? Parce qu'à l'heure où j'écris ces lignes, l'installation de base d'Ubuntu 9.10 fournie installe une partition de 5Go pour /, et une partition de plusieurs centaines de Gigas pour /home.
C'est évidemment absurde, surtout si on héberge un site web (puisque c'est le répertoire /var qui va grossir à cause de la base de données et des logs).

Pour corriger cela, nous allons réduire la taille de /home, et migrer /var dans sa propre partition.

Réduire la taille de /home

Première étape: voir les détails du système de fichier en utilisant la commande "df":

Sys. de fich.           1K-blocs       Occupé Disponible Capacité Monté sur
rootfs                 5162796   5162544         0 100% /
udev                   1025800       212   1025588   1% /dev
/dev/disk/by-uuid/e10fa1e8-df96-4c13-96bb-cbf7102e530b
                       5162796   5162544         0 100% /
none                   1025800         0   1025800   0% /dev/shm
none                   1025800        92   1025708   1% /var/run
none                   1025800         0   1025800   0% /var/lock
none                   1025800         0   1025800   0% /lib/init/rw
/dev/sda2            234685816    286592 222477792   1% /home

On voit que /home est sur la partition /dev/sda2. C'est cette partition que nous allons devoir redimensionner.

Mais il est impossible de redimensionner la partition en place, car elle est utilisée par l'OS. Il faut donc redémarrer sur un CD de rescue. Dans le cas d'OVH, nous disposons d'un mode de boot rescue, dans le manager OVH.

Il faut donc:
- Se connecter au manager OVH
- Aller dans la section "Services" puis "netboot", et sélectionner le mode "rescue-pro". N'oubliez pas de bien remplir votre adresse mail, puisqu'OVH vous enverra les codes de connexion au serveur sur cette adresse.
- Ensuite, allez sur "Services > Rebooter", puis demander un reboot de la machine.

Patientez quelques instants (jusqu'à 5 minutes) le temps pour le serveur de redémarrer et le temps pour OVH de vous envoyer un mail avec les nouvelles informations de connexion SSH.

Note: lorsque vous retenterez une connexion SSH, vous allez recevoir un warning, vous informant que votre serveur a peut être été hacké (parce que la clef du serveur à changé). Pas de panique, c'est normal. Vous pouvez ignorer ce warning et forcer la connexion.

En mode rescue, on se connecte dans un environnement isolé. Les partitions ne sont pas accessibles si on ne les monte pas.

Cela tombe bien, on veut redimensionner /dev/sda2, ce qui demande que la partition soit demontée.

On commence par vérifier que la partition n'a pas de problèmes:

fsck -n /dev/sda2

Résultat:
fsck 1.41.3 (12-Oct-2008)
fsck.ext3: /lib/libblkid.so.1: no version information available (required by fsck.ext3)
fsck.ext3: /lib/libuuid.so.1: no version information available (required by fsck.ext3)
e2fsck 1.41.9 (22-Aug-2009)
/home: clean, 11/30171136 files, 1001471/120653568 blocks

Maintenant, passons aux choses sérieuses!

On retire le journal du système de fichier ext3 (ce qui le transforme en système de fichier ext2, qui est redimensionnable plus facilement).

tune2fs -O ^has_journal /dev/sda2

Résultat après quelques minutes:
tune2fs: /lib/libblkid.so.1: no version information available (required by tune2fs)
tune2fs: /lib/libuuid.so.1: no version information available (required by tune2fs)
tune2fs 1.41.9 (22-Aug-2009)

On relance ensuite une nouvelle vérification:

e2fsck -f /dev/sda2

Résultat après quelques minutes:
e2fsck 1.41.9 (22-Aug-2009)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/home: 11/30171136 files (0.0% non-contiguous), 968670/120653568 blocks

Maintenant, nous pouvons redimensionner la partition.
Dans mon cas, je ne veux garder que 10 Go.
Je lance donc la commande suivante:

resize2fs /dev/sda2 10G

Résultat après quelques minutes:
resize2fs 1.41.9 (22-Aug-2009)
Resizing the filesystem on /dev/sda2 to 2621440 (4k) blocks.
The filesystem on /dev/sda2 is now 2621440 blocks long.

Vous pensez avoir fini? Que nenni! On passe au passage rigolo: réécrire la table de partitions (parce que resize2fs ne s'en charge pas).

Prenez bien note de la taille en blocs du système de fichiers (dans mon cas: 2621440 blocks et 4k par bloc).

Démarrons fdisk:

fdisk /dev/sda

Vérifions la table des partitions actuelle:

Command (m for help): p
 
Disk /dev/sda: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x0005efe2
 
   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1         653     5242880+  83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2             653       60736   482614272   83  Linux
/dev/sda3           60736       60801      525856   82  Linux swap / Solaris

Supprimons la partition (normalement, aucune donnée ne sera perdu.... normalement hein!)

Command (m for help): d
Partition number (1-4): 2

Ensuite, nous recréons /dev/sda2, en temps que partition primaire puisqu'elle était déjà primaire.

Command (m for help): n
Command action
   l   logical (5 or over)
   p   primary partition (1-4)
p
Partition number (1-4): 2

Ensuite, fdisk nous demande le premier cylindre. On prend le cylindre par défaut:

First cylinder (653-60801, default 653):
Using default value 653

Il faut maintenant indiquer la taille de la partition. On indique donc 10Go (10485760 ko). On trouve sur internet des recommandations consistant à rajouter 3% d'espace libre. Dans le doute, j'ai suivi cette recommandation. Je demande donc 10485760 * 1.03 = 10800330 ko pour la partition)

Last cylinder or +size or +sizeM or +sizeK (653-60735, default 60735): +10800330K

On réécrit maintenant la table de partition, avec la commande "w":

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

On effectue de nouveau une vérification:

fsck -n /dev/sda2
 
fsck 1.41.3 (12-Oct-2008)
fsck.ext2: /lib/libblkid.so.1: no version information available (required by fsc
k.ext2)
fsck.ext2: /lib/libuuid.so.1: no version information available (required by fsck
.ext2)
e2fsck 1.41.9 (22-Aug-2009)
/home: clean, 11/655360 files, 29871/2621440 blocks

Tout semble s'être bien passé.
On peut réactiver le journal pour remettre le système de fichier en ext3:

tune2fs -j /dev/sda2

tune2fs: /lib/libblkid.so.1: no version information available (required by tune2
fs)
tune2fs: /lib/libuuid.so.1: no version information available (required by tune2f
s)
tune2fs 1.41.9 (22-Aug-2009)
Creating journal inode: done
This filesystem will be automatically checked every 29 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

Hourra! Nous avons réduit la taille de la partition /home.

Créer une partition dédiée à /var

Nous pouvons maintenant créer notre partition /var.
Je la créé en temps que partition étendue (et je dois donc créé la partition étendue /dev/sda4 d'abord).

fdisk /dev/sda
 
Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
e
Selected partition 4
First cylinder (1999-60801, default 1999):
Using default value 1999
Last cylinder or +size or +sizeM or +sizeK (1999-60735, default 60735):
Using default value 60735
 
Command (m for help): n
First cylinder (1999-60735, default 1999):
Using default value 1999
Last cylinder or +size or +sizeM or +sizeK (1999-60735, default 60735): 31367
 
Command (m for help): p
 
Disk /dev/sda: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x0005efe2
 
   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1         653     5242880+  83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2             653        1998    10805030+  83  Linux
/dev/sda3           60736       60801      525856   82  Linux swap / Solaris
/dev/sda4            1999       60735   471804952+   5  Extended
/dev/sda5            1999       31367   235906461   83  Linux
 
Partition table entries are not in disk order
 
Command (m for help): w
The partition table has been altered!
 
Calling ioctl() to re-read partition table.
Syncing disks.

Note: ma partition /var (/dev/sda5) n'utilise par l'intégralité du disque. Cela me permettra de garder une marge de manoeuvre.

Nous devons formatter /dev/sda5:

mkfs -t ext3 /dev/sda5
 
mke2fs 1.41.9 (22-Aug-2009)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
14745600 inodes, 58976615 blocks
2948830 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=0
1800 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
 
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
 
This filesystem will be automatically checked every 36 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

Bien, maintenant, nous pouvons monter nos disques:

cd /mnt
mkdir sda1
mkdir sda5
mount /dev/sda1 /mnt/sda1
mount /dev/sda5 /mnt/sda5

Parfait! Nous devons maintenant transférer le répertoire /var de sda1 vers sda5:

cp -Rp sda1/var/* sda5/.

Nous allons pour le moment renommer /var en /var.bak.
Nous supprimerons ce répertoire si tout se passe bien.

mv /mnt/sda1/var /mnt/sda1/var.bak
mkdir /mnt/sda1/var

Finalement, nous allons dire au système qu'il doit automatiquement monter /dev/sda5 dans le répertoire /var.
We do this in /etc/fstab

nano /mnt/sda1/etc/fstab

Nous rajoutons cette ligne:

/dev/sda5       /var    ext3    defaults                0       2

Nous pouvons maintenant redémarrer la machine!
Pour cela, ne pas oublier de retirer le CD de boot, ou dans le cas du netboot OVH, de repasser sur un boot à partir du disque dur.

Et voilà!

Tout devrait s'être passé correctement. Le reboot devrait fonctionner.
Si après quelques heures/jours votre système fonctionne correctement, vous pouvez supprimer le backup du répertoire var pour libérer de l'espace sur /:

sudo rm -rf /var.bak

J'espère que vous avez pu suivre mes commentaires jusqu'ici, et félicitations! Vous avez un système un peu moins mal partitionné (et le prochaine fois, comme moi, vous penserez à LVM :) )