Come posso combinare due volumi logici che risiedono su un singolo volume fisico in LVM?


14

Ho due volumi logici, uno è montato come /, l'altro è montato come / home.

Voglio combinarli perché il /volume esaurisce costantemente lo spazio. (Sì, so cosa sta usando tutto quello spazio; no, non posso rimuoverlo.)

Sono disposto a spegnere la macchina per un giorno o due per farlo.

OS: Linux xxxxx 2.6.32-279.22.1.el6.x86_64 #1 SMP Wed Feb 6 03:10:46 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux(CentOS)


1
Perché non aumentare semplicemente il /volume, non è questo il punto di usare LVM?
Jasonwryan,

2
@jasonwryan Perché dovrei modificare manualmente la modalità di allocazione dello spazio su disco? Non è questo il punto di un filesystem?
Nick ODell,

@NickODell No. Se un volume è troppo piccolo per contenere i dati, è troppo piccolo. La capacità complessiva è un fattore di dimensione del volume, non di dimensione del filesystem. I volumi logici rendono più semplice il ridimensionamento dei volumi montati e l'unione di risorse di archiviazione disparate in un unico volume. Con LVM dovresti essere in grado di fare ciò che jasonwryan sta suggerendo senza nemmeno riavviare: assicurati che gli utenti regolari siano disconnessi (per liberare / home) umount / home lvreducelo (non dimenticare -r) reinstallalo quindi fai un lvextend sul filesystem di root e il gioco è fatto. Se vuoi unire devi fare un rsync.
Bratchley,

@JoelDavis Se richiedo che tutti gli utenti si disconnettano, è rilevante se devo riavviare?
Nick ODell,

@NickODell Um ... sì? La maggior parte dei sistemi Linux sono server, dovresti capire che sarà un presupposto delle persone se non dici diversamente.
Bratchley,

Risposte:


10

Ho finito e la ripartizione ha funzionato. Tuttavia, poiché mancano aree in entrambe le guide, riassumerò ciò che ho fatto. Si prega di notare che ho sostituito il mio nome utente con zzzze il nome del mio computer con xxxxxxx. Inoltre, tutti i comandi devono essere eseguiti come root se non diversamente specificato.

Innanzitutto, ho eseguito il backup:

tar -zcvf /media/e14be279-8c11-450a-b52c-1493cff3c632/xxxxxxx-home.tar.gz --exclude=/home/zzzz/Downloads /home

Questo crea un backup compresso della directory / home e lo inserisce sul mio disco esterno. (Nota che il tuo disco esterno avrà un percorso diverso.)

Ora è necessario riavviare in modalità utente singolo.

reboot

Quando il computer si riaccende, è necessario cercare una schermata come questa:

Booting Centos 2.6.32-279.22.1.el6.x86_64 in 3 seconds...

Premere un tasto qualsiasi per interromperlo. Dovresti vedere una schermata come questa:

grub boot centos Premere a, quindi Spazio, quindi digitare single. Premi invio.

Dovresti vedere un prompt come questo:

 [root@xxxxxxx /] # 

Immettere i seguenti comandi:

df -h

Dovrebbe mostrare Size, Usede Avail. Ci interessa Used.
Annota la quantità di spazio utilizzata dal volume di casa. Ne avremo bisogno in seguito.

umount /home
e2fsck -f /dev/mapper/vg_xxxxxxx-lv_home

Ricordi quanto spazio ha utilizzato il tuo volume di casa? Raddoppia quello e assegnalo a questo comando. Ad esempio, avevo 15 gigabyte utilizzati dalla mia directory home, quindi l'ho ridimensionato a 30 gigabyte.

resize2fs /dev/mapper/vg_xxxxxxx-lv_home 30G

Avviso : questo passaggio successivo è quello che può perdere dati. Fare Assicurarsi che si mette in una dimensione più grande rispetto al comando precedente. Aggiungi 5 Gigabyte per essere sicuro.

lvresize -L 35G vg_xxxxxxx/lv_home

Di 'alla partizione di root di usare tutto lo spazio che abbiamo appena liberato.

lvresize -l +100%FREE vg_xxxxxxx/lv_root
resize2fs /dev/mapper/vg_xxxxxxx-lv_root

Copia i tuoi dati nella partizione root

mount -t ext4 /dev/mapper/vg_xxxxxxx-lv_home /mnt/home
ls /mnt/home
cp -a /mnt/home/. /home/

(A proposito, questo -aè importante, perché altrimenti tutto sarà di proprietà di root, e non lo vuoi.)
Fai un rapido controllo che i dati siano stati copiati correttamente:

ls -lR /home

Ora rimuoviamo la partizione home e diciamo a root di occupare di nuovo il nuovo spazio.

umount /mnt/home
lvremove /dev/mapper/vg_xxxxxxx-lv_home
lvresize -l +100%FREE vg_xxxxxxx/lv_root
resize2fs /dev/mapper/vg_xxxxxxx-lv_root

A questo punto, ho fatto un grosso errore, da cui puoi imparare. Ho riavviato, e quando il sistema è tornato, si è rifiutato di montare la mia partizione di root come lettura-scrittura perché non poteva montare la mia partizione / home. Quindi, prima di riavviare, digitiamo

nano /etc/fstab

Una di quelle linee dirà al sistema di montare la partizione / home. Metti un #prima. Premi Ctrl-O, Invio, Ctrl-X. Ora puoi riavviare.

(Ipoteticamente, se dovessi dimenticare di modificare fstab come ho fatto io, il comando per montare la tua partizione di root è mount -n -o remount -t ext2 /dev/vg_xxxxxxxx/lv_root /)


amo i dettagli!
nm

Ho riscontrato un problema simile, ma non ho accesso fisico alla macchina. C'è un modo per farlo che non richiede l'avvio in modalità utente singolo?
FrustratedWithFormsDesigner,

@FrustratedWithFormsDesigner Teoricamente, sì. Se si dispone dell'accesso ssh, è possibile eseguire il backup di /home. Quindi, fino a quando è possibile smontare /home, è possibile rimuoverlo. Tuttavia, non sono davvero qualificato per parlarti durante il processo. Questo è qualcosa su cui dovresti porre una nuova domanda.
Nick ODell,

1
@NickODell: ho fatto una nuova domanda: askubuntu.com/questions/1115913/…
FrustratedWithFormsDesigner

@FrustratedWithFormsDesigner È un consiglio molto migliore di quello che avrei potuto darti.
Nick ODell,

3

ATTENZIONE: eseguire il backup di tutti i dati critici prima di fare qualsiasi cosa!

Dovresti spostare tutti i dati dalla partizione / home a un'altra partizione, partizione locale o unità esterna o in qualsiasi altro posto hai abbastanza spazio.

Rimuovere / home lv e quindi espandere / (root) lv

Copia i dati nella directory / home

Modifica 1

La risposta sopra presuppone che non si disponga di spazio sufficiente nella partizione root per posizionare i dati nella partizione home.

In caso contrario, basta montare la partizione home da qualche altra parte e copiare i dati, ad esempio:

umount /home
mount /dev/mapper/lv-home /mnt/home
cp -a /mnt/home/. /home/

Quindi basta rimuovere la partizione home ed espandere la partizione root


3

Puoi farlo senza memoria esterna, in esecuzione da /, ma dovrai smontare/home .

Questa non è una procedura particolarmente rischiosa se stai attento, ma comunque si applica il consiglio standard: esegui prima i backup e testali.

Userò fooper il nome del gruppo di volumi roote homecome nomi di volume logici. Questo rende i percorsi del volume logico foo/roote foo/home, e i percorsi del dispositivo /dev/mapper/foo-roote/dev/mapper/foo-home . Presumo che si trovino nello stesso gruppo di volumi, altrimenti questo diventa più complicato e dipende dal layout del volume fisico dei due gruppi di volumi.

Innanzitutto, smonta /homeed esegui e2fsck -f /dev/mapper/foo-home. Quindi ridurre prima il filesystem e il volume logico di conseguenza. Esegui resize2fs /dev/mapper/foo-home NNNNdove NNNN è il numero di blocchi che vuoi conservare all'interno del volume (puoi usare kB o MB o GB invece con il suffisso K, Moppure G). Dopo la compattazione del file system, ridurre il volume logico con lvresize -L MMMM foo/homecui MMMM è un numero di megabyte (nota che l'unità di default è diverso da resize2fs, ma è possibile utilizzare gli stessi suffissi K, M, G). Fai molta attenzione a non ridurre il volume logico oltre il filesystem: questo è l'unico passo pericoloso in questa procedura.

Ora c'è spazio inutilizzato nel gruppo di volumi. Esegui lvresize -l +100%FREE foo/rootper fare in modo che il volume di root acquisisca tutto lo spazio libero nel gruppo di volumi. Quindi eseguire resize2fs /dev/mapper/foo-root(senza parametro di dimensione) per ingrandire il filesystem in modo da estendere l'intero volume logico; l'ingrandimento può essere eseguito mentre il volume è montato.

Ora hai spazio per copiare alcuni file. Se non hai abbastanza spazio per tutto, sposta il più possibile, quindi ripeti la procedura.

Dopo aver copiato tutti i file /home, sei pronto a distruggerlo. Verifica che /homesia vuoto (se hai spostato i file) o che tutti i file in /homesono stati copiati /root(se hai copiato i file). Per distruggere il volume logico ora non necessario, eseguire lvremove foo/home. Infine, allarga il volume di root con lvresize -l 0%FREE foo/roote il suo filesystem con resize2fs /dev/mapper/foo-home.


Nota: / home ha rifiutato di smontare fino al riavvio in modalità utente singolo.
Nick ODell,

Nota: viene chiamato vg_ (nome macchina) e lv_home
Nick ODell

Ok, l'ho fatto funzionare. Mancavano alcuni dettagli in questa guida, quindi pubblicherò presto la mia cronologia completa dei comandi.
Nick ODell,

2

OK, mi sono trovato esattamente nella stessa posizione. Sembra che CentOS crei un piccolo volume di root per impostazione predefinita e riempia il resto del tuo spazio /home. Ho anche testato la mia configurazione prima in una VM, ma con il disco più piccolo CentOS non ha creato il volume di casa. Ho riscontrato questo problema prima di diventare comunque limitato nello spazio e ho anche pensato a come non dover accedere alla modalità utente singolo. Come segue:

Ottieni l'accesso alla macchina, ssh va bene (supponendo che l'utente non root).

  1. cd / quindi non sei nella home directory
  2. sudo -s saremo root per tutto questo
  3. lsof /home controlla che nessuno stia usando il volume di casa, non dovrebbe esserlo
  4. mv, taro simili i contenuti di casa da qualche altra parte
  5. lvremove centos/home
  6. Modifica /etc/fstabe commenta o rimuovi la riga per/home
  7. Sposta i contenuti di casa di cui hai eseguito il backup prima in /home- ora sei in una posizione sicura, un riavvio qui dovrebbe essere OK
  8. lvresize -l +100%FREE centos/root
  9. xfs_growfs /dev/centos/root su CentOS 7, altri potrebbero usare resize2fs
  10. df -h ci sei riuscito?

Spero che questo renda più facile per qualcuno. Al giorno d'oggi è davvero sorprendente quello che puoi fare live su filesystem.


È sicuramente più semplice se non è necessario migrare alcun dato. :)
Nick ODell,
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.