Espandi automaticamente l'ultima partizione per utilizzare tutto lo spazio non allocato, usando parted in modalità batch


20

Per farla breve, devo eseguire tutto automaticamente all'avvio (sistema incorporato).

I nostri ingegneri invieranno le immagini ai dispositivi di produzione. Queste immagini conterranno una piccola tabella delle partizioni. All'avvio, devo espandere automaticamente l'ultima partizione (n. 3) per utilizzare tutto lo spazio disponibile sul disco.

Ecco cosa ottengo quando guardo lo spazio libero sul mio disco.

> 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

Devo espandere la partizione 3 di N (30,5 GB) numero di byte

Come eseguo questo passaggio automaticamente, senza prompt? Questo deve funzionare con una dimensione dinamica di spazio disponibile dopo la terza partizione.


Non aspettarti di ricevere uno script pronto all'uso, senza provare! Quindi puoi mostrarci cosa hai provato fino ad ora? Un'altra cosa che la partizione che stai ridimensionando non deve essere montata durante l'operazione ....
Luciano Andress Martini

Ho provato il resizepartcomando, e funziona, ma richiede una dimensione esatta. Ho bisogno che sia dinamico.
Paul Knopf,

resize2fspotrebbe essere quello che sto cercando. linux.die.net/man/8/resize2fs
Paul Knopf,

Risposte:


21

Nelle versioni attuali di parted, resizepartdovrebbe funzionare per la partizione ( partedcapisce 100%o cose del genere -1s, quest'ultima deve anche --smettere di analizzare le opzioni sulla cmdline). Per determinare il valore esatto è possibile utilizzare unit s, print free. resize2fsviene dopo per il filesystem.


Le vecchie versioni di partedavevano un resizecomando che avrebbe ridimensionato sia la partizione che il filesystem in una volta sola, per cui funzionava anchevfat .

In una modifica di ereader Kobo l'ho usato per ridimensionare al massimo la terza partizione della memoria interna: (presuppone ciecamente che non ci sia quarta partizione e tabella msdos e cose)

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

Quindi puoi anche ottenere i valori /sys/block/.../se il kernel lo supporta. Ma hai partedrimosso il resizecomando, quindi ora devi fare due passaggi, resizepartper far crescere la partizione e qualunque strumento il tuo filesystem fornisca per farla crescere, resize2fsper esempio ext*.


Questo e 'esattamente quello che stavo cercando. Grazie per l'aiuto!
Paul Knopf,

Domanda a margine, che fine hanno gli 8 byte?
Paul Knopf,

Evita il ridimensionamento di un singolo settore ... dovresti cambiarlo in -40 o qualcosa del genere (intestazione del backup GPT alla fine del disco).
frostschutz,

Non partedsupporta l'estensione automatica dalla riga di comando? Perché, non lo supporta in modo interattivo. Se eseguito in modo interattivo, verrà chiesto se si desidera correggere la tabella delle partizioni GPT in modo che corrisponda alla dimensione del disco (tipo fix), quindi è possibile eseguire resizepart 3 -1. Ho cercato di capire come farlo dalla riga di comando.
Harvey,

Non così veloce: il comando di ridimensionamento è stato rimosso in parted 3.0. Prova sfdisk o gparted.
GregD

16

Non essendo in grado di eseguire correttamente lo script parted (ha chiesto conferma perché la partizione è stata montata e contrariamente ad altre risposte che ho trovato non compreso -1so 100%), ho appena trovato lo strumento growpart che fa esattamente questo.

L'utilizzo è semplice: growpart /dev/sda 3(e quindi resize2fs /dev/sda3, o un altro comando appropriato per il tipo di file system utilizzato).

In Debian e Ubuntu è impacchettato come cloud-guest-utils .


1
Questo è il modo più conveniente che ho trovato per questo proprio ora. Ha funzionato meravigliosamente.
SebiF,

Questa era la soluzione per me - parted non amava ext4 come file system e sembrava che non ci fosse modo di evitarlo tentando di ridimensionare il file system ...
Antti Haapala

non funziona per Ubuntu 18.04
DreamFlasher il

@DreamFlasher Non so perché non ha funzionato per te. Per quanto posso vedere, puoi semplicemente installare il pacchetto cloud-guest-utils e poiché questa è l'unica funzione fornita da growpart dovrebbe funzionare a meno che non ci sia un bug, sia usata in modo errato o qualcosa che sfugga al suo controllo vada storto. Si noti che l'ultimo argomento (3 nell'esempio) è la partizione da ridimensionare, contando da 1, e che deve essere disponibile spazio sufficiente subito dopo la partizione per poter ridimensionarla in questo modo.
Ivo Smits

7

Il modo giusto per farlo è usare il fatto che parted ha la nozione di percentuali. Così

parted /dev/sda resize 3 100%

1
obsoleto, non funzionante con Ubuntu 18.04 e
versioni

Un po 'il comando di ridimensionamento è andato con la versione parziale 3, ora è necessario utilizzare il comando resizepart e quindi ridimensionare separatamente il file system sottostante o PV se è quello che si sta utilizzando. Per ext4 il comando è resize2fs o per XFS è xfs_growfs. Entrambi vengono normalmente eseguiti quando il file system è montato e l'argomento è il punto di montaggio in entrambi i casi.
Jonathan Buzzard,

0

In Ubuntu 18.04, sono in grado di ridimensionare per riempire lo spazio non allocato in uno script con quanto segue:

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

Potrebbe non essere necessario montare prima del ridimensionamento. L'ho fatto per sopprimere una query da resize2fs per l'input dell'utente.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.