Come posso ridimensionare una partizione di root in fase di esecuzione?

193

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 lo spazio non allocato allo spazio allocato alla partizione di root senza dover spegnere il server?

    
posta BonboBingo 30.01.2011 - 18:23
fonte

9 risposte

168

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.

Passaggio 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 richiedere un riavvio (anche se non devi mai avviare un altro sistema o un live CD).

Ecco come lo faccio: usa fdisk per cancellare prima la partizione (l'idea è che i dati sul disco siano preservati), quindi ricrearlo con cura 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 del vecchio. Anche l'Id dovrebbe corrispondere (83 per i sistemi Linux). Preparati a perdere tutti i tuoi dati al minimo errore di battitura.

Per essere sicuri, 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. ; -)

Passaggio 2. Come fdisk ti ricorda utilmente, devi ricaricare la tabella delle partizioni prima di procedere. Il modo più sicuro è semplicemente riavviare; ma puoi anche utilizzare partprobe o kpartx (ulteriori informazioni) .

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

Esempio:

$ sudo resize2fs /dev/sda1
    
risposta data Søren Løvborg 06.04.2012 - 16:23
fonte
110

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

sudo resize2fs /dev/sda1

MODIFICA: la riduzione in linea non è consentita:

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
    
risposta data CodeAddict 02.03.2012 - 11:50
fonte
19

Una soluzione più semplice - usa growpart <device> <partition> :

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

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

    
risposta data STRML 18.07.2017 - 15:26
fonte
8

Potresti anche utilizzare GParted - purché la partizione che stai ridimensionando non sia quella da cui hai eseguito l'avvio - altrimenti ti suggerisco l'opzione live CD un po 'più facile per i neofiti.

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

    
risposta data leatherjacket 30.09.2012 - 13:34
fonte
8

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 aderire alle convenzionali soluzioni resize2fs di lavoro.

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

TLDR; questa soluzione implica a pivot_root a tmpfs in modo che tu possa umount tranquillamente la partizione di root in tempo reale e armeggiare con essa. Al termine, pivot_root torna sulla nuova partizione di root.

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

Non sono richiesti riavvii nel processo e questo consente di ignorare la limitazione di resize2fs non essere in grado di ridurre 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 trattano lo stesso problema.

Nota: Ovviamente se vuoi far crescere la tua partizione, basterà un semplice resize2fs come indicato in numerosi luoghi e in altre risposte qui.

    
risposta data vaab 01.02.2016 - 03:08
fonte
5

Ho appena finito di ridimensionare una partizione 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]# 
    
risposta data CDR 04.12.2012 - 23:40
fonte
0

L'ho fatto con successo senza 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 disabilitato, e ho preso uno snapshot in anticipo per ogni eventualità, ma l'istantanea non era necessaria, quindi avrei potuto farlo anche tramite SSH e senza modificare i runlevel.

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

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

runlevel     # remember the original runlevel
init 2

Facoltativamente, prendere uno snapshot 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, torna 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).

    
risposta data Roger Dueck 14.07.2017 - 02:09
fonte
0

Come affermato in precedenza:

  • è possibile espandere live da un sistema di root. (nessuna difficoltà, poiché la sezione di avvio non deve essere spostata)

  • il restringimento di una partizione di root live deve essere eseguito da un dispositivo di avvio esterno (avvio da cd / stick di 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 avviarsi correttamente.

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

    
risposta data ascervera 10.01.2014 - 22:58
fonte
0

Segui questi passaggi.

  1. apri terminale come superutente su
  2. Esegui parted
  3. digita p per vedere le partizioni disponibili
  4. identifica il tuo numero di partizione root (es: 'sda 3' significa numero 3) ed elimina una partizione adiacente usando rm PARTITION NUMBER per creare spazio libero.
  5. ora aumenta la dimensione root digitando resizepart ROOT NUMBER e riavvia il sistema se necessario
  6. exit parted digitando exit e nel tipo di terminale partprobe e premi invio (questo può essere fatto anche dopo il riavvio)
  7. finalmente esegui resize2fs /dev/sda PARTITION NUMBER e goditi la spaziosa partizione di root.
risposta data Gurunadha Reddy 13.09.2017 - 22:22
fonte

Leggi altre domande sui tag