Pour faire court, je dois effectuer tout cela automatiquement au démarrage (système embarqué).
Nos ingénieurs feront clignoter les images sur les appareils de production. Ces images contiendront une petite table de partition. Au démarrage, j'ai besoin d'étendre automatiquement la dernière partition (# 3) pour utiliser tout l'espace disponible sur le disque.
Voici ce que j'obtiens quand je regarde l'espace libre sur mon disque.
> parted /dev/sda print free
Model: Lexar JumpDrive (scsi)
Disk /dev/sda: 32.0GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
17.4kB 1049kB 1031kB Free Space
1 1049kB 25.3MB 24.2MB fat16 primary legacy_boot
25.3MB 26.2MB 922kB Free Space
2 26.2MB 475MB 449MB ext4 primary
3 475MB 1549MB 1074MB ext4 primary
1549MB 32.0GB 30.5GB Free Space
J'ai besoin d'étendre la partition 3 de N (30,5 Go) nombre d'octets
Comment effectuer cette étape automatiquement, sans invite? Cela doit fonctionner avec une taille dynamique d'espace disponible après la 3e partition.
Dans les versions actuelles de parted
, resizepart
devrait fonctionner pour la partition (parted
comprend 100%
ou des choses comme -1s
, ce dernier a également besoin de --
pour arrêter l'analyse des options sur la ligne de commande). Pour déterminer la valeur exacte, vous pouvez utiliser unit s
, print free
. resize2fs
vient ensuite pour le système de fichiers.
Les anciennes versions de parted
avaient une commande resize
qui redimensionnait à la fois la partition et le système de fichiers, cela fonctionnait même pour vfat
.
Dans une modification de liseuse Kobo, j'ai utilisé cela pour redimensionner la 3ème partition de la mémoire interne au maximum: (il suppose aveuglément qu'il n'y a pas de 4ème partition et table msdos et autres)
start=$(cat /sys/block/mmcblk0/mmcblk0p3/start)
end=$(($start+$(cat /sys/block/mmcblk0/mmcblk0p3/size)))
newend=$(($(cat /sys/block/mmcblk0/size)-8))
if [ "$newend" -gt "$end" ]
then
parted -s /dev/mmcblk0 unit s resize 3 $start $newend
fi
Vous pouvez donc également obtenir les valeurs de /sys/block/.../
si le noyau le supporte. Mais parted
a supprimé la commande resize
, vous devez donc effectuer deux étapes maintenant, resizepart
pour agrandir la partition, et quel que soit l'outil fourni par votre système de fichiers pour l'agrandir, comme resize2fs
pour ext*
.
Impossible de séparer correctement le script (il a demandé une confirmation car la partition était montée et contrairement aux autres réponses que j'ai trouvées ne comprenait pas -1s
ou 100%
), Je viens de trouver l'outil Growpart qui fait exactement cela.
L'utilisation est simple: growpart /dev/sda 3
(et alors resize2fs /dev/sda3
, ou une autre commande appropriée pour le type de système de fichiers utilisé).
Dans Debian et Ubuntu, il est conditionné sous la forme cloud-guest-utils .
La bonne façon de le faire est d'utiliser le fait que parted a la notion de pourcentages. Donc
parted /dev/sda resize 3 100%
Dans Ubuntu 18.04, je peux redimensionner pour remplir l'espace non alloué dans un script avec les éléments suivants:
Sudo parted -s /dev/sdb "resizepart 2 -1" quit
Sudo mount -av
Sudo umount /dev/sdb2
Sudo mount /dev/sdb2 /mnt
Sudo resize2fs /dev/sdb2
Il peut ne pas être nécessaire de monter avant de redimensionner. Je l'ai fait pour supprimer une requête de resize2fs pour l'entrée utilisateur.