ext4 – Neue Partition belegt bereits Speicherplatz

5. August 2014 at 17:00

ext4 und der reservierte Speicherplatz

ext4

Das Problem
Vor einigen Monaten stand ein Freund und ich vor dem Rätsel, warum eine neu erstelle Partition mit dem Dateisystem ext4 bereits eine Menge an Speicherplatz belegt hat – komplett jungfräulich, ohne jegliche Daten. Bei einer 4 TB Festplatte waren so bereits satte 186 GB in Verwendung…

Wie sich später herausstellte, reserviert sich ext4 automatisch 5% des Speicherplatzes für Notfälle. Sollte also die Festplatte aus irgendwelchen Gründen voll laufen, würde das sehr wahrscheinlich katastrophal enden und im schlimmsten Fall würde das System danach nicht mehr (ordentlich) hochfahren (natürlich vorausgesetzt es handelt sich hierbei um die Systempartition). Aus diesem Grund wird bereits ein prozentualer Speicherplatz für den root-Nutzer des Systems reserviert: Dadurch sollte das System selbst weiterhin in der Lage sein, hochfahren können, um dann selbst wieder freien Platz schaffen zu können.
Anwendungen, welche nicht unter dem Administratorkonto laufen, haben keinen Anspruch auf den reservierten Speicherbereich und würden wahrscheinlich beim Versuch, Daten auf die Festplatte zu schreiben, abstürzen.

Ich würde empfehlen, bei Partitionen, worauf sich ein Betriebssystem befindet, den reservierten Speicherbereich zu belassen – just in case. Bei reinen Datenplatten macht dies natürlich weniger Sinn und kann deshalb auch reduziert oder gar komplett abgeschaltet werden.

Die Lösung
Mit dem Werkzeug, welches bereits auf den meisten Linux-Systemen vorinstalliert ist, lässt sich der prozentual reservierte Bereich problemlos während des Betriebes ändern:

tune2fs -m 0 /dev/sda1

Erklärung: Der Parameter „-m“ definiert hierbei die prozentuale Reservierung der angegebenen Partition. 0% deaktiviert die Reservierung.

via ubuntu-forum.de

QuickTipp: Aktivieren der Farben bei init.d-Scripten

15. Dezember 2013 at 11:00

Bei der Standard-Installation von Debian Wheezy werden standardmäßig die Farben aller init.d-Scripte deaktiviert. Da mich das gestört hatte, begab ich mich auf die Suche der Ursache…

fancytty-0

Das Deaktivieren der Farben lässt sich auf eine Variable namens „FANCYTTY“ zurückführen, welcher in der Datei /etc/lsb-base-logging.sh auf „0“ (aus) gesetzt wird. Mit nur einem einzigen Befehl lassen sich schnell die Farben wieder aktivieren. Hierbei wird lediglich die entsprechende Zeile auskommentiert:
sed -i 's/FANCYTTY=0/#FANCYTTY=0/g' /etc/lsb-base-logging.sh
Nach dem auskommentieren der Zeile, werden ab sofort die Farben wieder dargestellt:

fancytty-1

QuickTipp: Passwort mit Hilfe von Linux generieren

4. Dezember 2013 at 17:00

Ein Passwort generieren
Mit dem heutigen Quick-Tipp lässt sich mit Hilfe der Linux-Shell und einem einzeiligen Befehl mit meist bereits vorhandenen Linux-Befehlen ein zufälliges 20-stelliges Passwort generieren – wunderbar für die Verwendung von automatischen Installationsscripts, ohne irgendwelche besonderen Abhängigkeiten zu haben bzw. spezielle Pakete vorher installieren zu müssen.

head -c 300 /dev/urandom | tr -cd '[a-zA-Z0-9-_]' | head -c 20

Mehrere Passwörter generieren
Beispiel um neun Passwörter je 20 Zeichen zu generieren:

# for ((i=1; i<=9; i++)); do echo -n "$i: " && head -c 300 /dev/urandom | tr -cd '[a-zA-Z0-9-_]' | head -c 20 && echo; done 1: UJB1-Fa0ELrFN8Rw5Qvx 2: x7et5c55ggG71[sNjN6x 3: -K9CsPSF_DO]P2NA3vkC 4: DjojU3Y9NMOgbQ50IYwS 5: GEJVdHmp-_VuTx_A7izX 6: KMnlxD[9543Gil_UNAd0 7: eazr4sPeGE0a-ZqG-Pxu 8: eCbf4tELNc7kn]Z0WCv6 9: WqjVnmKdcin_wg6BKRuc

Kurze Erklärung
Der Befehl kurz genauer erläutert:

head -c 300 /dev/urandomLiest die ersten 300 zufälligen Zeichen von /dev/urandom aus
tr -cd '[a-zA-Z0-9-_]'Löscht alle Zeichen, bis auf Buchstaben, Zahlen, Binde- und Unterstriche
head -c 20Gibt die ersten 20 Zeichen der geparsten Ausgabe aus

Update 16.09.2014: Man kann hierbei auch tr -cd '[:print:]' verwenden, wenn man alle "normal lesbaren" Zeichen zulassen möchte. Die Passwörter würden dann so ähnlich aussehen: k-/abFcS$I eA6m`its~

Firewall: Port blockieren und nur für einzelne IPs freigeben

2. August 2013 at 12:00

Mit iptables und wenigen Befehlen kann man sehr leicht einen Port nur für einzelne IPs freigeben. In diesem Beispiel sperren wir den MySQL Port (Standard: 3306) für alle und geben einzelne IPs frei, die weiterhin darauf zugreifen dürfen. Bei wechselnden IPs müsste man die Regeln jedes Mal erneut anlegen.

Einzelne IPs freigeben
Zuerst geben wir alle IPs frei, die danach weiterhin zugreifen dürfen. So verhindern wird, dass die MySQL Verbindungen unterbrochen werden, wenn wir die Sperr-Regel hinzufügen. Beispielsweise geben wir nun 1.2.3.4 und 4.3.2.1 als IP für den MySQL-Port frei:

iptables -A INPUT -p tcp --src 1.2.3.4 --dport 3306 -j ACCEPT
iptables -A INPUT -p tcp --src 4.3.2.1 --dport 3306 -j ACCEPT

Port nun für alle Anderen sperren
Nun sperren wir endgültig den MySQL Port für alle Anderen, die wir vorhin nicht freigegeben haben:

iptables -A INPUT -p tcp --dport 3306 -j DROP

IPv6 Protokoll
Sollte primär oder auch zusätzlich das neue IPv6-Protokoll verwendet werden, so müssen die Regeln ebenfalls für IPv6 eingestellt werden. Also geben wir erneut als ersten Schritt die IPv6 IPs frei:

ip6tables -A INPUT -p tcp --src 2a01:4f8:191:3481::1 --dport 3306 -j ACCEPT
ip6tables -A INPUT -p tcp --src 2a01:4f8:191:3481::2 --dport 3306 -j ACCEPT

…oder das gesamte /64 Subnetz mit dem Befehl:

ip6tables -A INPUT -p tcp --src 2a01:4f8:191:3481::/64 --dport 3306 -j ACCEPT

Am Ende müssen wir nun den Port für alle anderen Ipv6 Adressen ebenfalls blockieren:

ip6tables -A INPUT -p tcp --dport 3306 -j DROP

Hinweise

  • MySQL lauscht bei der Einstellung „bind-address 0.0.0.0“ nur auf IPv4 und nicht auf IPv6. Damit MySQL auf allen IPv6 Interfaces lauscht, muss stattdessen der Wert „bind-address ::“ angegeben werden.
  • Sollte eine Regel falsch hinzugefügt worden sein, muss man alle Regeln aus iptables entfernen und von erneut beginnen. Die Regeln lassen sich mit iptables -F bzw. ip6tables -F flushen (= leeren).
  • Mehrere Ports (Port-Bereiche) können mit einem Doppelpunkt definiert werden. Zum Beispiel Port 100 bis 200: ip6tables -A INPUT -p tcp –dport 100:200 -j DROP

Abschlusswort
Wie man sehen kann, gibt es zwischen IPv4 und IPv6 nur einen kleinen Unterschied: Zwar muss man unbedingt dafür ip6tables dafür verwenden.

Als großes Manko gilt leider, dass es unter den Linux Kernel 3.7 kein IPv6 NAT gibt – das bedeutet, dass man nicht so einfach wie bei IPv4 einzelne Ports an andere IP Adressen weiterleiten kann. Es gibt Community Patches für Kernel Versionen unter 3.7, die es ebenfalls ermöglichen, nur ist dafür eine eigene Kompilation des Kernels erforderlich (was bei unerfahrenen Benutzern schlecht enden könnte!)

Wie das blockieren bzw. freigeben einzelner IPs (alle Ports) möglich ist, habe ich bereits kurz in einem eigenen Artikel erwähnt: Linux: IP mit iptables blockieren und freigeben

KVM: qcow2 Disk-Image mit Hilfe von qemu mounten

1. August 2013 at 12:00

Bei der Virtualisierungstechnologie KVM gibt es verschiedenste Disk-Formate bei der Erstellung zur Auswahl – eines dieser Formate ist qcow2. Nach der Löschung einer KVM Maschine, benötigte ich die Daten der virtuellen Festplatte erneut und hatte zum Glück noch ein Backup zur Hand. Mit Hilfe von qemu-nbd ist es möglich, das Image problemlos in einen Ordner zu mounten.

Das Mounten des Images geht wie folgt:
modprobe nbd max_part=8 # Kernel-Modul laden
qemu-nbd --connect=/dev/nbd0 /home/kvm/100/hdd.qcow2 # Image als Device hinzufügen
mount /dev/nbd0p1 /mnt/ # erste Partition der HDD nach /mnt mounten

Nun kann man einfach auf die Daten unter /mnt/ zugreifen.
Zum Trennen werden folgende Befehle benötigt:

umount /mnt/ # Ordner unmounten
qemu-nbd --disconnect /dev/nbd0 # Device trennen

Top