Wie kombiniere ich zwei logische Volumes, die sich in LVM auf einem einzigen physischen Volume befinden?

14

Ich habe zwei logische Volumes, eines ist als / gemountet, das andere ist als / home gemountet.

Ich möchte sie kombinieren, weil der /Speicherplatz ständig knapp wird. (Ja, ich weiß, was den ganzen Platz belegt. Nein, ich kann ihn nicht entfernen.)

Ich bin bereit, die Maschine für ein oder zwei Tage auszuschalten, um das zu tun.

Betriebssystem: 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)

Nick ODell
quelle
1
Warum nicht einfach die /Lautstärke erhöhen, ist das nicht der Sinn von LVM?
Jasonwryan
2
@jasonwryan Warum muss ich die Speicherplatzzuweisung manuell anpassen? Ist das nicht der springende Punkt eines Dateisystems?
Nick ODell
@NickODell Nein. Wenn ein Volume zu klein ist, um die Daten aufzunehmen, ist es einfach zu klein. Die Gesamtkapazität ist ein Faktor der Volumengröße, nicht der Dateisystemgröße. Mit logischen Volumes ist es jedoch einfacher, die Größe der bereitgestellten Volumes zu ändern und unterschiedliche Speicherressourcen zu einem einzigen Volume zusammenzuführen. Mit LVM sollten Sie in der Lage sein, das zu tun, was jasonwryan vorschlägt, ohne einen Neustart durchzuführen: Stellen Sie sicher, dass reguläre Benutzer abgemeldet sind (um free / home), umount / home lvreduce (nicht vergessen, -r), mounten Sie es erneut und führen Sie dann ein lvextend aus auf dem Root-Dateisystem und du bist fertig. Wenn Sie zusammenführen möchten, müssen Sie einen Rsync durchführen.
Bratchley
@JoelDavis Wenn alle Benutzer sich abmelden müssen, ist es dann relevant, ob ein Neustart erforderlich ist?
Nick ODell
@NickODell Ähm ... ja? Die meisten Linux-Systeme sind Server. Wenn Sie nichts anderes sagen, sollten Sie sich darüber im Klaren sein, dass dies die Annahme der Leute ist.
Bratchley

Antworten:

9

Ich bin fertig und die Neupartitionierung hat funktioniert. Da jedoch in beiden Handbüchern Bereiche fehlen, werde ich zusammenfassen, was ich getan habe. Bitte beachten Sie, dass ich meinen Benutzernamen durch zzzzund den Namen meines Computers durch ersetzt habe xxxxxxx. Sofern nicht anders angegeben, sollten alle Befehle als root ausgeführt werden.

Zuerst habe ich gesichert:

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

Dadurch wird eine komprimierte Sicherung des Verzeichnisses / home erstellt und auf meinem externen Laufwerk abgelegt. (Beachten Sie, dass Ihr externes Laufwerk einen anderen Pfad hat.)

Jetzt müssen Sie im Einzelbenutzermodus neu starten.

reboot

Wenn sich Ihr Computer wieder einschaltet, müssen Sie nach einem Bildschirm wie diesem suchen:

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

Drücken Sie eine beliebige Taste, um dies zu unterbrechen. Sie sollten einen Bildschirm wie diesen sehen:

Madenstiefel Centos Drücken Sie a, dann Leertaste und geben Sie ein single. Drücke Enter.

Sie sollten eine Eingabeaufforderung wie diese sehen:

 [root@xxxxxxx /] # 

Geben Sie die folgenden Befehle ein:

df -h

Es sollte Ihnen zeigen Size, Usedund Avail. Wir interessieren uns für Used.
Notieren Sie, wie viel Speicherplatz von Ihrem Home-Volume belegt ist. Wir werden das später brauchen.

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

Erinnern Sie sich, wie viel Platz Ihr Heimvolume verbraucht hat? Verdopple das und gib es diesem Befehl. Zum Beispiel hatte ich 15 Gigabyte von meinem Home-Verzeichnis verwendet, so dass ich es auf 30 Gigabyte dimensionierte.

resize2fs /dev/mapper/vg_xxxxxxx-lv_home 30G

Warnung : Im nächsten Schritt können Daten verloren gehen. Stellen Sie sicher, dass Sie eine Größe eingeben, die größer als der vorherige Befehl ist. Fügen Sie sicherheitshalber 5 Gigabyte hinzu.

lvresize -L 35G vg_xxxxxxx/lv_home

Weisen Sie die Root-Partition an, den gesamten Speicherplatz zu verwenden, den wir gerade freigegeben haben.

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

Kopieren Sie Ihre Daten in die Root-Partition

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

(Übrigens -aist das wichtig, da sonst alles im Besitz von root ist und Sie das nicht wollen.)
Überprüfen Sie kurz, ob die Daten korrekt kopiert wurden:

ls -lR /home

Jetzt entfernen wir die Home-Partition und weisen root an, den neuen Speicherplatz wieder zu belegen.

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

Zu diesem Zeitpunkt habe ich einen großen Fehler gemacht, aus dem Sie lernen können. Ich habe neu gestartet, und als das System wieder hochgefahren ist, hat es sich geweigert, meine Root-Partition als Lese- / Schreibzugriff bereitzustellen, da meine / home-Partition nicht bereitgestellt werden konnte. Also, bevor wir neu starten, tippen wir

nano /etc/fstab

Eine dieser Zeilen weist das System an, die / home-Partition einzuhängen. Stellen Sie ein #davor. Drücken Sie Strg-O, Enter, Strg-X. Jetzt können Sie neu starten.

(Hypothetisch ist der Befehl zum Mounten der Root-Partition, wenn Sie vergessen haben, fstab wie ich zu bearbeiten. mount -n -o remount -t ext2 /dev/vg_xxxxxxxx/lv_root /)

Nick ODell
quelle
liebe das Detail!
NMR
Ich habe ein ähnliches Problem, habe aber keinen physischen Zugriff auf die Maschine. Gibt es eine Möglichkeit, dies zu tun, die kein Booten im Einzelbenutzermodus erfordert?
FrustratedWithFormsDesigner
@FrustratedWithFormsDesigner Theoretisch ja. Wenn Sie ssh-Zugriff haben, können Sie Ihre /home. Solange Sie die Bereitstellung /homeaufheben können , können Sie sie entfernen. Ich bin jedoch nicht wirklich qualifiziert, Sie durch den Prozess zu führen. Dies ist etwas, über das Sie eine neue Frage stellen sollten.
Nick ODell
1
@ Nickodell: Ich habe eine neue Frage gestellt: askubuntu.com/questions/1115913/…
FrustratedWithFormsDesigner
@FrustratedWithFormsDesigner Das ist ein viel besserer Rat, als ich Ihnen hätte geben können.
Nick ODell
3

WARNUNG: Sichern Sie alle wichtigen Daten, bevor Sie etwas unternehmen!

Sie müssten alle Daten von der / home-Partition auf eine andere Partition, eine lokale Partition oder ein externes Laufwerk verschieben oder an einen anderen Ort, an dem genügend Speicherplatz vorhanden ist.

Entfernen Sie die / home lv und erweitern Sie dann die / (root) lv

Kopieren Sie die Daten zurück in das Verzeichnis / home

Bearbeiten 1

Die obige Antwort geht davon aus, dass Sie nicht genügend Speicherplatz in der Root-Partition haben, um die Daten in der Home-Partition abzulegen.

Ist dies nicht der Fall, hängen Sie die Home-Partition einfach an einer anderen Stelle ein und kopieren Sie die Daten. Beispiel:

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

Entfernen Sie dann einfach die Home-Partition und erweitern Sie die Root-Partition

ghm1014
quelle
3

Sie können dies auch ohne externen Speicher tun, von dem aus /Sie die Bereitstellung aufheben müssen /home.

Dies ist kein besonders riskantes Verfahren, wenn Sie vorsichtig sind. Dennoch gilt der Standard: Erstellen Sie zuerst Sicherungen und testen Sie sie.

Ich werde foofür den Namen der Datenträgergruppe und rootund homeals logische Datenträgernamen verwenden. Dadurch werden die Pfade für logische Volumes foo/rootund foo/homesowie die Gerätepfade /dev/mapper/foo-rootund erstellt /dev/mapper/foo-home. Ich gehe davon aus, dass sie sich in derselben Volume-Gruppe befinden, da dies sonst komplizierter wird und vom physischen Volume-Layout der beiden Volume-Gruppen abhängt.

Zuerst aushängen /homeund ausführen e2fsck -f /dev/mapper/foo-home. Verkleinern Sie dann zuerst das Dateisystem und entsprechend das logische Volume. Führen resize2fs /dev/mapper/foo-home NNNNwo NNNN die Anzahl der Blöcke ist , dass Sie innerhalb des Volumens beibehalten möchten (Sie kB oder MB oder GB statt mit dem Suffix verwenden können K, Moder G). Nachdem das Dateisystem schrumpft, schrumpft das logische Volumen mit lvresize -L MMMM foo/homedem MMMM ist eine Anzahl von Megabyte (beachten Sie, dass die Standardeinheit verschieden ist resize2fs, aber Sie die gleichen Suffixe verwenden können K, M, G). Verkleinern Sie das logische Volume nicht weiter als bis zum Dateisystem. Dies ist der einzige gefährliche Schritt in diesem Verfahren.

In der Volumengruppe ist jetzt nicht verwendeter Raum. Führen Sie lvresize -l +100%FREE foo/rootden Befehl aus , damit das Root-Volume den gesamten freien Speicherplatz in der Volume-Gruppe abruft. Führen Sie dann resize2fs /dev/mapper/foo-root(ohne Größenparameter) aus, um das Dateisystem auf das gesamte logische Volume zu vergrößern. Die Vergrößerung kann durchgeführt werden, während das Volume geladen ist.

Sie haben jetzt Platz, um einige Dateien zu kopieren. Wenn Sie nicht genug Platz für alles haben, bewegen Sie sich so weit wie möglich und wiederholen Sie den Vorgang.

Sobald Sie alle Dateien kopiert haben /home, können Sie sie zerstören. Stellen /homeSie sicher, dass leer ist (wenn Sie die Dateien verschoben haben) oder dass alle darin enthaltenen Dateien /homekopiert wurden /root(wenn Sie die Dateien kopiert haben). Führen Sie den folgenden Befehl aus, um das nicht mehr benötigte logische Volume zu zerstören lvremove foo/home. Zuletzt vergrößern Sie das Root-Volume mit lvresize -l 0%FREE foo/rootund das Dateisystem mit resize2fs /dev/mapper/foo-home.

Gilles 'SO - hör auf böse zu sein'
quelle
Hinweis: / home konnte die Bereitstellung nicht aufheben, bis ich in den Einzelbenutzermodus zurückgekehrt bin.
Nick ODell
Hinweis: Es wird als vg_ (Computername) und lv_home
Nick ODell
Ok, ich habe es geschafft. In diesem Handbuch fehlten jedoch einige Details, sodass ich bald meinen vollständigen Befehlsverlauf veröffentlichen werde.
Nick ODell
2

OK, ich befand mich in genau der gleichen Position. Anscheinend erstellt CentOS standardmäßig ein kleines Root-Volume und füllt den Rest Ihres Speicherplatzes mit /home. Ich habe mein Setup sogar zuerst in einer VM getestet, aber mit der kleineren Festplatte hat CentOS das Home-Volume nicht erstellt. Ich habe dieses Problem aufgegriffen, bevor ich räumlich eingeschränkt wurde, und mir auch überlegt, wie ich nicht in den Einzelbenutzermodus wechseln muss. Wie folgt:

Holen Sie sich den Zugriff auf die Maschine, ssh ist in Ordnung (vorausgesetzt, Nicht-Root-Benutzer).

  1. cd / Sie befinden sich also nicht im Basisverzeichnis
  2. sudo -s Wir werden die Wurzel für all das sein
  3. lsof /home Stellen Sie sicher, dass niemand das Home-Volume verwendet, sollte nicht sein
  4. mv,, taroder ähnlich den Inhalten von zu Hause an einem anderen Ort
  5. lvremove centos/home
  6. Bearbeiten /etc/fstab und kommentieren oder entfernen Sie die Zeile für/home
  7. Verschieben Sie den Inhalt von zu Hause, den Sie zuvor gesichert haben, wieder in den Ordner /home- Sie sind jetzt an einer sicheren Position. Ein Neustart sollte hier in Ordnung sein
  8. lvresize -l +100%FREE centos/root
  9. xfs_growfs /dev/centos/root unter CentOS 7 könnten andere verwenden resize2fs
  10. df -h hast du es geschafft

Hoffe das erleichtert es jemandem. Es ist wirklich erstaunlich, was man heutzutage live auf Dateisystemen machen kann.

Damon Maria
quelle
Es ist definitiv einfacher, wenn Sie keine Daten migrieren müssen. :)
Nick ODell