Déplacement de partitions

Mise à jour : Debian 10.0 Buster

Ce document décrit comment déplacer, indépendamment de son contenu, une partition. Trois cas sont distingués, selon que

Sommaire

1 - Préalable

1.1 - Précautions

Le risque de perte ou d'écrasement de données ne pouvant être écarté, il est important 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

2 - Cas général

$ echo '+500MiB' |sudo sfdisk /dev/sdb -N 1 --move-data

3 - Déplacement sans recouvrement

3.1 - Utilisation de dd

$ sudo parted /dev/sdb mkpart cible ext2 5000MiB 6000MiB
$ sudo parted /dev/sdb unit MiB print
...
Number Start End Size File system Name Flags
1 1000MiB 2000MiB 1000MiB ext4 source
2 5000MiB 6000MiB 1000MiB cible
$ time sudo dd if=/dev/sdb1 bs=100M of=/dev/sdb2 conv=fsync status=progress
...
real 0m56,862s
user 0m0,006s
sys 0m2,467s
$ sudo parted /dev/sdb unit MiB print
...
Number Start End Size File system Name Flags
1 1000MiB 2000MiB 1000MiB ext4 source
2 5000MiB 6000MiB 1000MiB ext4 cible
$ sudo cat /dev/sdb1 |shasum - |tee sha
36c9c262c984cc772ed45fa0eefb9e1e8c49f27b -
$ sudo cat /dev/sdb2 |shasum -c sha
-: OK
$ sudo parted /dev/sdb rm 1

$ sudo sfdisk --reorder /dev/sdb

3.2 - Utilisation de cat

$ time sudo cat /dev/sdb1 |sudo tee /dev/sdb2 |pv -s 1000M 1>/dev/null 
...
real 0m57,183s
user 0m0,613s
sys 0m5,140s

4 - Cas du déplacement avec recouvrement

4.1 - Principe

4.2 - Déplacement vers la gauche

$ sudo cat /dev/sdb1 |shasum - |tee sha
cc38e342027ae859acf4fe4dca451049fa9000c2 /dev/sdb1
$ echo "start=500M" |sudo sfdisk /dev/sdb -N 1
$ time for i in {0..9}; do { sudo dd \
if=/dev/sdb bs=100M count=1 skip=$(( 1000 / 100 + $i )) \
of=/dev/sdb1 seek=$i conv=fsync status=progress; \
echo "Recopie bloc $i terminée" |tee -a log; }; done
....
real 0m55,918s
user 0m0,040s
sys 0m2,133s
$ cat log
Recopie bloc 0 terminée
Recopie bloc 1 terminée
...
Recopie bloc 8 terminée
Recopie bloc 9 terminée
$ sudo cat /dev/sdb1 |shasum -c sha
-: OK

4.3 - Déplacement vers la droite

$ sudo cat /dev/sdb1 |shasum - |tee sha
3d51b8100b3eb75a922823e7c6f3f5acd139afd7 -
$ echo "start=1500M" |sudo sfdisk /dev/sdb -N 1
$ time for i in {9..0}; do { sudo dd \
if=/dev/sdb bs=100M count=1 skip=$(( 1000 / 100 + $i )) \
of=/dev/sdb1 seek=$i conv=fsync status=progress; \
echo "Recopie bloc $i terminée" |tee -a log; }; done
...
real 0m57,196s
user 0m0,058s
sys 0m2,316s
$ cat log
Recopie bloc 9 terminée
Recopie bloc 8 terminée
.....
Recopie bloc 1 terminée
Recopie bloc 0 terminée
$ sudo cat /dev/sdb1 |shasum -c sha
-: OK