BlogBlog ÜbersichtjailscriptportsoptFreeBSDLinksThermoskanne

ZFS in einer FreeBSD Jail verwenden

Auf FreeBSD gibt es die Möglichkeit, innerhalb einer Jail das ZFS Dateisystem zu administrieren. Dazu muss auf dem Hostsystem ZFS aktiviert werden:

# echo 'zfs_enable="YES"' >> /etc/rc.conf 
# /etc/rc.d/zfs start

Nachdem man eine FreeBSD Jail erstellt hat, muss sichergestellt werden, dass die Jail auch auf /dev/zfs zugreifen kann. Dazu kann in der /etc/devfs.rules folgender Eintrag eingefügt werden:

[zfs=10]
add include $devfsrules_hide_all
add include $devfsrules_unhide_basic
add include $devfsrules_unhide_login
add path 'zfs' unhide

Nun müssen bei den Jail-Einträgen der /etc/rc.conf folgende Einträge hinzugefügt werden:

jail_<Jailname>_devfs_enable="YES"
jail_<Jailname>_devfs_ruleset="zfs"

Damit innerhalb der Jail ZFS Dateisysteme gemountet werden können, muss die security.jail.mount_allowed auf 1 gesetzt werden. Durch das Setzen von security.jail.enforce_statfs auf 0 werden alle gemounteten Dateisysteme des Hostsystemes in der Jail sichtbar. Das Setzen beider Werte wird für das Verwenden von ZFS innerhalb einer Jail benötigt, können jedoch die Sicherheit des Systemes heruntersetzen.

# sysctl security.jail.mount_allowed=1
# sysctl security.jail.enforce_statfs=0
# echo security.jail.mount_allowed=1 >> /etc/sysctl.conf
# echo security.jail.enforce_statfs=0 >> /etc/sysctl.conf

Danach kann ein ZFS-Pool erstellt werden. In folgendem Beispiel wird der ZFS-Pool /tank aus /dev/ad0s1e erstellt:

# zpool create tank /dev/ad0s1e
WARNING: ZFS is considered to be an experimental feature in FreeBSD.
ZFS filesystem version 6
ZFS storage pool version 6

Nun wird das ZFS-Dateisystem erstellt, welches man danach der Jail zur Verfügung stellt.

# zfs create tank/jail
# zfs set jailed=on tank/jail

Damit das ZFS-Dateisystem der Jail zugewiesen werden kann, muss die Jail-ID der Jail mit jls(8) herausgefunden werden:

# jls
JID IP Address Hostname Path
1 <IP> <Jail-Name> <Pfad zur Jail>

Nun wird tank/jail der Jail mit der ID 1 zugewiesen:

# zfs jail 1 tank/jail

Danach kann das ZFS Dateisystem innerhalb der Jail administriert werden. Im folgenden Beispiel wird innerhalb der Jail das ZFS-Dateisystem tank/jail/beat erstellt und nach /home/beat gemountet:

jail# zfs create tank/jail/beat
jail# zfs set mountpoint=/home/beat tank/jail/beat

Startet man das Hostsystem neu, wird im Moment das ZFS-Dateisystem nicht automatisch wieder der Jail zugewiesen. Dazu muss die Jail-ID der Jail wieder mit jls bestimmt werden:

# zfs jail <JID> tank/jail

Nun können die ZFS-Dateisysteme innerhalb der Jail gemountet werden.

jail# zfs mount -a

Mehr Informationen zu ZFS findet man in der Manpage zfs(8). Eine kleine Einführung in ZFS auf FreeBSD findet man hier: http://www.chruetertee.ch/blog/archive/2007/05/26/zfs-auf-freebsd.html

Related Entries:
ZFS-Statistiken anzeigen
ZFS-Installation mit Hilfe von mfsBSD
FreeBSD nur auf ZFS installieren
Alle Änderungen eines ZFS-Pools anzeigen
Automatisch ZFS Snapshots erstellen
Comments (1)  Permalink

Dateien mit identischem Inhalt finden

Auf einem System entstehen mit der Zeit viele Dateien mit identischem Inhalt. Diese können mit samefile aufgespürt werden. samefile findet man im FreeBSD Portbaum unter sysutils/samefile:

# cd /usr/ports/sysutils/samefile && make install clean

samefile muss einfach eine Liste von Dateien übergeben werden, welche verglichen werden sollen. Dies kann am einfachsten mit find(1) gemacht werden:

# echo test > datei1
# cp datei1 datei2
# cp datei2 datei3
# echo test2 >> datei2
# ln datei1 datei4
# find . -type f | samefile
5 ./datei1 ./datei3 = 2 1

Die Ausgabe von samefile zeigt in der ersten Spalte die Grösse der Datei in Byte an, dann die Dateinamen der identischen Dateien. Liegen die Dateien auf der gleichen Partition, wird dies durch ein Gleichheitszeichen in der dritten Spalte angezeigt. Die letzten beiden Werte zeigen die Anzahl Hard-Links, die auf die beiden Dateien zeigen.

Mit der -v Option werden nach der Liste mit den identischen Dateien einige Werte zu samefile angezeigt:

# find /home/beat -type f | samefile -v
...
Ganz lange Liste
...
34102 files left after removing sizes that appear only once.
6135 groups of files with same size.
Largest group of one size is 979 files with size 53.
Memory consumption:
Largest equality table used 478731 bytes.
Binary tree built with 15174 nodes of size 24 = 364176 bytes.
Allocated 43141 nodes of size 16 = 690256 bytes for file lists.
You have a total of 819245964 bytes in identical files.

Mehr Informationen zu samefile findet man in der Manpage samefile(1).

 Permalink

Apache-Anfragen in Echtzeit betrachten

Mit apachetop lassen sich Anfragen an einen Apache-Webserver ähnlich wie Prozesse mit top(1) betrachen. apachetop findet man in den FreeBSD Ports unter sysutlis/apachetop:

# cd /usr/ports/sysutils/apachetop && make install clean

Beim Starten von apachetop kann mit der -f Option der Pfad zum Apache-Access-Log angegeben werden, aus dem apachetop die Informationen liest:

# apachetop -f /var/log/httpd-access.log

Im oberen Teil von apachetop wird nun eine kleine Statistik angezeigt über die Anzahl Anfragen, die übertragenen Daten und die zurückgegebenen Statuscodes seit apachetop läuft und der letzten 30 Sekunden. Im unteren Teil von apachetop werden die letzten Anfragen angezeigt. Mit der d-Taste kann die Ansicht zwischen aufgerufenen URLs, Refferrers und Client-IPs gewechselt werden.

last hit: 12:01:23         atop runtime:  0 days, 00:08:59             12:01:26
All: 47 reqs ( 0.1/sec) 145.2K ( 283.7B/sec) 3162.9B/req
2xx: 25 (53.2%) 3xx: 22 (46.8%) 4xx: 0 ( 0.0%) 5xx: 0 ( 0.0%)
R ( 30s): 15 reqs ( 0.6/sec) 9455.0B ( 350.2B/sec) 630.3B/req
2xx: 2 (13.3%) 3xx: 13 (86.7%) 4xx: 0 ( 0.0%) 5xx: 0 ( 0.0%)

REQS REQ/S KB KB/S URL
3 0.19 0.0 0.0 /
1 0.17 8.5 1.4*/blog/archive/2007/05/26/zfs-auf-freebsd.html
1 0.20 0.8 0.2 /dynimages/gravatar/a71087548eea50769758d7ffbf288515
1 0.33 0.0 0.0 /themes/chrueterng/css/main_chrueter.css
1 0.33 0.0 0.0 /themes/chrueterng/css/mobile.css
1 0.33 0.0 0.0 /webinc/js/livesearch.js
1 0.33 0.0 0.0 /webinc/js/openId.js
1 0.33 0.0 0.0 //themes/chrueterng/buttons/freebsd.png
1 0.33 0.0 0.0 //themes/chrueterng/buttons/rss.png
1 0.33 0.0 0.0 /themes/chrueterng/buttons/comments.png
1 0.33 0.0 0.0 //themes/chrueterng/buttons/xhtml10.png
1 0.33 0.0 0.0 /files/images/logo.png
1 0.33 0.0 0.0 //themes/chrueterng/buttons/chruetertee.png

Mit der "Pfeil-nach-unten-" bzw. "Pfeil-nach-oben-Taste", kann ein Stern zwischen den Einträgen verschoben werden. Drückt man nun die "Pfeil-nach-Rechts-Taste", werden Details zu diesem Eintrag angezeigt.

last hit: 12:01:29         atop runtime:  0 days, 00:09:09             12:01:36
All: 50 reqs ( 0.1/sec) 176.9K ( 339.1B/sec) 3622.0B/req
2xx: 27 (54.0%) 3xx: 23 (46.0%) 4xx: 0 ( 0.0%) 5xx: 0 ( 0.0%)
R ( 27s): 18 reqs ( 0.7/sec) 40.9K ( 1551.9B/sec) 2327.9B/req
2xx: 4 (22.2%) 3xx: 14 (77.8%) 4xx: 0 ( 0.0%) 5xx: 0 ( 0.0%)

REQS REQ/S KB KB/S
1 0.06 8.5 0.5 /blog/archive/2007/05/26/zfs-auf-freebsd.html
HOST
1 0.06 8.5 0.5 89.xxx.xxx.xxx [89.xxx.xxx.xxx]

REFERRER
1 0.06 8.5 0.5 www.google.ch/search?source=ig&hl=de&rlz=&q=chruetertee+zfs&btnG=Google-Suche&meta=

Mit der "Pfeil-nach-links-Taste" wird die Detailansicht wieder verlassen. apachetop beendet man mit der q-Taste.

Mehr Informationen zu apachetop findet man in der Manpage apachetop(1).

 Permalink

Partition mit GELI verschlüsseln

Möchte man auf FreeBSD eine Partition verschlüsseln, kann man dazu GELI verwenden. Im folgenden Beispiel wird die Partition ad0s1f verschlüsselt und nach /home/beat gemountet.

Damit das GELI-Kernelmodul beim Starten des Systems geladen wird, muss folgender Eintrag in der /boot/loader.conf gemacht werden:

# echo 'geom_eli_load="YES"' >> /boot/loader.conf

Nun kann ein Schlüssel generiert werden, welcher zum Verschlüsseln der Partition benötigt wird. Der Schlüssel sollte dabei an einem Ort gespeichert werden, an welchem er nicht einfach überschrieben oder gelöscht werden kann. Gegebenenfalls kann der Schlüssel auch auf einem USB-Stick gespeichert werden, so dass man zum Einhängen der verschlüsselten Partition neben einem Passwort auch den USB-Stick besitzen muss. In diesem Fall kann die Partition allerdings nicht ohne Weiteres während des Bootens gemountet werden. Im folgenden Beispiel wird der Schlüssel unter /root gespeichert:

# dd if=/dev/random of=/root/ad0s1f.key bs=64 count=1

Danach wird die verschlüsselte Partition initiiert, dabei muss man ein Passwort festlegen:

# geli init -s 4096 -K /root/ad0s1f.key /dev/ad0s1f
Enter new passphrase:
Reenter new passphrase:

Nun wird die Partition ins System eingebunden, dabei muss man das vorher bestimmte Passwort eingeben:

# geli attach -k /root/ad0s1f.key /dev/ad0s1f
Enter passphrase:

Jetzt wird die neue Partition mit Zufallswerten überschrieben, das kann eine Zeit dauern:

# dd if=/dev/random of=/dev/ad0s1f.eli bs=1m

Danach wird ein neues Dateisystem auf der verschlüsselten Partition erstellt und diese das erste Mal ins System gemountet:

# newfs /dev/ad0s1f.eli
# mount /dev/ad0s1f.eli /home/beat

Die verschlüsselte Partition kann danach wie folgt geunmountet werden:

# umount /home/beat
# geli detach ad0s1f.eli

Soll die Partition automatisch beim Systemstart gemountet werden, müssen folgende Einträge in der /etc/rc.conf gemacht werden:

geli_devices="ad0s1f"
geli_ad0s1f_flags="-k /root/ad0s1f.key"

Jetzt noch den entsprechenden Eintrag in der /etc/fstab machen:

/dev/ad0s1f.eli         /home/beat              ufs             rw      0       0

Startet man nun das System neu, wird man automatisch nach dem Passwort gefragt und die verschlüsselte Partition wird gemountet.

Mehr Informationen zu verschlüsselten Partitionen mit GELI findet man in der Manpage geli(8). Wie man den Swap-Bereich mit GELI verschlüsselt, findet man in folgender Anleitung: http://www.chruetertee.ch/blog/archive/2007/06/30/swap-verschluesseln.html


Comments (1)  Permalink
Prev81-84/84