[Astuce]réorganiser une table des partitions GPT

Autres projets et contributions
avi3000
Chu Ko Nu
Messages : 404
Inscription : dim. 19 juin 2011, 18:53
Localisation : dans le neuf trois

[Astuce]réorganiser une table des partitions GPT

Message par avi3000 »

Si vous utilisez les tables GPT d'une dizaine de partitions ou plus et que vous procédez à de nombreux tests,
vous vous retrouvez avec une liste de partitions désorganisée où la partition n°1 est en fin de liste et la n°12 au début.

Les commandes expert de fdisk permettent de réorganiser les tables msdos, mais elles ne traitent pas les tables GPT.

En 2 coups de sed et de parted, le script reorg_gpt.sh va s'en occuper.
Le postulat de départ est simple:
Tant que l'on ne déplace pas le 1er secteur d'une partition et que l'on ne diminue pas sa taille,
on peut supprimer et recréer une partition en conservant le système de fichiers qu'elle contient intact.

Précaution à prendre:
Si le volume que vous réorganisez contient votre chargeur de démarrage, prévoyez une solution de secours pour rebooter.
Je n'en ai jamais eu besoin, mais ....

reorg_gpt.sh

Code : Tout sélectionner

#!/bin/sh
# génère le script de réorganisation des partitions
# à exécuter en super utilisateur
# paramètre: le volume à réorganiser sdx avec le x adéquat.

target="/dev/$1"
cmd1="parted \/dev\/$1 rm"
cmd2="parted -s \/dev\/$1 mkpart primary"

fname='run_reorg.sh'
echo -e '#!/bin/sh\n# script de réorganisation des partitions\n# à exécuter en super utilisateur\n' > $fname
echo -e "echo \"on y va ??\"\nread\n" >> $fname
chmod +x $fname

parted $target unit s print|sed 's/^ //;/^[1-9]/!d;s/\([0-9]\{1,2\} \).*/'"$cmd1"' \1/' >> $fname
echo -e "\necho 'les partitions sont enlevées, on les recrée'\n" >> $fname
parted $target unit s print|sed 's/^ //;/^[1-9]/!d;s/\([0-9]\{1,2\} *\)\([0-9]*s *[0-9]*s \).*/'"$cmd2"' \2/' >> $fname

echo -e "\nparted $target set 1 bios_grub on" >> $fname
exemple de run_reorg.sh généré

Code : Tout sélectionner

#!/bin/sh
# script de réorganisation des partitions
# à exécuter en super utilisateur

echo "on y va ??"
read

parted /dev/sdb rm 1 
parted /dev/sdb rm 2 
parted /dev/sdb rm 8 
parted /dev/sdb rm 3 
parted /dev/sdb rm 9 
parted /dev/sdb rm 5 
parted /dev/sdb rm 6 
parted /dev/sdb rm 7 
parted /dev/sdb rm 11 
parted /dev/sdb rm 4 

echo 'les partitions sont enlevées, on les recrée'

parted -s /dev/sdb mkpart primary 34s          16064s 
parted -s /dev/sdb mkpart primary 16065s       96390000s 
parted -s /dev/sdb mkpart primary 120503565s   128536064s 
parted -s /dev/sdb mkpart primary 128536065s   289170000s 
parted -s /dev/sdb mkpart primary 401625001s   481966064s 
parted -s /dev/sdb mkpart primary 481966065s   803250000s 
parted -s /dev/sdb mkpart primary 803250001s   1124550000s 
parted -s /dev/sdb mkpart primary 1269151065s  1278774000s 
parted -s /dev/sdb mkpart primary 1293234176s  1317330943s 
parted -s /dev/sdb mkpart primary 1317330944s  1953525134s 

parted /dev/sdb set 1 bios_grub on
Répondre