Domanda Come posso ridimensionare una partizione di root in fase di runtime?


Come posso aumentare la dimensione della partizione di root di un sistema in fase di runtime?

Ho una partizione che non è allocata dopo la partizione di root (che è anche ext4), come posso aggiungere quello spazio non allocato allo spazio allocato alla partizione di root senza dover spegnere il server?


194
2018-01-30 17:23


origine


Odio sembrare un bastone nel fango, ma questo comporta un bel po 'di rischio? Perché questo deve accadere? Il tempo di attività è il vincolo principale? - DevNull
Non è possibile ridimensionare una partizione a sinistra, perché sarebbe effettivamente una mossa. - Zaz
Aumentare la dimensione delle parizioni in ext4 online è facile. La parte difficile si ridurrà (l'intestazione riguarda il "ridimensionamento"). Per le persone interessate a QUALSIASI manipolazione su una partizione di root (spostamento, restringimento, modifica del filesystem, dispositivo) in fase di runtime dovrebbe consultare la mia risposta: askubuntu.com/a/728141/21888 - vaab


risposte:


GUI (Ubuntu 14.04 e successive): GParted v0.17 e successivi forniscono una bella GUI per questo. (Le versioni precedenti rifiuteranno di ridimensionare una partizione montata).

Riga di comando (qualsiasi versione di Ubuntu): Ci sono tre passaggi per questo.

Passo 1. La partizione deve essere prima ridimensionata. Se stai usando LVM, è facile e presumibilmente sai come procedere. Se stai usando le partizioni classiche, è un po 'più complicato, e potrebbe richiede un riavvio (anche se non devi mai avviare un altro sistema o live CD).

Ecco come lo faccio: uso fdisk per prima cosa cancellare la partizione (l'idea è che i dati sul disco siano preservati), quindi ricrearlo attentamente con una dimensione maggiore nella stessa posizione.

Esempio:

$ sudo fdisk /dev/sda

Command (m for help): p

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     9437183     4717568   83  Linux

Command (m for help): d
Selected partition 1

Command (m for help): p

   Device Boot      Start         End      Blocks   Id  System

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4, default 1): 1
First sector (2048-10485759, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-10485759, default 10485759):
Using default value 10485759

Command (m for help): p

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1            2048    10485759     5241856   83  Linux

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.

Ancora una volta, è fondamentale che la nuova partizione inizi nello stesso blocco della vecchia. Anche l'Id dovrebbe corrispondere (83 per i sistemi Linux). Preparati a perdere tutti i tuoi dati al minimo errore di battitura.

Per sicurezza, puoi anche ripristinare il flag di avvio (che secondo Wikipedia è ancora richiesto su alcuni computer) premendo a.

Vedi la sezione commenti su cosa fare se la tua partizione di swap è nel modo.

Ormai dovrebbe essere evidente il motivo per cui le persone raccomandano l'uso di un CD live. ;-)

Passo 2. Come fdisk ti ricorda che è necessario ricaricare la tabella delle partizioni prima di procedere. Il modo più sicuro è semplicemente riavviare; ma puoi anche usarlo partprobe o kpartx  (maggiori informazioni).

Passaggio 3. Una volta ridimensionata la partizione e ricaricata la tabella delle partizioni, è sufficiente eseguire l'applicazione resize2fs sul file system, e puoi farlo anche quando è montato come partizione di root.

Esempio:

$ sudo resize2fs /dev/sda1

170
2018-04-06 14:23



Ha funzionato perfettamente per me. Tuttavia ho anche assicurato che il flag di avvio conservato fosse lo stato originale. - Augustus Kling
@ jbo5112: come fdisk dice, partprobe o kpartx può funzionare invece di un riavvio; Guarda anche questa domanda. Anche se si riavvia, la soluzione è comunque preferibile utilizzare un live CD quando si tratta di tempi di inattività, in cui un semplice riavvio può essere inferiore a 10 s per una macchina virtuale. È anche più veloce nel tempo dell'operatore, motivo per cui di solito uso questo approccio da solo. :) - Søren Løvborg
@ Raymond: Se la pressione della memoria lo consente (vedi free -h), disabilita lo swap (swapoff /dev/sda2), cambia la tabella delle partizioni (compresa l'eliminazione e la ricreazione della partizione di swap) e 1) riavvia o 2) ricarica la tabella delle partizioni e swapon ancora. (Se la memoria è troppo stretta per disabilitare temporaneamente lo swap, è comunque possibile creare e abilitare a nuovo partizione swap (/dev/sda3), quindi swapoff sda2; ma poi dovrai aggiornare /etc/fstab con il nuovo nome del dispositivo di scambio.) - Søren Løvborg
Se si sta utilizzando vmware e si è estesa la dimensione del disco, sarà necessario eseguire sudo lshw -C disk per eseguire nuovamente la scansione dei file system in modo che il vm riconosca l'unità più grande. Quindi seguire le istruzioni sopra. - Guy
Che ne dici di restringere? - Aaron Franke


È possibile eseguire un ridimensionamento on-line di un filesystem ext4, anche se è la partizione di root. Usa il resize2fs comando.

sudo resize2fs /dev/sda1

MODIFICA: non è consentito il restringimento in linea:

root@brunojcm-htpc:/home# resize2fs /dev/sda5 2654693
resize2fs 1.42 (29-Nov-2011)
Filesystem at /dev/sda5 is mounted on /; on-line resizing required
resize2fs: On-line shrinking not supported

109
2018-03-02 10:50



A partire dal man resize2fs: The resize2fs program does not manipulate the size of partitions. If you wish to enlarge a filesystem, you must make sure you can expand the size of the underlying partition first. This can be done using fdisk(8) by deleting the partition and recreating it with a larger size or using lvextend(8),if you're using the logical volume manager lvm(8). Questa domanda riguarda il ridimensionamento del partizione, non il filesystem. La distinzione è sottile ma molto importante. - Eliah Kagan
È possibile utilizzare fdisk per eliminare la partion root e quindi ricrearla nello stesso blocco di partenza. fdisk scriverà la modifica, ma non avrà effetto fino a dopo un riavvio. dopo il riavvio è possibile utilizzare il programma resize2fs per inviare il disco per riempire la partion. - James Becwar
Ho appena ridimensionato una partizione root ext4 online. Quindi posso confermare che è possibile. Ma invece di passare / dev / sda * come parametro per resize2fs, devi passare il nome del volume logico. - CDR
Trovo il primo paragrafo del resize2fs manpage più interessante per la domanda iniziale: The resize2fs program will resize ext2, ext3, or ext4 file systems. It can be used to enlarge or shrink an unmounted file system located on device. If the filesystem is mounted, it can be used to expand the size of the mounted filesystem, assuming the kernel supports on-line resizing. (As of this writing, the Linux 2.6 kernel supports on-line resize for filesystems mounted using ext3 and ext4.). - mo'
Per favore non muck con fdisk quando growpart lo farò molto facilmente per te. - STRML


Una soluzione più semplice: utilizzare growpart <device> <partition>:

growpart /dev/xvda 1  # Grows the partition; note the space
resize2fs /dev/xvda1  # Grows the filesystem

Come sempre, eseguire il backup della tabella delle partizioni (sfdisk -d /dev/xvda > partition_bak.dmp) nel caso in cui.


22
2017-07-18 13:26



Che ne dici di restringere? - Aaron Franke
Speravo di usare questo metodo, ma ottenuto sfdisk: /dev/nvme0n1p5: does not contain a recognized partition table (usando il dual boot con Windows) - monkut
Il restringimento non è possibile da fare on-line. Raccomando di usare gparted per questo. - STRML
Questo è stato perfetto per ridimensionare la partizione di root e il filesystem della mia VM AWS. Saluti. - MetaFight
growpart è parte di cloud-utils. Nel caso in cui non sia installato, è possibile installare con apt-get install cloud-utils - klor


Potresti anche solo fare uso di GParted - Finché la partizione che stai ridimensionando non è quella da cui hai avviato, altrimenti ti suggerisco di farlo CD live l'opzione è un po 'più facile per i principianti.

GParted fondamentalmente fa tutti i passaggi, basandosi solo su una GUI.


8
2017-09-30 11:34



Ho avviato il mio sistema con Ubuntu 12.04 Live CD e ho ridimensionato la partizione ext4 con GParted. Ha funzionato bene per me. Comunque, prima di questa operazione ho eseguito il backup di tutti i miei dati importanti. - StandDuPp
Penso che, gparted abbia bisogno di partizione smontata. ma posso sbagliarmi. - Nick
La domanda riguarda ovviamente la partizione da cui sono stati avviati e l'avvio di un CD live richiede il riavvio della macchina. -1 - wjandrea


Sì, puoi ridurre / spostare / far crescere una partizione root online senza alcun riavvio (né livecd, né usbkey): consulta questa risposta. È molto ben scritto e facile da seguire, anche se piuttosto lungo e un po 'rischioso. Quindi, se vuoi solo far crescere la tua partizione ext4, puoi mantenere il funzionamento convenzionale resize2fssoluzioni.

La soluzione generale che ho scelto funzionerà su qualsiasi tipo di soluzione dedicata o VPS, ad esempio.

TLDR; questa soluzione implica pivot_root a tmpfs così puoi umount in modo sicuro la partizione di root in diretta e giocherellare con esso. Una volta fatto, lo farai pivot_root di nuovo sulla tua nuova partizione di root.

Questo permette praticamente qualsiasi manipolazione sul file system di root (spostalo, cambia filesystem, cambiando il suo dispositivo fisico ...).

Nessun processo di riavvio è richiesto nel processo e questo consente di bypassare la limitazione di resize2fs  non essere in grado di restringere  ext4 partizioni.

L'ho usato personalmente, e funziona anche molto bene sul sistema Debian, quindi dovrebbe funzionare su Ubuntu. Sono molto sorpreso di non vedere questa soluzione approfondita un po 'più legata alle tante domande nei siti web di stackexchange che si occupa dello stesso problema.

Nota: Ovviamente se vuoi far crescere la tua partizione, è semplice resize2fs sarà sufficiente come affermato in numerosi luoghi e in altre risposte qui.


8
2018-02-01 02:08



Penso che molte persone, dopo aver fermato tutti i programmi e i servizi che accedono alla partizione di root, potrebbero aver riavviato la macchina. Per il restringimento / spostamento, potrebbe essere ancora più veloce utilizzando un CD live, ma per la crescita (di gran lunga il compito più comune, e che cosa ha chiesto OP), ci sono modi che non implicano un arresto temporaneo della maggior parte del sistema . - Søren Løvborg
@ SørenLøvborg: è possibile riavviare i servizi di base che richiedono una produzione continua mentre si esegue la procedura completa. Esistono molte configurazioni in cui non è possibile inserire LiveCD (istanze VPS, server dedicati ...) o circostanze in cui si desidera evitare il riavvio per motivi specifici. Il titolo della domanda originale menziona "ridimensionamento", che attira le persone in cerca di restringimenti delle partizioni online. ** Nessuna altra soluzione consente di ridurre online ext4. ** Questa soluzione è rischiosa, complessa, ma la più potente di tutte e colma le carenze degli altri. - vaab


Appena finito il ridimensionamento di una partizione di root ext4 su un sistema live mentre la radice era montata.

[root@habib i686]# resize2fs /dev/vg_habib/lv_root
resize2fs 1.42 (29-Nov-2011)
Filesystem at /dev/vg_habib/lv_root is mounted on /; on-line resizing required
old_desc_blocks = 4, new_desc_blocks = 10
Performing an on-line resize of /dev/vg_habib/lv_root to 38427648 (4k) blocks.
The filesystem on /dev/vg_habib/lv_root is now 38427648 blocks long.

[root@habib i686]# 

5
2017-12-04 22:40





L'ho fatto senza successo umount, pivot_root, o rimozione temporanea della partizione principale, usando parted 3.2 su Ubuntu 16.04, kernel 4.4.0. Per essere cauto, ho fatto tutto da una console virtuale con il networking disattivato, e ho preso uno snapshot in anticipo per ogni evenienza, ma l'istantanea non era necessaria, quindi avrei potuto farlo ugualmente via SSH e senza modificare i runlevel.

Determina la dimensione della partizione: parted /dev/sda1 print | egrep "Disk.*GB"

Passare facoltativamente alla modalità multiutente senza rete (deve essere eseguita da una console, non da SSH):

runlevel     # remember the original runlevel
init 2

Facoltativamente, acquisire un'istantanea VM per essere cauti.

Ridimensiona partizione:

parted
p
resizepart NUMBER SIZE
# answer "Yes" when asked about resizing a live partition.
q

Ridimensiona il filesystem: resize2fs /dev/sda1

Se qualcosa va storto, puoi ripristinare la tua istantanea qui. Se tutto è andato bene, tornare al normale runlevel (ottenuto sopra) - normalmente 5: init 5. A questo punto potrebbe essere meglio fare un riavvio completo per assicurarsi che tutto ritorni correttamente (ho avuto un problema di data / ntp in seguito).


1
2017-07-14 00:09





Come affermato prima:

  • è possibile espandere l'espansione dal sistema di root (nessuna difficoltà, poiché la sezione di avvio non deve essere spostata)

  • il restringimento di una partizione root live deve essere eseguito da un dispositivo di avvio esterno (avvio da cd / chiavetta USB dal sistema live), come se ci fosse un errore, una mancata corrispondenza ... qualsiasi cosa ... il sistema si blocca, deve essere riavviato e alla fine non sarà in grado di avviare correttamente.

Qualsiasi tipo di "ma l'ho fatto e funziona" è pura fortuna.


0
2018-01-10 21:58





Segui questi passi.

  1. terminale aperto come superutente su
  2. correre parted
  3. genere p per vedere le partizioni disponibili
  4. identifica il tuo numero di partizione di root (es: 'sda 3' significa numero 3) ed elimina una partizione adiacente usando rm PARTITION NUMBERper creare spazio libero.
  5. ora aumenta la dimensione della radice digitando resizepart ROOT NUMBER e riavviare il sistema se necessario
  6. Uscita parted digitando exit e nel tipo di terminale partprobe e premi invio (questo può essere fatto anche dopo il riavvio)
  7. finalmente corri resize2fs /dev/sda PARTITION NUMBER e goditi la spaziosa partizione di root.

0
2017-09-13 20:22