Ridimensiona Live di una partizione GPT su Linux

In Linux ho usato per ridimensionare le partizioni MBR utilizzando fdisk, anche su file system live e quindi rilasciare un formato resize2fs / pvresize / … (a seconda del tipo di fs) per get il nuovo spazio assegnato.

Recentemente ho usato le partizioni Xen e GPT, e ho notato che purtroppo diviso non sembra consentire la ridimensionamento di una partizione montata in volo, infatti si lamenta:

Error: Partition XXX is being used. You must unmount it before you modify it with Parted. 

Ho provato sia il command di resize che anche la combinazione rm + mkpart , ma entrambi si lamenteranno della partizione in fase di assembly.

Come lo posso fare?

Il modo più sicuro per farlo è quello di avviare un mezzo di emergenza (un CD live o simili) e utilizzare GParted, che ridimensiona sia la partizione che il filesystem che contiene. Ciò funziona solo se la partizione non è attualmente in uso.

Se però non si può permettersi alcun tempo di inattività, è ansible provare a utilizzare gdisk invece di gdisk . Dovnetworking eliminare la partizione che si desidera ridimensionare e creare una nuova al suo posto con lo stesso punto di partenza, come avresti fatto con fdisk . gdisk è disposto a lavorare su un disco in uso, anche se il kernel potrebbe non registrare alcuna modifica. In questo caso, potrebbe essere necessario utilizzare partprobe o kpartx per get il kernel di accettare la nuova tabella delle partizioni o anche riavviare il computer se ciò non funziona. (Questo dovrebbe essere tutto simile all'uso di fdisk .)

Sto solo riassumendo alcune risposte e commenti qui:

parted rifiuterà semplicemente di cambiare qualsiasi partizione montata. gdisk farà il lavoro per te, ma non è nel repository standard RHEL o CentOS. È nel repository EPEL , però.

Tenere presente che la modifica di partizioni su un disco in uso potrebbe impedire al kernel di registrare le modifiche. Se ciò accade, utilizzare partprobe , partx o riavviare.

Di solito funziona solo con 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 di backup sarà da qualche parte al centro. Il primo passo è quello di spostare l'intestazione della partizione alla fine del disco.

Supponendo che il disco sia / dev / sda e la partizione sia / dev / sda3 (deve anche essere l'ultima partizione):

 sgdisk -e /dev/sda 

Quindi eliminare l'ultima partizione e ricrearla:

 sgdisk -d 3 /dev/sda sgdisk -N 3 /dev/sda 

Di solito viene visualizzato un messaggio che indica che il kernel non è in grado di ricaricare la tabella delle partizioni. È necessario eseguire partprobe in modo che la partizione sia registrata con la nuova dimensione:

 partprobe /dev/sda 

Se questo non è riuscito, dovrai riavviare la macchina virtuale. Dopo di che puoi coltivare il tuo filesystem con lo strumento appropriato, per ext4 etc .:

 resize2fs /dev/sda3 

Attenzione : il funzionamento di sgdisk può essere distruttivo. Assicurarsi di disporre di procedure di backup adeguate.

Stai chiedendo di ridimensionare un volume logico? Ecco come farlo:

 vgextend vgname /dev/sdb3 lvextend -L +3T /dev/mapper/location resize2fs /mount/point 

OR (xfs):

 xfs_growfs /mount/point -D <bytes> 

Ecco un esempio che uno strumento automatico utilizza per ridimensionare una partizione in linea, in una sola esecuzione:

sgdisk -d 1 -n 1: 2048: 0 -c 1: -u 1: E485F29F-A1F4-4953-9DD8-799EAEA0119B -t 1: 0700 / dev / xvda

Ecco l'elenco delle opzioni per il command sgdisk:

  • -d 1 la prima partizione di eliminazione
  • -n 1: 2048: 0 dice creare una nuova partizione "numero 1", con il settore di avvio 2048. Settore end = "0", il che significa "utilizzare tutto lo spazio disponibile per questa partizione
  • -u imposta guidata univoca per quella partizione (questo è specifico per le partizioni GPT); è ansible utilizzare 'R' per GUID per essere impostato su un valore random. È anche ansible get l'ID di partizioni correnti tramite gdisk /dev/xvda; p gdisk /dev/xvda; p per riutilizzare lo stesso UID
  • -t 1: 0700 significa sostanzialmente che la prima partizione è del tipo di codice '0700'.

/ dev / xvda è stato il disco che abbiamo ripartito.

Così elimina e crea subito una nuova partizione sul suo posto.

PS. Alcune note sul tipo di codice '0700'. Dall'uomo 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, come EBD0A0A2-B9E5-4433-87C0-68B6B72699C7.

Trovato la migliore spiegazione per quello che significa '0700' – http://www.rodsbooks.com/gdisk/walkthrough.html

"Ma aspetta," dici: "ho pensato che il disco avesse una partizione FAT!" Infatti lo fa. Windows utilizza un singolo 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 di dati. (Più su questo breve …) Quindi, in questo caso, diversi codici MBR vengono tradotti in un unico codice GUID GPT. GPT fdisk utilizza, 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 codice di tipo partition non significa il tipo di filesystem, quindi "0700" sembra più come un tipo catchall per sgdisk. Alless nei casi che ho visto.

PPS. Potrebbe essere necessario eseguire partprobe per il kernel per rendersi conto del cambiamento di partizionamento senza riavviare il sistema.