Le serveur d'origine n'est pas vraiment partitionné selon mes goûts. Cela ressemble à ceci :


root@serveur:~# df -k
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda1              3099260    492972   2448856  17% /
varrun                  493172        44    493128   1% /var/run
varlock                 493172         0    493172   0% /var/lock
udev                    493172        20    493152   1% /dev
devshm                  493172         0    493172   0% /dev/shm
/dev/sda2            236749404     32844 224690304   1% /home

Bref, une partition énorme pour /home et pas grand chose pour le reste : même la racine n'a droit qu'à une portion congrue. Sachant que la plus grande partie du disque sera consacrée à /var (i.e. les données) et à /usr (i.e. les applications installées), quelques transformations s'imposent.

Pour retailler les partitions, j'utilise parted en ligne de commande.

En fait, je me contente de retailler /home pour disposer d'un /var et d'un /usr de bonne taille. Le /home lui-même ne me servira pas à grand chose. Disons qu'on part pour un /var et un /usr de 100Go chacun et un /home de 49Go et on y ajoute un petit /tmp de 1Go. Pour commencer, il faut démonter la partition:

root@serveur:~# umount /home

Ensuite, une petite vérification ne fait pas de mal :

root@serveur:~#parted
GNU Parted 1.7.1
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.

On commence par regarder les partitions :

(parted) print                                                            

Disk /dev/sda: 250GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start   End     Size    Type     File system  Flags
 1      32.3kB  3224MB  3224MB  primary  ext3         boot 
 2      3224MB  250GB   246GB   primary  ext3              
 3      250GB   250GB   535MB   primary  linux-swap        

Puis on vérifie rapidement l'état de /home (la deuxième dans la liste):

(parted) check 2                                                          
Information: The ext2 file system passed a basic check.  For a more comprehensive check, use the e2fsck program.

Et l'on regarde ce qu'on peut en faire :

(parted) print 2                                                          

Minor: 2
Flags: 
File System: ext2
Size:         246GB (98.5%)
Minimum size: 3900MB (1.56%)
Maximum size: 250GB (100%)


Elle est donc énorme pour le moment, mais très peu occupée (c'est un peu normal pour un serveur fraîchement installé). Voici le partitionnement souhaité (avec parted, on doit préciser où commence et où se termine une partition):

  • /home : début à 0, fin à 49Go
  • /tmp : début à 49Go, fin à 50Go
  • /var : début à 50Go, fin à 150Go
  • /usr : début à 150Go, fin à 250Go


Pour le resizing de /home, cela se passe ici (en mode intéractif, c'est plus facile!) :

(parted) resize                                                          
Partition number? 2                                                       
Start?  [3224MB]?                                                         
End?  [250GB]? 52GB                                                       
Warning: A resize operation on this file system will use EXPERIMENTAL code
that MAY CORRUPT it (although it hasn't doneso yet
in the past).
You should at least backup your data and run 'e2fsck -f' afterwards.
OK/Cancel? OK                                                             

Bon, le warning n'est pas très encourageant, mais ça fonctionne...

On commence par une partition étendue (pas besoin d'une primaire vu que je ne vais pas y installer un autre OS):

(parted) mkpart                                                           
Partition type?  primary/extended? extended                               
Start? 52GB                                                               
End? 250GB 

Dans cette partition, on va placer les partitions logiques /tmp /var et /usr : pour /tmp :

(parted) mkpartfs                                                         
Partition type?  [logical]?                                               
File system type?  [ext2]?                                           
Start? 52.0GB                                                               
End? 53.0GB         

et ainsi de suite pour /var et /usr

Attention, il est judicieux d'être précis sur la taille des partitions indiquées à parted, sinon c'est lui qui choisira comment il gère l'approximation. Pour une partition de 100Go, une approximation à 1Go n'est pas franchement gênante ; elle l'est plus pour une partition de 1Go, comme /tmp. C'est pour cela que j'ai précisé la première décimale du start et du end.

Finalement, on obtient :

(parted) print                                                            

Disk /dev/sda: 250GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start   End     Size    Type      File system  Flags
 1      32.3kB  3224MB  3224MB  primary   ext3         boot 
 2      3224MB  52.0GB  48.8GB  primary   ext3              
 4      52.0GB  250GB   198GB   extended               lba  
 5      52.0GB  52.0GB  8193kB  logical   ext2              
 6      52.0GB  152GB   100GB   logical   ext2              
 7      152GB   250GB   97.5GB  logical   ext2              
 3      250GB   250GB   535MB   primary   linux-swap

Reste maintenant à mettre à jour /etc/fstab pour y faire figurer les nouvelles partitions

root@serveur:~#vi /etc/fstab

/dev/sda1       /       ext3    errors=remount-ro       0       1
/dev/sda2       /home   ext3    defaults                0       2
/dev/sda3       none    swap    defaults                0       0
/dev/sda5       /tmp    ext2    defaults                0       2
/dev/sda6       /usr    ext2    defaults                0       2
/dev/sda7       /var    ext2    defaults                0       2
proc            /proc   proc    defaults        0       0
sysfs           /sys    sysfs   defaults        0       0

Et le tour est joué.
Ensuite, il reste à déplacer le contenu actuel de /usr de la partition /dev/sda1 à la partition /dev/sda5, et le contenu de /var de la partition /dev/sda1 à /dev/sda7. Tout ceci peut se faire à coups de mv, en utilisant /home comme tampon.

Attention, un mv des répertoires /usr et /lib n'est pas complètement anodin : il y a des choses qui servent là-dedans ! Pareil pour le changement de la table des partitions. En cas de grosse erreur pendant ces manip, le mode secours du Kimsufi vous permettra de remettre de l'ordre dans tout cela, mais c'est un peu pénible et cela peut donner quelques sueurs froides...

root@serveur:~# mv /usr /home
root@serveur:~# mkdir /usr
root@serveur:~# mount /usr
root@serveur:~# mv /home/usr/* /usr

et la même chose pour var, ou presque car /var/run et /var/lock sont gérés différemment, donc on les laisse en place.
Après un reboot, tout doit rentrer dans l'ordre :

root@serveur:~# df -k
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda1              3099260     69504   2872324   3% /
varrun                  493172        44    493128   1% /var/run
varlock                 493172         0    493172   0% /var/lock
udev                    493172        36    493136   1% /dev
devshm                  493172         0    493172   0% /dev/shm
/dev/sda2             46884132     32848  44469648   1% /home
/dev/sda5                 74960        13      70830   1% /tmp
/dev/sda6             96116872    298880  90935440   1% /usr
/dev/sda7             93738184    124756  88851764   1% /var