Redimensionnement de partitions chiffrées

Mise à jour : Debian 10.6 Buster

Le redimensionnement (augmentation ou réduction) de partitions non chiffrées est décrit ici

Le redimensionnement de partitions chiffrées s'effectue selon le même principe, mais implique une étape supplémentaire de redimensionnement du container luks.

Dans ce qui suit, on suppose les formations chiffrées formatées en ext4

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

resizepart NUMBER END                    resize partition NUMBER
mkpart PART-TYPE [FS-TYPE] START END     make a partition

2 - Agrandissement

L’agrandissement d'une partition chiffrée s'effectue en trois étapes :

2.1 - Préparation

$ sudo parted /dev/sdb mktable msdos 
$ sudo parted /dev/sdb mkpart primary ext2 1GiB 3GiB
$ sudo cryptsetup luksFormat /dev/sdb1
$ sudo cryptsetup open /dev/sdb1 secret
$ sudo mkfs.ext4 /dev/mapper/secret

2.2 - Agrandissement de la partition

$ calc 8*1024*1024*2-1
16777215
$ sudo parted /dev/sdb resizepart 1 16777215s

2.3 - Agrandissement du container luks

$ sudo cryptsetup luksOpen /dev/sdb1 secret
$ sudo cryptsetup status secret
/dev/mapper/test is active.
type: LUKS2
cipher: aes-xts-plain64
keysize: 512 bits
key location: keyring
device: /dev/nvme0n1p6
sector size: 512
offset: 32768 sectors
size: 159350784 sectors
mode: read/write

Noter que

$ sudo cryptsetup -v resize secret
Emplacement de clé 0 déverrouillé.
Opération réussie.

2.4 - Agrandissement du système de fichier

$ sudo e2fsck /dev/mapper/secret -f
......
$ sudo resize2fs /dev/mapper/secret 
resize2fs 1.44.5 (15-Dec-2018)
Resizing the filesystem on /dev/mapper/secret to 1830912 (4k) blocks.
The filesystem on /dev/mapper/secret is now 1830912 (4k) blocks long

Le système de fichier a maintenant une taille de environ 7GiB

$ calc 1830912*4/1024/1024
6.984375

2.3 Vérification

$ sudo cryptsetup close secret
$ sudo cryptsetup open /dev/sdb1 secret
$ sudo mount /dev/mapper/secret /mnt
$ sudo df -BMiB /dev/mapper/secret

3 - Réduction de la taille d'une partition

La modification s'effectue en trois étapes :

3.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/mapper/secret /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 /dev/mapper/mnt
$ shasum256 -c --quiet /mnt/shalist

3.2 - Réduire le système de fichier

$ sudo cryptsetup luksOpen /dev/sdb1 secret

Note : Le système de fichier doit impérativement être démonté pour la suite des opérations

$ sudo e2fsk -fy /dev/mapper/secret
$ sudo resize2fs /dev/mapper/secret 
resize2fs 1.44.5 (15-Dec-2018)
The filesystem is already 1830912 (4k) blocks long. Nothing to do!

$ calc 1830912*4/1024/1024
6.984375

Dans le cas présent, sa taille est d'environ 6,98 GiB (soit la taille de la partition moins l'en-tête luks (16 MiB pour un en-tête luks2).

$ sudo resize2fs -P /dev/mapper/secret 
resize2fs 1.44.5 (15-Dec-2018)
Estimated minimum size of the filesystem: 505070

soit environ 1,92GiB

$ calc 505070*4/1024/1024
1.92668914794921875
$ sudo resize2fs -M /dev/mapper/secret 2G
$ sudo resize2fs -M /dev/mapper/secret 
resize2fs 1.44.5 (15-Dec-2018)
Resizing the filesystem on /dev/mapper/secret to 517789 (4k) blocks.
The filesystem on /dev/mapper/secret is now 505070 (4k) blocks long.

La taille du système de fichier est donc environ 1,92iB comme estimé préalablement

3.2 - Réduire le container

$ sudo cryptsetup resizepart --size xxxxxxx
$ sudo cryptsetup resizepart 

3.2 - Réduire la taille de la partition

$ calc 505070*4/1024
1972.9296875
$ sudo cryptsetup luksHeaderBackup /dev/sdb1 --header-backup-file header
$ du -BMiB header
16MiB header
$ calc 1988.9296875/1024
1.94231414794921875
$ calc 3*1024*1024*2-1
6291455
$ sudo parted /dev/sdb resizepart 1 6291455s
$ sudo parted /dev/sdb unit GiB print free
...
Number Start End Size Type File system Flags
0,00GiB 1,00GiB 1,00GiB Free Space
1 1,00GiB 3,00GiB 2,00GiB primary
3,00GiB 14,9GiB 11,9GiB Free Space
$ sudo resize2fs /dev/mapper/secret 
resize2fs 1.44.5 (15-Dec-2018)
Resizing the filesystem on /dev/mapper/secret to 520192 (4k) blocks.
The filesystem on /dev/mapper/secret is now 520192 (4k) blocks long.
$ sudo mount /dev/mapper/secret /mnt
$ sha256sum -c --quiet /mnt/shalist