Partition online mit parted vergrößern

Ubuntu installiert das Physical Volume bei der Erstinstallation in eine separate (zweite) Partition, da die erste Partition ohne LVM für /boot eingerichtet wird:

root@ubuntu1604lts:~/# lsblk
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0            11:0    1 1024M  0 rom
vda           253:0    0   15G  0 disk
├─vda1        253:1    0  487M  0 part /boot
└─vda2        253:2    0  7,5G  0 part
  ├─vg00-root 252:0    0  1,9G  0 lvm  /
  ├─vg00-swap 252:1    0  1,9G  0 lvm  [SWAP]
  ├─vg00-tmp  252:3    0  488M  0 lvm  /tmp
  ├─vg00-var  252:4    0  1,9G  0 lvm  /var
  └─vg00-home 252:5    0  1,5G  0 lvm  /home
vdb           253:16   0   20G  0 disk
└─vg01-opt    252:2    0   10G  0 lvm  /opt

Hat man bei der Ersteinrichtung zu knapp gedacht, kann es passieren, dass die root-Partition vollläuft:

root@ubuntu1604lts:~/# df -h
Dateisystem           Größe Benutzt Verf. Verw% Eingehängt auf
udev                   981M       0  981M    0% /dev
tmpfs                  201M    3,2M  197M    2% /run
/dev/mapper/vg00-root  1,8G    1,8G     0  100% /
tmpfs                 1001M       0 1001M    0% /dev/shm
tmpfs                  5,0M       0  5,0M    0% /run/lock
tmpfs                 1001M       0 1001M    0% /sys/fs/cgroup
/dev/vda1              464M    106M  331M   25% /boot
/dev/mapper/vg00-tmp   465M    2,3M  434M    1% /tmp
/dev/mapper/vg00-home  1,5G    2,3M  1,4G    1% /home
/dev/mapper/vg01-opt   9,8G     23M  9,2G    1% /opt
/dev/mapper/vg00-var   1,8G    630M  1,1G   37% /var
tmpfs                  201M       0  201M    0% /run/user/0


Wenn man jetzt für die VM die Festplatte vergrößert, ändert das leider nichts am Dateisystem, da die Partition und damit das LVM Physical Volume gleich groß geblieben ist:

root@ubuntu1604lts:~/# pvdisplay /dev/vda2
  --- Physical volume ---
  PV Name               /dev/vda2
  VG Name               vg00
  PV Size               7,52 GiB / not usable 3,00 MiB
  Allocatable           yes (but full)
  PE Size               4,00 MiB
  Total PE              1925
  Free PE               0
  Allocated PE          1925
  PV UUID               ubAhLP-Od1g-7U3V-qj7O-dAws-CLuc-ePRnQ9

Jetzt also der große Moment, die benutzte Partition online zu vergrößern, ohne dass die vorhandenen Daten Schaden nehmen. Dazu eignet sich hervorragend parted (auch ohne GUI = gparted). Dazu kann man den dialoggesteuerten Modus starten und sich erst mal ein paar Informationen anzeigen lassen:

root@ubuntu1604lts:~/# parted
GNU Parted 3.2
/dev/mapper/vg00-var wird verwendet
Willkommen zu GNU Parted! Rufen Sie »help« auf, um eine Liste der verfügbaren Befehle zu erhalten.

(parted) select /dev/vda
/dev/vda wird verwendet
(parted) unit MiB
(parted) print free
Modell: Virtio Blockorientiertes Gerät (virtblk)
Festplatte  /dev/vda:  15360MiB
Sektorgröße (logisch/physisch): 512B/512B
Partitionstabelle: msdos
Disk-Flags:

Nummer  Anfang   Ende      Größe    Typ      Dateisystem   Flags
        0,03MiB  1,00MiB   0,97MiB           Freier Platz
 1      1,00MiB  488MiB    487MiB   primary  ext4          boot
 2      488MiB   8191MiB   7703MiB  primary                LVM
        8191MiB  15360MiB  7169MiB           Freier Platz


Wenn standardmäßig ein anderes, als die gewünschte Partition verwendet wird, muss man mit select erst in die entsprechende wechseln. Mit unit kann man mit unterschiedlichen Speichergrößen arbeiten. Wer jetzt versucht die Partition mit resizepart zu vergrößern, wird meistens scheitern, weil die Umrechnungen der Anzeige zu ungenau sind, um sie in den Änderungsangaben zu verwenden:

(parted) resizepart
Partitionsnummer? 2
Ende?  [8191MiB]? 15360MiB
Fehler: Der Ort 15360MiB ist außerhalb des Geräts /dev/vda.

Also erst einmal die Einheiten auf absolute Werte wie Sektoren einstellen und noch einmal versuchen. Da man sich diese auch so anzeigen lassen kann, kann man sich den Wert prima kopieren:

(parted) unit s
(parted) print free
Modell: Virtio Blockorientiertes Gerät (virtblk)
Festplatte  /dev/vda:  31457280s
Sektorgröße (logisch/physisch): 512B/512B
Partitionstabelle: msdos
Disk-Flags:

Nummer  Anfang     Ende       Größe      Typ      Dateisystem   Flags
        63s        2047s      1985s               Freier Platz
 1      2048s      999423s    997376s    primary  ext4          boot
 2      999424s    16775167s  15775744s  primary                LVM
        16775168s  31457279s  14682112s           Freier Platz

(parted) resizepart
Partitionsnummer? 2
Ende?  [16775167s]? 31457279s

Zeigt man sich dann das Ergebnis mit den vorherigen Einheiten an, erkennt man auch die Vergrößerung und kann das Programm verlassen:

(parted) unit MiB
(parted) print free
Modell: Virtio Blockorientiertes Gerät (virtblk)
Festplatte  /dev/vda:  15360MiB
Sektorgröße (logisch/physisch): 512B/512B
Partitionstabelle: msdos
Disk-Flags:

Nummer  Anfang   Ende      Größe     Typ      Dateisystem   Flags
        0,03MiB  1,00MiB   0,97MiB            Freier Platz
 1      1,00MiB  488MiB    487MiB    primary  ext4          boot
 2      488MiB   15360MiB  14872MiB  primary                LVM

(parted) quit
Informationen: Möglicherweise müssen Sie /etc/fstab anpassen.

Jetzt nur noch das LVM Physical und Logical Volume und das Dateisystem der gewünschten Partition vergrößern und fertig:

root@ubuntu1604lts:~/# lsblk
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0            11:0    1 1024M  0 rom
vda           253:0    0   15G  0 disk
├─vda1        253:1    0  487M  0 part /boot
└─vda2        253:2    0 14,5G  0 part
  ├─vg00-root 252:0    0  1,9G  0 lvm  /
  ├─vg00-swap 252:1    0  1,9G  0 lvm  [SWAP]
  ├─vg00-tmp  252:3    0  488M  0 lvm  /tmp
  ├─vg00-var  252:4    0  1,9G  0 lvm  /var
  └─vg00-home 252:5    0  1,5G  0 lvm  /home
vdb           253:16   0   20G  0 disk
└─vg01-opt    252:2    0   10G  0 lvm  /opt

root@ubuntu1604lts:~/# pvdisplay /dev/vda2
  --- Physical volume ---
  PV Name               /dev/vda2
  VG Name               vg00
  PV Size               7,52 GiB / not usable 2,00 MiB
  Allocatable           yes (but full)
  PE Size               4,00 MiB
  Total PE              1925
  Free PE               0
  Allocated PE          1925
  PV UUID               ubAhLP-Od1g-7U3V-qj7O-dAws-CLuc-ePRnQ9

root@ubuntu1604lts:~/# pvresize /dev/vda2
  Physical volume "/dev/vda2" changed
  1 physical volume(s) resized / 0 physical volume(s) not resized

root@ubuntu1604lts:~/# pvdisplay /dev/vda2
  --- Physical volume ---
  PV Name               /dev/vda2
  VG Name               vg00
  PV Size               14,52 GiB / not usable 3,00 MiB
  Allocatable           yes
  PE Size               4,00 MiB
  Total PE              3717
  Free PE               1792
  Allocated PE          1925
  PV UUID               ubAhLP-Od1g-7U3V-qj7O-dAws-CLuc-ePRnQ9

root@ubuntu1604lts:~/# lvresize -L +5G /dev/vg00/root
  Size of logical volume vg00/root changed from 1,86 GiB (476 extents) to 6,86 GiB (1756 extents).
  Logical volume root successfully resized.
root@ubuntu1604lts:~/# resize2fs /dev/vg00/root
resize2fs 1.42.13 (17-May-2015)
Dateisystem bei /dev/vg00/root ist auf / eingehängt; Online-Größenänderung ist
erforderlich
old_desc_blocks = 1, new_desc_blocks = 1
Das Dateisystem auf /dev/vg00/root is nun 1798144 (4k) Blöcke lang.

root@ubuntu1604lts:~/# lsblk
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0            11:0    1 1024M  0 rom
vda           253:0    0   15G  0 disk
├─vda1        253:1    0  487M  0 part /boot
└─vda2        253:2    0 14,5G  0 part
  ├─vg00-root 252:0    0  6,9G  0 lvm  /
  ├─vg00-swap 252:1    0  1,9G  0 lvm  [SWAP]
  ├─vg00-tmp  252:3    0  488M  0 lvm  /tmp
  ├─vg00-var  252:4    0  1,9G  0 lvm  /var
  └─vg00-home 252:5    0  1,5G  0 lvm  /home
vdb           253:16   0   20G  0 disk
└─vg01-opt    252:2    0   10G  0 lvm  /opt

root@ubuntu1604lts:~/# df -h
Dateisystem           Größe Benutzt Verf. Verw% Eingehängt auf
udev                   981M       0  981M    0% /dev
tmpfs                  201M    3,2M  197M    2% /run
/dev/mapper/vg00-root  6,8G    1,8G  4,7G   28% /
tmpfs                 1001M       0 1001M    0% /dev/shm
tmpfs                  5,0M       0  5,0M    0% /run/lock
tmpfs                 1001M       0 1001M    0% /sys/fs/cgroup
/dev/vda1              464M    106M  331M   25% /boot
/dev/mapper/vg00-tmp   465M    2,3M  434M    1% /tmp
/dev/mapper/vg00-home  1,5G    2,3M  1,4G    1% /home
/dev/mapper/vg01-opt   9,8G     23M  9,2G    1% /opt
/dev/mapper/vg00-var   1,8G    630M  1,1G   37% /var
tmpfs                  201M       0  201M    0% /run/user/0

Ergebnis: root-Partition vergrößert, ohne das System offline zu nehmen und ohne Daten zu verlieren.

LVM einrichten

Benötigte Pakete

Wenn noch nicht vorhanden, muss lvm installiert werden:

aptitude install lvm2

Wie ihr ein Logical Volume nachträglich verkleinert, könnt ihr hier nachlesen.

Logical Volume hinzufügen

Ich beschreibe hier das nachträgliche Hinzufügen einer lvm-Partition für den Ordner /var/backups unter Debian Squeeze, um eine bereits vorhandene volle Festplatte zu entlasten.

Ausgangslage

Eine Ausgabe von fdisk -l und df -h schafft einen Überblick über die Ausgangslage

root# fdisk -l

Disk /dev/sda: 8589 MB, 8589934592 bytes
255 heads, 63 sectors/track, 1044 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00081015

Device Boot Start End Blocks Id System
/dev/sda1 * 1 993 7976241 83 Linux
/dev/sda2 994 1044 409657+ 5 Extended
/dev/sda5 994 1044 409626 82 Linux swap / Solaris

Disk /dev/sdb: 8589 MB, 8589934592 bytes
255 heads, 63 sectors/track, 1044 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x380b6e17

Device Boot Start End Blocks Id System
/dev/sdb1 1 1044 8385898+ 8e Linux LVM


Disk /dev/sdc: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xfeb5b445

Device Boot Start End Blocks Id System
/dev/sdc1 1 1305 10482381 8e Linux LVM
root# df -h
Dateisystem Size Used Avail Use% Eingehängt auf
/dev/sda1 7,5G 5,5G 1,7G 78% /
tmpfs 506M 0 506M 0% /lib/init/rw
udev 501M 104K 501M 1% /dev
tmpfs 506M 0 506M 0% /dev/shm

Wie zu erkennen ist, ist die einzig vorhandene Partion schon recht voll, so dass ich diese, durch Auslagern des Orderns /var/backups entlasten will. Zudem sind bereits zwei Festplatten zu sehen, auf den jeweils eine primäre Partition mit lvm als Partitionierungssystem eingerichtet sind.

PV, VG und LV einrichten…

…bedeutet nix anderes, als eine Partition für lvm zu aktivieren (Physical Volume erstellen).

root# pvcreate /dev/sdc1
Physical volume "/dev/sdc1" successfully created

Darauf wird dann eine Volume Group eingerichtet, die als Pool mehrere Physical Volumes aufnehmen kann. So kann man z.B. mehrere Festplatten innerhalb einer Volume Group verwenden. Hier sollte ein nicht all zu langer Name vergeben werden.

root# # vgcreate vg1 /dev/sdc1
Volume group "vg1" successfully created

Mit vgdisplay kann man sich dann die Einzelheiten zu der gerade eingerichteten Volume Group anschauen. Interessant ist dabei der Wert „Free PE“, der die Physikalischen Einheiten angibt, die noch für Logical Volumes zur Verfügung stehen.

# vgdisplay
--- Volume group ---
VG Name vg1
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 3
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 1
Act PV 1
VG Size 10,00 GiB
PE Size 4,00 MiB
Total PE 2559
Alloc PE / Size 0 / 0
Free PE / Size 2559 / 10,00 GiB
VG UUID GcAW6r-L2Lp-DCkA-k3P3-al0Q-kCRf-5UXYFu

Danach erstelle ich noch ein Logical Volume (LV) mit der maximalen Anzahl (2559) von freien Physikalischen Einheiten (siehe oben). Würde man hier beim erstellen die angezeigten 10G angeben, bekäme man eine Fehlermeldung, dass nicht genügend freier Speicherplatz in der Volume Group vorhanden ist.

# lvcreate -l 2559 -n backups vg1
Logical volume "backup" created

Dateisystem einrichten

Jetzt muss das Dateisystem auf der neuen Partition noch eingerichtet werden. Ich wähle dazu hier ext3.

root# mkfs.ext3 /dev/vg1/backups
mke2fs 1.41.12 (17-May-2010)
Dateisystem-Label=
OS-Typ: Linux
Blockgröße=4096 (log=2)
Fragmentgröße=4096 (log=2)
Stride=0 Blöcke, Stripebreite=0 Blöcke
655360 Inodes, 2620416 Blöcke
131020 Blöcke (5.00%) reserviert für den Superuser
Erster Datenblock=0
Maximale Dateisystem-Blöcke=2684354560
80 Blockgruppen
32768 Blöcke pro Gruppe, 32768 Fragmente pro Gruppe
8192 Inodes pro Gruppe
Superblock-Sicherungskopien gespeichert in den Blöcken:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632

Schreibe Inode-Tabellen: erledigt
Erstelle Journal (32768 Blöcke): erledigt
Schreibe Superblöcke und Dateisystem-Accountinginformationen: erledigt

Das Dateisystem wird automatisch nach jeweils 31 Einhäng-Vorgängen bzw.
alle 180 Tage überprüft, je nachdem, was zuerst eintritt. Dies kann durch
tune2fs -c oder -i geändert werden.

Mounten und Datenübernahme

Zuerst muss die erstellte Partition temporär gemountet werden, damit die alten Daten übernommen werden können:

root# mkdir /mnt/backups
root# mount -t ext3 /dev/mapper/vg1-backups /mnt/backups

Wie zu erkennen ist, habe ich die Verknüpfung über den Device-Mapper genutzt. Jetzt können die Daten verschoben werden. ACHTUNG: Die Dateien dürfen sich nicht im Zugriff befinden!

root# mv /var/backups/* /mnt/backups/
root# ls -alh /var/backups/
insgesamt 0

Danach kann die Partion aus dem temporären Speicherort ausgehängt und in den endgültigen Speicherort eingehängt werden:

root# umount /mnt/backups
root# mount -t ext3 /dev/mapper/vg1-backups /var/backups

Bitte nach Beendigung der Arbeit die Anpassungen in der /etc/fstab nicht vergessen!

Wie ihr ein Logical Volume nachträglich verkleinert, könnt ihr hier nachlesen.

LVM Logical Volume verkleinern

Wie das Anlegen eines Logical Volumes funktioniert, habe ich hier erklärt.

Damit das Verkleinern des Logical Volumes erfolgen kann müssen zuvor einige Schritte durchgeführt werden. Dazu gehören:

  • Dienste stoppen, die auf die entsprechende Partition zugreifen
  • Partition aushängen
  • Dateisystemcheck (Defragmentierung)

Vorbereitungen

Ich erkläre das hier am Beispiel des Samba-Servers unter Debian Lenny. Es gelten folgende Annahmen:

  • LV = /dev/mapper/vg00-srv_samba
  • Dateipfad = /srv/samba

Also los. Dienste stoppen

root# /etc/init.d/samba stop
Stopping Samba daemons: nmbd smbd.

Dateisystem aushängen

root# umount /dev/mapper/vg00-srv_samba

Dateisystem überpüfen

root# e2fsck -f /dev/mapper/vg00-srv_samba

Verkleinern

Jetzt also zuerst das Dateisystem verkleinern und dann das Logical Volume:

root# resize2fs /dev/mapper/vg00-srv_samba 512000000
root# lvreduce -L -1000G /dev/mapper/vg00-srv_samba

Danach wieder einhängen

root# mount /dev/mapper/vg00-srv_samba