Il modo più sicuro per farlo è avviare utilizzando un supporto di emergenza (un CD live o simile) e utilizzare GParted, che ridimensionerà sia la partizione che il filesystem che contiene. Ciò funzionerà solo se la partizione non è attualmente in uso.
Se non puoi permetterti alcun tempo di inattività, però, puoi provare a utilizzare gdisk
invece di parted
. Dovrai eliminare la partizione che desideri ridimensionare e crearne una nuova al suo posto con lo stesso punto di partenza, proprio come avresti fatto con fdisk
. gdisk
è disposto a lavorare su un disco in uso, anche se il kernel potrebbe non registrare alcuna modifica. In tal caso, potrebbe essere necessario utilizzare partprobe
o kpartx
per fare in modo che il kernel accetti la nuova tabella delle partizioni, o anche riavviare il computer se non funziona. (Dovrebbe essere tutto abbastanza simile all'uso di fdisk
.)
Questo di solito funziona solo con le distribuzioni Linux più recenti. Strumenti necessari:
- partprobe (solitamente parte di parted)
- gdisk / sgdisk
Una partizione GPT memorizza un'intestazione di backup alla fine del disco. Se hai ridimensionato il dispositivo sottostante, l'intestazione del backup sarà da qualche parte nel mezzo. Il primo passo è spostare l'intestazione della partizione alla fine del disco.
Supponendo che il disco sia /dev/sda e la partizione sia /dev/sda3 (deve essere anche l'ultima partizione):
sgdisk -e /dev/sda
Quindi elimina l'ultima partizione e ricreala:
sgdisk -d 3 /dev/sda
sgdisk -N 3 /dev/sda
Di solito vedrai un messaggio che indica che il kernel non è in grado di ricaricare la tabella delle partizioni. Devi eseguire partprobe in modo che la partizione sia registrata con la nuova dimensione:
partprobe /dev/sda
Se questo non ha successo, dovrai riavviare la macchina virtuale. Successivamente puoi far crescere il tuo filesystem con lo strumento appropriato, per ext4 ecc.:
resize2fs /dev/sda3
Attenzione :l'esecuzione di sgdisk può essere distruttiva. Assicurati di disporre di procedure di backup adeguate.
Ecco un esempio che uno strumento automatizzato utilizza per ridimensionare una partizione online, in un'unica esecuzione:
sgdisk -d 1 -n 1:2048:0 -c 1:-u1:E485F29F-A1F4-4953-9DD8-799EAEA0119B -t 1:0700 /dev/xvda
Ecco l'elenco delle opzioni del comando sgdisk:
- -d 1 la prima partizione di delete
- -n 1:2048:0 dice create new partition "number 1", con settore iniziale 2048. End sector ="0" che significa "usa tutto lo spazio disponibile per questa partizione
- -u imposta un guid univoco per quella partizione (questo è specifico per le partizioni GPT); potresti usare 'R' per GUID da impostare su un valore casuale. Puoi anche ottenere l'ID delle partizioni correnti tramite
gdisk /dev/xvda; p
output per riutilizzare lo stesso uid - -t 1:0700 in pratica significa che la prima partizione è di typecode '0700'.
/dev/xvda era il disco che abbiamo ripartizionato.
Quindi elimina e crea subito una nuova partizione al suo posto.
PS. Alcune note sul typecode '0700'. Da man SGDISK(8)
-t, --typecode=partnum:{hexcode|GUID} Change a single partition's type code. You enter the type code using either a two-byte hexadecimal number, as
descritto in precedenza o un valore GUID completamente specificato, ad esempio EBD0A0A2-B9E5-4433-87C0-68B6B72699C7.
Ho trovato la migliore spiegazione del significato di "0700" qui:http://www.rodsbooks.com/gdisk/walkthrough.html
"Ma aspetta", dici, "pensavo che il disco avesse una partizione FAT!" In effetti lo fa. Windows utilizza un unico codice GUID per tutte le sue partizioni di dati, siano esse FAT o NTFS. In passato, lo stesso codice è stato utilizzato in Linux per le sue partizioni dati. (Maggiori informazioni su questo a breve...) Pertanto, in questo caso diversi codici MBR vengono tutti tradotti in un unico codice GUID GPT. GPT fdisk usa, in qualche modo arbitrariamente, il codice 0x0700 (o più precisamente, EBD0A0A2-B9E5-4433-87C0-68B6B72699C7) per tutti questi.
Nel mio caso credo che fosse una partizione Linux ext4, ma il typecode della partizione non significa il tipo di filesystem, quindi '0700' sembra più un tipo catchall per sgdisk. Almeno nei casi che ho visto.
PS. Potrebbe essere necessario eseguire partprobe
affinché il kernel venga a conoscenza della modifica del partizionamento senza riavviare il sistema.