Redimensionnement de partitions

Mise à jour : Debian 10.0 Buster

Le redimensionnement (augmentation ou réduction) d'une partition s'effectue par déplacement de la position de la fin de la partition.

Le déplacement du début de la partition nécessite une recopie qui peut-être effectuée, par exemple avec partclone : voir Clonage de partitions - Partclone.

Dans ce qui suit, on s'intéresse au redimensionnement des partitions non chiffrées, le redimensionnement de partitions chiffrées est décrite ici.

Sommaire

1 - Précautions

1.1 - Sauvegarde préalable

En cas d'erreur utilisateur ou logicielle, le risque de perte des données sur la partition concernée ou sur une autre partition du périphérique ou sur un autre périphérique ne pouvant être écarté, il est prudent avant de démarrer l'opération

1.2 - Unités de mesure

Commande     Saisie unité ^^2           Affichage unité ^^2

parted s,KiB,MiB,GiB KiB,MiB,GiB avec option unit, par ex unit MiB
df - - - - - - K, M, G avec option -B --block-size), par exemple -BM
fdisk s et/ou K,M,G s et/ou K, M, G par défaut
gdisk s et/ou K,M,G s et/ou KiB,MiB,GiB par défaut
resizepart K,M,G block 4k = 4 x 1024
dd K,M,G

1.3 - Redimensionnement des partitions

mkpart resizepart NUMBER END               
mkpart PART-TYPE [FS-TYPE] START END

2 - Installation

$ sudo aptitude install parted
$ aptitude versions parted
i A 3.2-25 stable 500
$ sudo aptitude install apcalc

3 - Agrandissement

L'agrandissement s'effectue en deux temps, agrandissement de la partition puis du système de fichier.

3.1 - Préparation

$ sudo parted /dev/sdb mktable msdos 
$ sudo parted /dev/sdb mkpart primary ext2 1GiB 3GiB
$ sudo mkfs.ext4 /dev/sdb1

3.2 - Agrandissement de la partition

$ sudo umount /dev/sdb1
$ calc 8*1024*1024*2-1
16777215
$ sudo parted /dev/sdb resizepart 1 16777215s
$ sudo parted /dev/sdb unit GiB print
...
Number Start End Size File system Name Flag
1 1,00GiB 8,00GiB 7,00GiB primary ext4

le système de fichier a conservé sa taille d'origine

$ sudo mount /dev/sdb1 /mnt

$ sudo df -h /dev/sdb1
Sys. de fichiers Taille Utilisé Dispo Uti% Monté sur
/dev/sdb1 2,0G 6,0M 1,8G 1% /mnt

3.3 - Agrandissement du système de fichier

$ sudo umount /dev/sdb1
$ sudo e2fsck -f /dev/sdb1
$ sudo resize2fs /dev/sdb1
$ sudo mount /dev/sdb1 /mnt

$ df -BGB /dev/sdb1
Sys. de fichiers blocs de 1GB Utilisé Disponible Uti% Monté sur
/dev/sdb1 8GB 1GB 7GB 1% /mnt

4 - Réduction

Dans le cas d'une réduction, la modification s'effectue en deux étapes :

4.1 - Préparation

$ sudo parted /dev/sdb mktable msdos 
$ sudo parted /dev/sdb mkpart primary ext2 1GiB 8GiB
$ sudo mkfs.ext4 /dev/sdb1
$ sudo mount /dev/sdb1 /mnt

$ su -c ' for i in {0001..1000};do dd if=/dev/urandom of=/mnt/urandom$i bs=1K count=1024;done'

$ sha256sum /mnt/urandom* |sudo tee /mnt/shalist

$ sudo umount /mnt
$ shasum256 -c --quiet /mnt/shalist

4.2 - Réduire le système de fichier

$ sudo umount /dev/sdb1
$ sudo e2fsck -f /dev/sdb1

$ sudo resize2fs /dev/sdb1
resize2fs 1.44.5 (15-Dec-2018)
The filesystem is already 1835008 (4k) blocks long. Nothing to do!

soit 7 GiB

$ calc 1835008*4/1024/1024
7
$ sudo e2fsck -f /dev/sdb1

$ sudo resize2fs -P /dev/sdb1
$ sudo e2fsck -f /dev/sdb1

$ sudo resize2fs -M /dev/sdb1
resize2fs 1.44.5 (15-Dec-2018)
Resizing the filesystem on /dev/sdb1 to 517824 (4k) blocks.
The filesystem on /dev/sdb1 is now 517824 (4k) blocks long.

Le système de fichier fait désormais un peu moins de 2GiB

$ calc 517824*4/1024/1024
1.975341796875
$ sudo resize2fs /dev/sdb1 1,99G

Le système de fichier dans ce cas fera exactement 1,99 GiB

4.3 - Réduire la partition

$ calc 3*1024*1024*2-1
6291455
$ sudo parted /dev/sdb resizepart 1 6291455s
$ sudo resize2fs /dev/sdb1
resize2fs 1.44.5 (15-Dec-2018)
Resizing the filesystem on /dev/sdb1 to 524288 (4k) blocks.
The filesystem on /dev/sdb1 is now 524288 (4k) blocks long.
$ sudo e2fsck -f /dev/sdb1
e2fsck 1.44.5 (15-Dec-2018)
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/sdb1: 1012/131072 files (0.1% non-contiguous), 286025/524288 blocks
$ sudo mount /dev/sdb1 /mnt

$ shasum256 --quiet -c /mnt/shalist