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.

Regular Expressions

Das ist eine Zusammenfassung für von mir häufig benötigten Regular Expressions. Ausdruck Bedeutung

.            Beliebiges Zeichen
*            Vorheriges Zeichen beliebig of
?            Vorheriges Zeichen ein- oder keinmal
+            Vorheriges Zeichen ein- oder mehrmals
^<Ausdruck>  Ausdruck am Zeilenanfang
<Ausdruck>$  Ausdruck am Zeilenende
[abc]        Zeichen aus der Auswahl
[a-z]        Zeichen aus dem Bereich
!            Negierung

Datei-Sets umbenennen

Möchte man viele Dateiennach einem gleichlautenden Muster umbennen kann das je nach Menge ganz schön aufwendig werden. Hier beschreibe ich, wie man ganze Datei-Sets umbenennen kann.

Wenn viele Dateien automatisch erzeugt werden, habe sie meistens auch einen gleichlautenden Namen. Z.B.:

Server:/tmp# ll *Datensicherung*
-rw-r--r-- 1 root root 0 6. Mär 12:26 KW30-Datensicherung-20100726.7z
-rw-r--r-- 1 root root 0 6. Mär 12:26 KW31-Datensicherung-20100802.7z
-rw-r--r-- 1 root root 0 6. Mär 12:26 KW32-Datensicherung-20100809.7z
-rw-r--r-- 1 root root 0 6. Mär 12:26 KW33-Datensicherung-20100816.7z
-rw-r--r-- 1 root root 0 6. Mär 12:26 KW34-Datensicherung-20100823.7z
-rw-r--r-- 1 root root 0 6. Mär 12:26 KW35-Datensicherung-20100830.7z
-rw-r--r-- 1 root root 0 6. Mär 12:26 KW36-Datensicherung-20100906.7z
-rw-r--r-- 1 root root 0 6. Mär 12:26 KW37-Datensicherung-20100913.7z

In dem gezeigten Fall möchte ich mit dem Datum beginnen und die Kalenderwoche nach hinten verschieben. Für den Linux-Admin gibt es da den Befehl mmv aus dem gleichnamigen Debian-Paket:

Server:/tmp# mmv -v "*-Datensicherung-*.7z" "#2-Datensicherung-#1.7z"
KW30-Datensicherung-20100726.7z -> 20100726-Datensicherung-KW30.7z : done
KW31-Datensicherung-20100802.7z -> 20100802-Datensicherung-KW31.7z : done
KW32-Datensicherung-20100809.7z -> 20100809-Datensicherung-KW32.7z : done
KW33-Datensicherung-20100816.7z -> 20100816-Datensicherung-KW33.7z : done
KW34-Datensicherung-20100823.7z -> 20100823-Datensicherung-KW34.7z : done
KW35-Datensicherung-20100830.7z -> 20100830-Datensicherung-KW35.7z : done
KW36-Datensicherung-20100906.7z -> 20100906-Datensicherung-KW36.7z : done
KW37-Datensicherung-20100913.7z -> 20100913-Datensicherung-KW37.7z : done

Dabei repräsentieren die Bezeichnungen „#1“ und „#2“ im zweiten Teil des Befehls die entsprechenden Sternchen-Bereiche (in der Reihenfolge des Auftretens) aus dem ersten Teil des Befehls.

ls-Ausgabe nach dem Befehl:

Server:/tmp# ll *Datensicherung*
-rw-r--r-- 1 root root 0 6. Mär 12:26 20100726-Datensicherung-KW30.7z
-rw-r--r-- 1 root root 0 6. Mär 12:26 20100802-Datensicherung-KW31.7z
-rw-r--r-- 1 root root 0 6. Mär 12:26 20100809-Datensicherung-KW32.7z
-rw-r--r-- 1 root root 0 6. Mär 12:26 20100816-Datensicherung-KW33.7z
-rw-r--r-- 1 root root 0 6. Mär 12:26 20100823-Datensicherung-KW34.7z
-rw-r--r-- 1 root root 0 6. Mär 12:26 20100830-Datensicherung-KW35.7z
-rw-r--r-- 1 root root 0 6. Mär 12:26 20100906-Datensicherung-KW36.7z
-rw-r--r-- 1 root root 0 6. Mär 12:26 20100913-Datensicherung-KW37.7z

Größe von Ordner ermitteln

PMachmal sucht man nach Speicherfressern. Dann kann man sich über die folgende Zeile die Größe aller Unterordner des angegebenen Ordners (hier am Beispiel „var“) anzeigen lassen:

find /var/ -maxdepth 1 -type d -exec du -sh '{}' ';'

Diese sucht im angegebenen Ordner nach Unterordnern aber nur eine Ebene und führt für jedes Ergebnis eine Größenberechnung per „du“ durch.

Prozesse mit hoher CPU-Last ermitteln

Da die Ausgabe von „top“ nicht immer die gewünschten Informationen liefert, kann man sich die Prozesse mit hoher CPU-Last auch über „ps“ mit Sortierung anzeigen lassen:

ps -eo pcpu,pid,user,args | sort -k 1 -r | head -10

Damit werden alle Prozesse, aber nur die angegebenen Parameter angezeigt, nach Spalte aufsteigend sortiert und die letzten 10 Zeilen wiedergegeben. (Danke an René)

Wer möchte, kann sich das ganze auch als Alias in seine .bashrc eintragen.

alias topten='ps -eo pcpu,pid,user,args | sort -k 1 -r | head -10'

Unterordner packen und löschen

Die folgende Befehlszeile sucht im aktuellen Ordner alle Unterordner (keine Dateien) und packt diese als <Ordnername>.tar.gz und löscht den Originalordner.

for Ordner in $(find -maxdepth 1 -type d); do if [ $Ordner != "." ]; then tar -czf $Ordner.tar.gz $Ordner; rm -rf $Ordner; fi; done;

Automatischen Start des X-Managers deaktivieren

Manch einer (wie ich z.B.) betreibt Server auf denen er ab und zu auch mal eine grafische Oberfläche benötigt. Trotzdem soll der Display-Manager nicht ständig laufen. Ist ja auch ein Server. Deswegen deaktivere ich den Dienst mit

update-rc.d -f gdm remove
Removing any system startup links for /etc/init.d/gdm ...
    /etc/rc0.d/K01gdm
    /etc/rc1.d/K01gdm
    /etc/rc2.d/S30gdm
    /etc/rc3.d/S30gdm
    /etc/rc4.d/S30gdm
    /etc/rc5.d/S30gdm
    /etc/rc6.d/K01gdm

für den Gnome Desktop Manger. Für KDE-Fans gilt das gleiche (kdm). Wenn ich die grafische Oberfläche jetzt doch brauche, kann ich ihn immer noch mit

/etc/init.d/gdm start

starten.

Prozessor gezielt auslasten

Mit diesem Befehl kann man künstlich die Systemlast erhöhen. Beim Aufruf begibt sich dieser durch das angehängte „&“ direkt in den Hintergrund und kann mit „fg“ wieder zurückgeholt werden. Bei einem Mehrkernprozessor können bzw. müssen mehrere Prozesse dieser Art gestartet werden um dieses auszulasten. Kombiniert mit einem „nice“ Wert kann die erzeugte Auslastung manipuliert werden, bei laufendem Prozess kann dieses manipulieren auch mit „renice“ weiter verfeinert bzw. angepasst werden.

cat /dev/zero | gzip > /dev/null &