LVM: Ist es möglich, eine verwendete Partition zu erweitern?

LVM: Ist es möglich, eine verwendete Partition zu erweitern?

Ich habe eine Festplatte, auf der ich die Daten einer Datenbank speichere. Die Festplatte ist jetzt voll und ich möchte der Maschine eine weitere Festplatte hinzufügen. Ich habe gehört, dass man mit LVM Partitionen hinzufügen und erweitern kann. Daher würde ich gerne wissen, ob es möglich ist, die aktuell volle Festplatte durch Hinzufügen einer neuen Festplatte zu erweitern (ohne die aktuellen Daten zu beschädigen).

Antwort1

LVM macht es einfach, die Größe vorhandener Partitionen zu ändern und sie zu verschieben¹. Aber es müssen in erster Linie LVM-Partitionen sein. Da sich Ihre aktuelle Partition nicht auf LVM befindet, müssen Sie die Dinge manuell erledigen. Alle Befehle in meiner Antwort müssen als Root ausgeführt werden.

Vorbereiten der neuen Festplatte

  1. Erstellen Sie eine GPT- oder MBR-Partition für Linux. Verwenden Sie die gesamte Festplatte, es sei denn, Sie möchten die Festplatte mit einem anderen Betriebssystem teilen. Ich nenne diese Partition /dev/sdb1.
  2. Erstellen Sie /dev/sdb1ein LVMphysisches Volumen, d. h. geben Sie an, dass dieser Teil der Platte für LVM genutzt werden soll.

    pvcreate /dev/sdb1
    
  3. Erstellen eines LVMDatenträgergruppeenthält dieses physische Volume. Alle LVM-Volumes sind Teil einer Volume-Gruppe. Wählen Sie einen Namen für diese Volume-Gruppe, z . B. alex_os.

    vgcreate alex_os /dev/sdb1
    
  4. Sie haben jetzt etwas Platz für die Verwendung durch LVM. Erstellen Sie ein logisches LVM-Volume, das groß genug für die Daten ist, die Sie darauf speichern möchten. Sie können den gesamten Speicherplatz verwenden, wenn Sie möchten (es sei denn, Sie möchten Speicherplatz für ein anderes Dateisystem oder Swap-Speicher reservieren). Da es jedoch schwieriger ist, ein Dateisystem zu verkleinern als zu vergrößern, sollten Sie am besten nur das verwenden, was Sie mittelfristig benötigen, plus einen Sicherheitsspielraum. Wählen Sie einen Namen für das logische Volume, z. B. rootfür Ihr Root-Dateisystem oder dbwenn Sie Ihre Datenbank darauf speichern möchten.

    lvcreate -L 40g -n root alex_os
    

Was als Nächstes zu tun ist, hängt davon ab, ob Sie Ihre Betriebssystempartition auf die neue Festplatte verschieben oder die neue Festplatte als zusätzlichen Speicher verwenden möchten.

Verwenden Sie die neue Festplatte für zusätzlichen Speicherplatz

  1. Erstellen Sie ein Dateisystem auf der neuen Festplatte.

    mkfs.ext4 /dev/mapper/alex_os-root
    
  2. Registrieren Sie das neue Dateisystem zur Verwendung. Wählen Sie einen Einhängepunkt dafür. Dies kann entweder ein vorhandenes oder ein neues Verzeichnis sein.

    • Wenn Sie z. B. auf die neue Festplatte verschieben möchten /var/lib/mysql, legen Sie diese als Mount-Punkt fest. Mounten Sie zunächst das neue Dateisystem an einem temporären Ort, verschieben Sie die Daten (Stellen Sie sicher, dass die Dateien währenddessen nicht verwendet werden!)

      service mysql stop
      mount /dev/mapper/alex_os-db /mnt
      mv /var/lib/mysql/* /mnt
      mount --move /mnt /var/lib/mysql
      service mysql start
      

      Bearbeiten Sie abschließend die Datei /etc/fstab, indem Sie nach der Zeile /in der zweiten Spalte die folgende Zeile hinzufügen:

      /dev/mapper/alex_os-db /var/lib/mysql ext4 errors=remount,ro 0 2
      
    • Wenn Sie die neue Festplatte nicht an einen bestimmten Dienst binden möchten, mounten Sie sie an einem anderen Ort. Fügen Sie beispielsweise /etc/fstabnach der Zeile /in der zweiten Spalte die folgende Zeile hinzu:

      /dev/mapper/alex_os-db /media/data ext4 errors=remount,ro 0 2
      

      Erstellen Sie dann den Einhängepunkt und hängen Sie das Dateisystem ein:

      mkdir /media/data
      mount /media/data
      

      Sie können nun alle Daten, die Sie dort ablegen möchten, verschieben und verwendensymbolische Linksvon dem Ort, an dem der Dienst die Dateien erwartet. Unterbinden Sie den Zugriff aller Dienste auf die Dateien, während Sie sie verschieben! So verschieben Sie beispielsweise den Inhalt von /var/lib/mysqlauf die neue Festplatte:

      service mysql stop
      mv /var/lib/mysql /media/data/
      ln -s /media/data/mysql /var/lib/mysql
      service mysql start
      

Übertragen Sie das System auf die neue Festplatte

  1. Neustart zum Rettungsmedium (zBSystemRescueCD), um die Daten auf die neue Festplatte zu kopieren. Das Kopieren ist nicht vom laufenden System aus möglich, da es unmöglich ist, einen konsistenten Snapshot² zu erstellen. Um die Daten zu kopieren, haben Sie zwei Möglichkeiten:

    • Erstellen Sie ein Dateisystem und kopieren Sie die Dateien, zB für ein ext4-Dateisystem:

      mkfs.ext4 /dev/mapper/alex_os-root
      mount /dev/mapper/alex_os-root /media/alex_os-root
      cp -a /media/sda1 /media/alex_os-root
      
    • Kopieren Sie das Dateisystem-Image und erweitern Sie es dann, bis es die volle Größe hat, z. B. für ein ext4-Dateisystem:

      cat /dev/sda1 >/dev/mapper/alex_os-root
      resize2fs /dev/mapper/alex_os-root
      
  2. Machen Sie die neue Festplatte bootfähig. Wie das genau geht, hängt von Ihrer Distribution ab. Normalerweise müssen Sie den Bootloader installieren und das initramfs neu erstellen. Unter Ubuntu benötigen Sie beispielsweise normalerweise etwas wie

    chroot /media/alex_os-root
    update-initramfs
    update-grub
    grub-install /dev/sdb
    

¹ Die Größenänderung des Dateisystems auf der Partition ist eine andere Sache; die meisten modernen Dateisysteme unterstützen die Online-Erweiterung, aber nicht die Online-Verkleinerung.
² Technisch gesehenMaiEs kann durchaus möglich sein, dass Sie Glück haben, cp -awenn das System ansonsten im Leerlauf ist, aber das ist ein Rezept für eine Katastrophe; dies kann zu schwer zu verfolgenden verzögerten Fehlern führen. Einer der Vorteile von LVM besteht darin, dass Sie damit einen konsistenten Snapshot erstellen können. Einige Dateisysteme (zfs, btrfs) verfügen über eine eigene Snapshot-Funktion, ext4 jedoch nicht.

verwandte Informationen