web-dev-qa-db-fra.com

Étendre automatiquement la dernière partition pour utiliser tout l'espace non alloué, en utilisant la séparation en mode batch

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.

22
Paul Knopf

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*.

24
frostschutz

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 .

19
Ivo Smits

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%
7
Jonathan Buzzard

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.

0
Nolan Zinn