Come posso ridimensionare le partizioni usando la riga di comando senza usare una GUI su un server?


45

Ho accesso al server solo tramite un terminale e non posso usare strumenti grafici come GParted!
Voglio creare una nuova partizione da una parte del root (circa 768mb) per lo scambio.

# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda         20G  1.3G   18G   7% /
udev             10M     0   10M   0% /dev
tmpfs           199M  4.9M  194M   3% /run
tmpfs           100M   12K  100M   1% /run/user
tmpfs           5.0M  4.0K  5.0M   1% /run/lock

Risposte:


37

Non è possibile ridurre / modificare una partizione se è montata una delle partizioni sul dispositivo di archiviazione. Quindi, per smontare e modificare il filesystem di root, il sistema operativo deve essere spento. Quindi avviare un sistema live e modificare la partizione come descritto nelle altre risposte.

Soluzione alternativa: file di scambio

In alternativa alla creazione di un'intera partizione, un file di scambio offre la possibilità di variare al volo le sue dimensioni e viene rimosso più facilmente del tutto. Il file di scambio può essere hot plug . cioè può essere aggiunto e rimosso senza smontare / spegnere il sistema operativo.

  1. Crea un file da 512 MB chiamato /swapfile. Questo sarà il nostro file di scambio.

    fallocate -l 512M /swapfile  
    

    O

    dd if=/dev/zero of=/swapfile bs=1M count=512
    
  2. Imposta le autorizzazioni giuste (perché un file di scambio leggibile in tutto il mondo è un'enorme vulnerabilità locale):

    chmod 600 /swapfile
    
  3. Dopo aver creato il file di dimensioni corrette, formattalo per scambiare:

    mkswap /swapfile
    
  4. Attiva il file di scambio:

    swapon /swapfile
    
  5. Modifica /etc/fstabe aggiungi una voce per il file di scambio:

    /swapfile none swap defaults 0 0
    

Maggiori dettagli su arch linux wiki .


Penso che questa sia la risposta più semplice ed efficiente =)! Ci sono implicazioni nell'uso di un file anziché di una partizione?
Alaa Ali,

2
Prestazioni leggermente basse se il file è frammentato. Non vi è alcun vantaggio in termini di prestazioni in un file di scambio contiguo o in una partizione, entrambi vengono trattati allo stesso modo.
Totti,

1
Penso che questa sia la soluzione migliore. Poiché non si sta formattando, riducendo o modificando in altro modo la partizione (tabelle), non vi è alcun rischio di perdita di dati.
R110

28

Prima di tutto è importante sapere che non è possibile ridimensionare per ridurre la partizione di root se la si sta utilizzando (questo si chiama restringimento online). Puoi solo coltivarlo online. Questo è supportato dal resize2fscomando. Supporrò quanto segue:

  • Non vuoi perdere le tue informazioni sulla partizione di root.
  • Non hai accesso fisico al disco rigido per utilizzare un LiveCD. Questo può valere per un ambiente virtuale o remoto. Nel caso di uno virtuale, è comunque possibile eseguire l'avvio da un LiveCD se si imposta la VM per l'avvio da un LiveCD. Ciò presuppone che la VM supporti l'output della GUI desktop da dove eseguiresti l'app Gparted per ridimensionarla facilmente. Ma dato che è meno probabile, suppongo che tu non possa.

Esistono 2 tipi di partizioni che è possibile ridimensionare, le partizioni LVM o le partizioni Logical Volume Manager che supportano il ridimensionamento online (Riduzione / Crescita) dalla creazione della galassia e delle partizioni standard che la maggior parte di noi utilizza. Al momento l'unico che ha quasi il 100% di supporto per il ridimensionamento online completo (Shrink / Grow) è il filesystem btrfs (che è ancora in fase di sviluppo). Spiegherò come eseguire le partizioni normali che molti di noi usano nel filesystem ext4.

Ridimensionamento (crescente) della partizione

Per far crescere la tua partizione puoi farlo con il root montato. Per fare questo semplicemente:

sudo resize2fs /dev/sda1

A condizione che tu abbia già lo spazio vuoto pronto per essere unito. Successivamente consiglio di riavviare affinché le modifiche abbiano effetto correttamente. Il comando sopra ridimensionerebbe al massimo consentito. Se desideri ridimensionare a una dimensione particolare, aggiungi semplicemente la dimensione alla fine:

sudo resize2fs /dev/sda1 25G

Se si desidera specificare 25,4 GB, non è possibile utilizzare ".". dovresti scendere di un'unità di misura. In questo caso da GB a MB, sembrerebbe così:

sudo resize2fs /dev/sda1 25400M

In questo modo avrai una partizione di 25.4G

Ridimensionare (ridurre) la partizione

La riduzione della partizione è un processo in due fasi che prevede:

  • Ridurre la dimensione del file system della quantità necessaria.
  • Ridurre le dimensioni del dispositivo a blocchi sottostante affinché corrispondano a quelle del file system.

Prima di ridurre la capacità di un file system è necessario ridurre le dimensioni del dispositivo a blocchi (che può essere una partizione o un volume logico). Poiché questo non è disponibile per nessuno dei file system ext *, non sarà possibile ridurlo da 20 GB a 19,5 GB per creare uno da 500 MB.

Anche Ext4 non supporta la riduzione online. Se provi a farlo, otterrai quanto segue:

inserisci qui la descrizione dell'immagine

La tua unica scommessa per quanto ne so è:

  • Installare un'altra versione di Ubuntu sullo stesso server (su un'altra partizione) che può quindi essere utilizzata per ridurre la partizione radice del server Ubuntu originale.

  • Installa il server Ubuntu da zero con le dimensioni che desideri

  • Utilizzare Ubuntu Server Live Image per ridimensionare la partizione. Per questo caso, dovrai accedere a questa schermata:

    inserisci qui la descrizione dell'immagine

    E scegli l'opzione Ridimensiona come mostrato nell'immagine sopra. Da lì sceglierai quale sarà la nuova dimensione poiché da qui puoi smontare l'unità e ridurla se lo desideri.

Come ulteriore aiuto, ecco il suppor del filesystem gparted http://gparted.org/features.php che fornisce un elenco molto dettagliato di quelli supportati e include se hanno un ridimensionamento online completo. Btrfs è tra questi.


Sono curioso, ci sono altri filesystem che supportano il restringimento online? zfs o btrfs forse?
Seth

Ho aggiunto un link in fondo. Il kernel deve anche supportare questo se il filesystem deve ridimensionare correttamente online.
Luis Alvarado,

Ho un server Ubuntu su una macchina VMware e la sua dimensione del disco è di 120G. Ma dopo aver usato la prima soluzione, ottengo questo errore: il filesystem è già lungo 27262720 blocchi. Niente da fare!
Dr.jacky,

1
Grazie @ Mr.Hyde. Ci sono stati diversi problemi con Workstation 10 e persino 11. Raccomanderei 12 e per Ubuntu aggiornerei anche all'ultimo o al nuovo LTS perché c'erano anche alcuni problemi. Nel mio caso ho una workstation VMware 12.0.1 e Ubuntu 15.10 a 64 bit.
Luis Alvarado,

3
Dalla manpage resize2fs:The resize2fs program does not manipulate the size of partitions.
ACK_stoverflow

6

La risposta dipende dal fatto che sia possibile smontare la partizione per ridurla o meno. Nel tuo caso, probabilmente non puoi smontare la partizione. In Linux (UNIX / MAC OS), il montaggio di una partizione si riferisce all'utilizzo del file system e alla mappatura sul punto di montaggio (nel tuo caso /). Smontaggio significa che smetti di usare il filesystem e rimuovi la mappatura sul punto di montaggio. Non è possibile smontare il filesystem contenente il sistema operativo in esecuzione.

Se la partizione può essere smontata

Supponiamo che tu voglia ridurre una partizione ext4 da 200GB su /dev/sda4montata su /data. Attualmente contiene musica e film o simili, quindi puoi smontarlo temporaneamente. Vuoi creare uno swap da 4 GB.

sudo umount /dev/sda4

per smontare la partizione.

sudo resize2fs /dev/sda4 196G

per ridimensionare il filesystem ext4 a 196 GB, supponendo che vi sia spazio sufficiente. Ora, devi ridurre la partizione. Attualmente credo che sia necessario utilizzare cfdiskper eliminare la partizione esistente e ricreare una partizione più piccola al suo posto. È quindi possibile creare anche una nuova partizione per lo scambio.

sudo cfdisk /dev/sda 

ti fornirà una GUI testuale per ispezionare la tua tabella delle partizioni. Ti consiglierei di printcreare una tabella delle partizioni su un file o una schermata a quel punto e prendere nota della configurazione corrente come backup. È quindi possibile selezionare /dev/sda4e deletela partizione. Al suo posto, free spaceverrà visualizzato. Utilizzare newper creare una nuova partizione con 196 GB al suo posto e impostare il tipo su ext4. Quindi, passa allo spazio libero finale e crea la partizione di scambio da 4 GB con il tipo swap. Nota: non ho testato questi comandi, al momento non posso giocare con i miei /.

Se la partizione non può essere smontata

Non è possibile ridurre una partizione ext3 / 4 montata (vedere la manpage di resize2fs). Poiché il sistema operativo in uso è in esecuzione /, non è possibile smontare /. Ciò significa che è necessario avviare un altro sistema operativo (ad es. Dalla chiave USB) per eseguire le modifiche.

Nel tuo caso, è un server remoto (su KVM molto probabilmente), quindi potresti non essere in grado di avviarlo da USB / un'immagine del sistema operativo live. Potrebbero esserci altri modi per modificare il partizionamento dal provider vServer tramite una GUI di amministrazione. Credo che al momento sia la tua migliore scommessa.

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.