Augmenter la taille de la partition home

Ce tutoriel a pour but d'expliquer comment augmenter la taille d'une partition /home, sans perdre de données.

Avant toute chose il convient évidemment de procéder à un backup complet des données contenues sur la partition.

La commande suivante permet de constater l'espace libre sur les partitions:

root@myserver:/backup# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1              98G   45G   49G  48% /
tmpfs                 2.0G     0  2.0G   0% /lib/init/rw
udev                  2.0G  136K  2.0G   1% /dev
tmpfs                 2.0G     0  2.0G   0% /dev/shm
/dev/sda6             189G  174G  5.3G  98% /home

 

L'objectif est de redimensionner la partition /home, sur sda6. La commande suivante montre l'espace disponible restant sur le disque:

root@myserver:/# fdisk -l

Disk /dev/sda: 751.6 GB, 751619276800 bytes
255 heads, 63 sectors/track, 91379 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000461b4

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1       12931   103864320   83  Linux
/dev/sda2           12931       39162   210703421    5  Extended
/dev/sda5           12931       14206    10244319+  83  Linux
/dev/sda6           14207       39162   200459038+  83  Linux

 

Les explications qui suivent supposent que la partition /home est distincte de la partition racine (ce qui est une bonne pratique), évitant ainsi de devoir redémarrer sur un live CD pour redimensionner la partition.

En effet, la première étape consiste à démonter la partition à redimensionner:

root@myserver:/# umount /dev/sda6

On supprime le journal

root@myserver:/# tune2fs -O ^has_journal /dev/sda6

Il va ensuite falloir commencer par agrandir la partition étendue (/dev/sda2) qui contient la partition logique à redimensionner (/dev/sda6). Pour cela nous allons utiliser parted

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


La commande print permet d'afficher les partitions

(parted) print
Model: VMware Virtual disk (scsi)
Disk /dev/sda: 752GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start   End    Size    Type      File system     Flags
 1      1049kB  106GB  106GB   primary   ext3            boot
 2      106GB   322GB  216GB   extended
 5      106GB   117GB  10.5GB  logical   linux-swap(v1)
 6      117GB   322GB  205GB   logical   ext2

 

Nous allons utiliser la commande resize

(parted) resize 2
WARNING: you are attempting to use parted to operate on (resize) a file system.
parted's file system manipulation code is not as robust as what you'll find in
dedicated, file-system-specific packages like e2fsprogs.  We recommend
you use parted only to manipulate partition tables, whenever possible.
Support for performing most operations on most types of file systems
will be removed in an upcoming release.
Start?  [106GB]?
End?  [322GB]? 752GB

 

La commande print permet de contrôler que tout s'est bien passé

(parted) print
Model: VMware Virtual disk (scsi)
Disk /dev/sda: 752GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start   End    Size    Type      File system     Flags
 1      1049kB  106GB  106GB   primary   ext3            boot
 2      106GB   752GB  645GB   extended
 5      106GB   117GB  10.5GB  logical   linux-swap(v1)
 6      117GB   322GB  205GB   logical   ext2

 

Puis il est possible de quitter parted à l'aide de la commande quit, puis de vérifier avec fdisk le résultat:

root@myserver:/# fdisk -l

Disk /dev/sda: 751.6 GB, 751619276800 bytes
255 heads, 63 sectors/track, 91379 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000461b4

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1       12931   103864320   83  Linux
/dev/sda2           12931       91380   630137856    5  Extended
/dev/sda5           12931       14206    10244319+  83  Linux
/dev/sda6           14207       39162   200459038+  83  Linux

 

Nous allons maintenant utiliser fdisk pour redimensionner la partition logique:

root@webetu:/# fdisk /dev/sda
 

La commande p permet de lister les partitions

Command (m for help): p

Disk /dev/sda: 751.6 GB, 751619276800 bytes
255 heads, 63 sectors/track, 91379 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000461b4

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1       12931   103864320   83  Linux
/dev/sda2           12931       91380   630137856    5  Extended
/dev/sda5           12931       14206    10244319+  83  Linux
/dev/sda6           14207       39162   200459038+  83  Linux

 

Nous allons commencer par supprimer la partition 6 (aucune donnée n'est perdue sur le disque), cela permet de la recréer ensuite avec une plus grande taille:
Command (m for help): d
Partition number (1-6): 6

 

Puis la recréer:

Command (m for help): n
Command action
   l   logical (5 or over)
   p   primary partition (1-4)
l
First cylinder (14207-91380, default 14207):
Using default value 14207
Last cylinder, +cylinders or +size{K,M,G} (14207-91380, default 91380):
Using default value 91380

 

Un petit contrôle pour vérifier que tout est bon:

Command (m for help): p

Disk /dev/sda: 751.6 GB, 751619276800 bytes
255 heads, 63 sectors/track, 91379 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000461b4

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1       12931   103864320   83  Linux
/dev/sda2           12931       91380   630137856    5  Extended
/dev/sda5           12931       14206    10244319+  83  Linux
/dev/sda6           14207       91380   619893473+  83  Linux

 

Puis on valide avec la commande w (pour write)

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

A ce stade il convient de redémarrer le serveur afin d'utiliser la nouvelle table des partitions, puis de lancer un contrôle du système de fichiers une fois le serveur rebooté:

root@myserver:/# e2fsck -f /dev/sda6
e2fsck 1.41.12 (17-May-2010)
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
/dev/sda6: 82442/12533760 files (3.2% non-contiguous), 46197003/50114759 blocks

 

Il convient maintenant de redimensionner le système de fichiers:


root@myserver:~# resize2fs /dev/sda6
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/sda6 to 154973368 (4k) blocks.
The filesystem on /dev/sda6 is now 154973368 blocks long.

 

puis un dernier contrôle avec fsck:

root@myserver:~# fsck -n /dev/sda6
fsck from util-linux-ng 2.17.2
e2fsck 1.41.12 (17-May-2010)
/dev/sda6: clean, 82442/38748160 files, 47844878/154973368 blocks

 

enfin on recrée le journal:

root@myserver:~# tune2fs -j /dev/sda6
tune2fs 1.41.12 (17-May-2010)
Creating journal inode: done
This filesystem will be automatically checked every 38 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

 

On peut enfin remonter les partitions (mount -a) puis contrôler le résultat final:

root@myserver:~# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1              98G   45G   49G  48% /
tmpfs                 2.0G     0  2.0G   0% /lib/init/rw
udev                  2.0G  136K  2.0G   1% /dev
tmpfs                 2.0G     0  2.0G   0% /dev/shm
/dev/sda6             582G  174G  379G  32% /home