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
- 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
. Erstellen Sie
/dev/sdb1
ein LVMphysisches Volumen, d. h. geben Sie an, dass dieser Teil der Platte für LVM genutzt werden soll.pvcreate /dev/sdb1
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
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.
root
für Ihr Root-Dateisystem oderdb
wenn 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
Erstellen Sie ein Dateisystem auf der neuen Festplatte.
mkfs.ext4 /dev/mapper/alex_os-root
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/fstab
nach 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/mysql
auf 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
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
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 -a
wenn 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.