BlogBlog ÜbersichtjailscriptportsoptFreeBSDLinksThermoskanne

I/O- anstatt CPU-Werte in top anzeigen

Möchte man auf FreeBSD herausfinden, welcher Prozess wieviel I/O-Last verursacht, kann man top im I/O Modus starten:

# top -mio
last pid: 1688; load averages: 0.90, 0.59, 0.40 up 0+03:14:51 21:27:52
51 processes: 3 running, 48 sleeping
CPU states: 28.8% user, 0.0% nice, 55.6% system, 1.2% interrupt, 14.4% idle
Mem: 175M Active, 616M Inact, 167M Wired, 16M Cache, 111M Buf, 21M Free
Swap: 1024M Total, 16K Used, 1024M Free

PID USERNAME VCSW IVCSW READ WRITE FAULT TOTAL PERCENT COMMAND
1688 beat 17 643 0 174 0 174 29.15% dd
1004 root 130 8 0 0 0 0 0.00% Xorg
1033 beat 47 10 0 0 0 0 0.00% gkrellm
1676 beat 2595 712 81 60 0 141 23.62% thunderbird-bin
836 root 4 8 0 0 0 0 0.00% powerd
...

In diesem Modus werden nicht nur die Anzahl Lese- und Schreibvorgänge, sondern auch die Anzahl von Voluntary Context Switches (VCSW) und Involuntary Context Switches (IVSW) angezeigt. Ein Voluntary Context Switch wird ausgeführt, wenn ein Thread eine Ressource benötigt, welche zur Zeit nicht vorhanden ist, bei einem Involuntary Context Switch hat ein Thread seine Zeit in der CPU aufgebraucht oder ein höher priorisierter Thread soll ausgeführt werden. Mehr Informationen zu top findet man in der Manpage top(1).

Related Entries:
Gespeicherte Optionen nach OptionsNG konvertieren
Ports-Subversion-Repository spiegeln
sysinstall-Ersatz für neuere FreeBSD-Versionen
Alte FreeBSD-Port Patchdateien aufsplitten
FreeBSD-Portbaum auf Fehler überprüfen
 Permalink

RAM-Disk mit tmpfs auf FreeBSD erstellen

Wollte man bis anhin auf FreeBSD zum Beispiel die /tmp Partition in einer RAM-Disk anlegen, so musste man eine RAM-Disk mit fixer Grösse erstellen.

Seit einiger Zeit ist in FreeBSD 7-CURRENT eine Portierung der NetBSD tmpfs Implementation vorhanden. Somit können Partitionen im Arbeitsspeicher erstellt werden, ohne dass eine feste Grösse vorgegeben werden muss und auch nur der auf der Partition verwendete Platz im Arbeitsspeicher verwendet wird.

Eine RAM-Disk kann wie folgt erstellt werden:

# mount -t tmpfs tmpfs <Mountpunkt>

Möchte man /tmp fest in den Arbeitspeicher auslagern, fügt man folgende Zeile in der /etc/fstab ein:

tmpfs          /tmp        tmpfs   rw,mode=1777    0       0

Wird nun das System neu gestartet oder man mountet /tmp neu, ist /tmp als RAM-Disk vorhanden:

# mount
/dev/ad0s3a on / (ufs, local)
devfs on /dev (devfs, local)
tmpfs on /tmp (tmpfs, local)
/dev/ad0s3f on /usr (ufs, local, soft-updates)
/dev/ad0s3e on /var (ufs, local, soft-updates)
Related Entries:
Gespeicherte Optionen nach OptionsNG konvertieren
Ports-Subversion-Repository spiegeln
sysinstall-Ersatz für neuere FreeBSD-Versionen
Alte FreeBSD-Port Patchdateien aufsplitten
FreeBSD-Portbaum auf Fehler überprüfen
Comments (4)  Permalink

ZFS auf FreeBSD

Seit einiger Zeit ist das neue Dateisystem von Sun, ZFS, in FreeBSD 7-CURRENT verfügbar. Zeit sich mal ein bisschen genauer mit ZFS zu befassen. Folgende Beispiele zeigen, wie man einen Mehrbenutzerserver mit mehreren Festplatten und ZFS aufsetzen kann. Die Beispiele wurden mit dem Mai Snapshot von CURRENT durchgeführt:

# uname -a
FreeBSD test.chruetertee.ch 7.0-CURRENT-200705 FreeBSD 7.0-CURRENT-200705 #0: Mon May 7 11:24:25 UTC 2007
root@almeida.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC i386

Damit ZFS verwendet werden kann, muss es in der rc.conf aktiviert und das dazugehörige rc.d-Skript ausgeführt werden. Ist der Eintrag in rc.conf einmal gemacht, wird die ZFS-Unterstützung beim Systemstart aktiviert und die vorhandenen ZFS-Dateisysteme automatisch gemountet.

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

Damit das System mit dem ZFS-Dateisystem umgehen kann, wird automatisch das entsprechende Kernelmodul geladen:

# kldstat
Id Refs Address Size Name
1 4 0xc0400000 7ddc50 kernel
2 1 0xc0bde000 5f5dc acpi.ko
3 1 0xc756d000 92000 zfs.ko

Bei einem Neustart wird man dann immer mit folgender Meldung begrüsst:

WARNING: ZFS is considered to be an experimental feature in FreeBSD.
ZFS filesystem version 6
ZFS storage pool version 6

Damit man ZFS-Dateisysteme erstellen kann, müssen zuerst die Festplatten, auf denen man ZFS-Dateisysteme verwenden möchte, zu einem ZFS-Pool zusammengefügt werden. Folgender Befehl kreiert einen Pool, in denen die Platten da1 und da2 zur Datensicherheit gespiegelt sind. Der Pool namens tank ist danach im Verzeichnisbaum unter /tank eingehängt.

# zpool create tank mirror da1 da2
# zpool list
NAME SIZE USED AVAIL CAP HEALTH ALTROOT
tank 16.9G 111K 16.9G 0% ONLINE -

# df -h
Filesystem Size Used Avail Capacity Mounted on
/dev/da0s1a 496M 105M 351M 23% /
devfs 1.0K 1.0K 0B 100% /dev
/dev/da0s1d 989M 12K 910M 0% /tmp
/dev/da0s1f 9.2G 116M 8.3G 1% /usr
/dev/da0s1e 1.9G 250K 1.8G 0% /var
tank 17G 0B 17G 0% /tank

# mount
/dev/da0s1a on / (ufs, local)
devfs on /dev (devfs, local)
/dev/da0s1d on /tmp (ufs, local, soft-updates)
/dev/da0s1f on /usr (ufs, local, soft-updates)
/dev/da0s1e on /var (ufs, local, soft-updates)
tank on /tank (zfs, local)

Informationen zum Pool erhält man wie folgt:

# zpool status
pool: tank
state: ONLINE
scrub: none requested
config:

NAME STATE READ WRITE CKSUM
tank ONLINE 0 0 0
mirror ONLINE 0 0 0
da1 ONLINE 0 0 0
da2 ONLINE 0 0 0

Zu jeder Zeit können einem Pool weitere Platten hinzugefügt werden. Sind zu einem späteren Zeitpunkt die ZFS-Dateisysteme in einem Pool fast voll, so können dem Pool neue Platten hinzugefügt werden und die sich darin befindenden Dateisysteme sofort den neuen Speicherplatz benutzen. Im folgenden Beispiel werden dem schon bestehenden Pool tank die gespiegelten Platten da3 und da4 hinzugefügt:

# zpool add tank mirror da3 da4
# zpool status -v tank
pool: tank
state: ONLINE
scrub: none requested
config:

NAME STATE READ WRITE CKSUM
tank ONLINE 0 0 0
mirror ONLINE 0 0 0
da1 ONLINE 0 0 0
da2 ONLINE 0 0 0
mirror ONLINE 0 0 0
da3 ONLINE 0 0 0
da4 ONLINE 0 0 0

Ein Pool kann wie folgt entfernt werden. Alle Daten gehen dabei jedoch verloren.

# zpool destroy tank

# zpool status -v tank
cannot open 'tank': no such pool

Folgendes Beispiel erstellt einen Pool, in welchem die Daten auf die Spiegel da1, da2 und da3, da4 verteilt werden.

# zpool create tank mirror da1 da2 mirror da3 da4

Nun kann ein ZFS-Dateisystem innerhalb des Pools erstellt werden. Hier wird das Dateisystem /ports innerhalb vom Pool tank erstellt:

# zfs create tank/ports

In das Dateisystem /ports soll später der Portbaum hinein kommen. Da der Portbaum fast ausschliesslich aus Textdateien besteht, kann eine Komprimierung auf dieses Dateisystem eingeschaltet werden.

# zfs set compression=gzip tank/ports
# zfs get compression tank/ports
NAME PROPERTY VALUE SOURCE
tank/ports compression gzip local

Nun kann das Dateisystem nach /usr/ports gemountet und der Portbaum heruntergeladen werden:

# zfs set mountpoint=/usr/ports tank/ports
# portsnap fetch extract

Jetzt wird ein Dateisystem für die home-Verzeichnisse kreiert. In diesem Dateisystem wird nun ein weiteres für den Benutzer beat erstellt.

# zfs create tank/home
# zfs create tank/home/beat

Für den Benutzer setzen wir nun ein Quota von 1GB fest:

# zfs set quota=1G tank/home/beat

Alle Informationen eines Dateisystems können wie folgt abgefragt werden:

# zfs get all tank/home/beat
NAME PROPERTY VALUE SOURCE
tank/home/beat type filesystem -
tank/home/beat creation Mon May 7 12:42 2007 -
tank/home/beat used 18K -
tank/home/beat available 1024M -
tank/home/beat referenced 18K -
tank/home/beat compressratio 1.00x -
tank/home/beat mounted yes -
tank/home/beat quota 1G local
tank/home/beat reservation none default
tank/home/beat recordsize 128K default
tank/home/beat mountpoint /tank/home/beat default
tank/home/beat sharenfs off default
tank/home/beat checksum on default
tank/home/beat compression off default
tank/home/beat atime on default
tank/home/beat devices on default
tank/home/beat exec on default
tank/home/beat setuid on default
tank/home/beat readonly off default
tank/home/beat jailed off default
tank/home/beat snapdir hidden default
tank/home/beat aclmode groupmask default
tank/home/beat aclinherit secure default
tank/home/beat canmount on default
tank/home/beat shareiscsi off default
tank/home/beat xattr off temporary
tank/home/beat copies 1 default

Nun werden die home-Verzeichnisse nach /usr/home gemountet:

# zfs set mountpoint=/usr/home tank/home

# df -h
Filesystem Size Used Avail Capacity Mounted on
/dev/da0s1a 496M 105M 351M 23% /
devfs 1.0K 1.0K 0B 100% /dev
/dev/da0s1d 989M 12K 910M 0% /tmp
/dev/da0s1f 9.2G 116M 8.3G 1% /usr
/dev/da0s1e 1.9G 310K 1.8G 0% /var
tank 33G 0B 33G 0% /tank
tank/ports 33G 98M 33G 0% /usr/ports
tank/home 33G 0B 33G 0% /usr/home
tank/home/beat 1.0G 128K 1.0G 0% /usr/home/beat

Nun wird versucht, das home-Verzeichnis von beat mit einer zu großen Testdatei zu füllen:

# cd /usr/home/beat/
# dd if=/dev/zero of=bla bs=1M count=2024

# df -h
Filesystem Size Used Avail Capacity Mounted on
/dev/da0s1a 496M 105M 351M 23% /
devfs 1.0K 1.0K 0B 100% /dev
/dev/da0s1d 989M 12K 910M 0% /tmp
/dev/da0s1f 9.2G 116M 8.3G 1% /usr
/dev/da0s1e 1.9G 466K 1.8G 0% /var
tank 32G 128K 32G 0% /tank
tank/ports 32G 98M 32G 0% /usr/ports
tank/home 32G 128K 32G 0% /usr/home
tank/home/beat 1.0G 1.0G 1.5M 100% /usr/home/beat

Das gesetzte Quota verhindet, dass mehr als 1GB Daten in diesem Verzeichnis abgelegt werden. Ist das zuwenig, kann die Quota-Grenze auch erhöht werden:

# zfs set quota=2G tank/home/beat
# df -h | grep beat
tank/home/beat 2.0G 1.0G 2.0G 50% /usr/home/beat

# rm bla
# df -h | grep beat
tank/home/beat 2.0G 128K 2.0G 0% /usr/home/beat

Es lässt sich auch in einem ZFS-Dateisystem Speicherplatz reservieren. Für den Benutzer beat wird nun 1GB Speicherplatz reserviert.

# zfs set reservation=1G tank/home/beat
# zfs get reservation tank/home/beat
NAME PROPERTY VALUE SOURCE
tank/home/beat reservation 1G local

Das home-Verzeichnis von beat ist immer noch gleich gross, in dem darüberliegenden Dateisystemen ist der reservierte Platz nun als besetzt markiert. Der Benutzer beat hat nun also immer mind. 1GB zur Verfügung, egal wieviel Platz andere Benutzer verbrauchen.

# zfs list
NAME USED AVAIL REFER MOUNTPOINT
tank 1.10G 32.1G 18K /tank
tank/home 1.00G 32.1G 20K /usr/home
tank/home/beat 25.5K 2.00G 25.5K /usr/home/beat
tank/ports 97.8M 32.1G 97.8M /usr/ports

Der reservierte Speicherplatz kann auch wieder aufgehoben werden. In den höherliegenden Dateisystemen wird der Speicherplatz nun wieder freigegeben:

# zfs set reservation=0 tank/home/beat
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
tank 98.0M 33.1G 18K /tank
tank/home 45.5K 33.1G 20K /usr/home
tank/home/beat 25.5K 2.00G 25.5K /usr/home/beat
tank/ports 97.8M 33.1G 97.8M /usr/ports

Nun wird ein weiteres Benutzerverzeichnis erstellt und dieses mit Daten gefüllt:

# zfs create tank/home/andereruser
# dd if=/dev/zero of=/usr/home/andereruser/wichtig count=2000
2000+0 records in
2000+0 records out
1024000 bytes transferred in 0.232209 secs (4409821 bytes/sec)
# pwd
/usr/home/andereruser
# echo "Hallo" > Datei
# ll
total 1027
-rw-r--r-- 1 root wheel 6 May 7 13:08 Datei
-rw-r--r-- 1 root wheel 1024000 May 7 13:07 wichtig

Nun kann ein Snapshot aller Benutzerverzeichnisse gezogen werden. Durch die -r-Option werden auch Snapshots von darunterliegenden Dateissystemen gemacht.

# zfs snapshot -r tank/home@now
# zfs list -t snapshot
NAME USED AVAIL REFER MOUNTPOINT
tank/home@now 0 - 21K -
tank/home/andereruser@now 0 - 1.02M -
tank/home/beat@now 0 - 27.5K -

Nun werden die Daten verändert.

# pwd
/usr/home/andereruser
# rm wichtig
# echo "Hallo2" >> Datei
# echo "Neu" > DateiNeu
# ls -l
total 2
-rw-r--r-- 1 root wheel 13 May 7 13:09 Datei
-rw-r--r-- 1 root wheel 4 May 7 13:09 DateiNeu

Die gezogenen Snapshots sind wie Dateisysteme sichtbar und können auch so genutzt werden.

# zfs list
NAME USED AVAIL REFER MOUNTPOINT
tank 99.0M 33.1G 18K /tank
tank/home 1.09M 33.1G 21K /usr/home
tank/home@now 0 - 21K -
tank/home/andereruser 1.04M 33.1G 20K /usr/home/andereruser
tank/home/andereruser@now 1.02M - 1.02M -
tank/home/beat 27.5K 2.00G 27.5K /usr/home/beat
tank/home/beat@now 0 - 27.5K -
tank/ports 97.8M 33.1G 97.8M /usr/ports

Ein Snapshot kann jederzeit zurückgespielt werden. Dabei werden alle Änderungen, die seit dem Snapshot gemacht wurden, rückgängig gemacht.

# zfs rollback -r tank/home/andereruser@now
# ll
total 1028
-rw-r--r-- 1 root wheel 6 May 7 13:08 Datei
-rw-r--r-- 1 root wheel 1024000 May 7 13:07 wichtig
# cat Datei
Hallo

Benötigt man den Snapshot nicht mehr, kann dieser gelöscht werden.

# zfs destroy -r tank/home@now

Soll eine Festplatte ausgetauscht werden, kann man diese zuerst offline setzten. Danach werden keine Lese- und Schreiboperationen mehr auf das Laufwerk ausgeführt.

# zpool offline tank da4
Bringing device da4 offline

# zpool status
pool: tank
state: DEGRADED
status: One or more devices has been taken offline by the administrator.
Sufficient replicas exist for the pool to continue functioning in a
degraded state.
action: Online the device using 'zpool online' or replace the device with
'zpool replace'.
scrub: none requested
config:

NAME STATE READ WRITE CKSUM
tank DEGRADED 0 0 0
mirror ONLINE 0 0 0
da1 ONLINE 0 0 0
da2 ONLINE 0 0 0
mirror DEGRADED 0 0 0
da3 ONLINE 0 0 0
da4 OFFLINE 0 0 0

errors: No known data errors

Nachdem das Laufwerk getauscht wurde, kann dieses wieder aktiviert werden:

# zpool online tank da4
Bringing device da4 online

Das ausgetauschte Laufwerk wird nun mit den Daten des gespiegelten Laufwerks synchronisiert.

# zpool status
pool: tank
state: ONLINE
status: One or more devices is currently being resilvered. The pool will
continue to function, possibly in a degraded state.
action: Wait for the resilver to complete.
scrub: resilver in progress, 82.43% done, 0h0m to go
config:

NAME STATE READ WRITE CKSUM
tank ONLINE 0 0 0
mirror ONLINE 0 0 0
da1 ONLINE 0 0 0
da2 ONLINE 0 0 0
mirror ONLINE 0 0 0
da3 ONLINE 0 0 0
da4 ONLINE 0 0 0

errors: No known data errors

Ist das Synchronisieren fertig, kann man nachschauen, ob dabei Fehler aufgetreten sind.

# zpool status
pool: tank
state: ONLINE
status: One or more devices is currently being resilvered. The pool will
continue to function, possibly in a degraded state.
action: Wait for the resilver to complete.
scrub: resilver completed with 0 errors on Mon May 7 13:32:24 2007
config:

NAME STATE READ WRITE CKSUM
tank ONLINE 0 0 0
mirror ONLINE 0 0 0
da1 ONLINE 0 0 0
da2 ONLINE 0 0 0
mirror ONLINE 0 0 0
da3 ONLINE 0 0 0
da4 ONLINE 0 0 0

errors: No known data errors

Die ZFS-Pools können auch täglich durch die periodic-Scripte geprüft werden:

# echo 'daily_status_zfs_enable="YES"' >> /etc/periodic.conf

Danach findet man täglich in den daily-Mails den Status aller Pools:

Checking status of zfs pools:
all pools are healthy

Weitere Informationen zu ZFS findet man im Quickstart-Guide, im äusserst ausführlichen ZFS-Handbuch von OpenSolaris und in den Manpages zpool(1) und zfs(1).

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 (3)  Permalink

Partitionen per Label mounten

Besitzt man zum Beispiel eine USB-Festplatte, welche mit UFS formatiert ist und an verschiedenen FreeBSD Rechnern benutzt wird, so kann man sich das Mounten der Festplatte vereinfachen, indem man Labels benutzt. Damit man ein Label auf einer Partition erstellen kann, muss die Festplatte mit einem FreeBSD Rechner verbunden, jedoch nicht gemountet sein. Auch muss man zuerst das geom_label-Kernelmodul laden:

# kldload geom_label.ko

Nun kann das Label mit Hilfe von tunefs(8) auf die Partition geschrieben werden:

# tunefs -L <Label> <Partition>

Zum Beispiel:

# tunefs -L usbdisk /dev/da0s3c

Will man nun auf einem FreeBSD Rechner die Festplatte mounten, so muss, falls dies noch nicht geschehen ist, das geom_label-Kernelmodul geladen werden. Möchte man das Modul dauerhaft laden, so trägt man folgende Zeile in der /boot/loader.conf ein:

geom_label_load="YES"

Sobald man nun die Festplatte mit dem System verbindet, wird folgende Meldung auf der Konsole ausgegeben:

GEOM_LABEL: Label for provider da0s3 is ufs/usbdisk.

Nun lässt sich die Festplatte auf jedem FreeBSD System immer gleich mounten:

mount /dev/ufs/usbdisk /mnt/usb/

Mehr Informationen zu den Labels findet man in der Manpage glabel(8).

Related Entries:
Gespeicherte Optionen nach OptionsNG konvertieren
Ports-Subversion-Repository spiegeln
sysinstall-Ersatz für neuere FreeBSD-Versionen
Alte FreeBSD-Port Patchdateien aufsplitten
FreeBSD-Portbaum auf Fehler überprüfen
Comments (3)  Permalink

Festplattenbenutzung anzeigen

Ähnlich wie top(1) den Ressourcenverbrauch von Prozessen anzeigt, zeigt gstat(8) die Auslastung von Festplatten, Partitionen, RAID Arrays und virtuellen Laufwerken wie RAM-Disks an. Damit gstat ausgeführt werden kann, muss man root-Rechte besitzen. Die Anzeige wird automatisch regelmässig aktualisiert. Im folgenden Beispiel sieht man einen Ausschnitt während ein make clean in /usr/src ausgeführt wird:

# gstat
L(q) ops/s r/s kBps ms/r w/s kBps ms/w %busy Name
0 0 0 0 0.0 0 0 0.0 0.0| fd0
0 0 0 0 0.0 0 0 0.0 0.0| acd0
0 0 0 0 0.0 0 0 0.0 0.0| ad4
0 0 0 0 0.0 0 0 0.0 0.0| ad6
32 559 0 0 0.0 559 1238 509.4 98.8| ar0
0 0 0 0 0.0 0 0 0.0 0.0| ad4s1
0 0 0 0 0.0 0 0 0.0 0.0| ad6s1
32 559 0 0 0.0 559 1238 511.5 98.8| ar0s1
0 0 0 0 0.0 0 0 0.0 0.0| ad4s1a
0 0 0 0 0.0 0 0 0.0 0.0| ad4s1b
0 0 0 0 0.0 0 0 0.0 0.0| ad4s1c
0 0 0 0 0.0 0 0 0.0 0.0| ad4s1d
0 0 0 0 0.0 0 0 0.0 0.0| ad4s1e
0 0 0 0 0.0 0 0 0.0 0.0| ad4s1f
0 0 0 0 0.0 0 0 0.0 0.0| ad6s1a
0 0 0 0 0.0 0 0 0.0 0.0| ad6s1b
0 0 0 0 0.0 0 0 0.0 0.0| ad6s1c
0 0 0 0 0.0 0 0 0.0 0.0| ad6s1d
0 0 0 0 0.0 0 0 0.0 0.0| ad6s1e
0 0 0 0 0.0 0 0 0.0 0.0| ad6s1f
0 0 0 0 0.0 0 0 0.0 0.0| ar0s1a
0 0 0 0 0.0 0 0 0.0 0.0| ar0s1b
0 0 0 0 0.0 0 0 0.0 0.0| ar0s1c
0 0 0 0 0.0 0 0 0.0 0.0| ar0s1d
0 0 0 0 0.0 0 0 0.0 0.0| ar0s1e
32 559 0 0 0.0 559 1238 520.8 98.8| ar0s1f

Die Spalten bedeuten folgendes:

L(q) = Länge der Queue

ops/s, r/s, w/s = Operationen, Leseoperatationen und Schreiboperationen pro Sekunde

kBps = kiloBytes pro Sekunde

ms/r, ms/w = Millisekunden pro Lese- und Schreiboperation

%busy = % der Zeit mit mindestens einem Eintrag in der Queue

Man sollte sich allerdings nicht zu fest auf die %busy Spalte konzentrieren, da auch Werte über 100% auftreten können:

 L(q)  ops/s    r/s   kBps   ms/r    w/s   kBps   ms/w   %busy Name
[...]
5 261 0 0 0.0 261 31965 31.8 119.6| ar0
0 0 0 0 0.0 0 0 0.0 0.0| ad4s1
0 0 0 0 0.0 0 0 0.0 0.0| ad6s1
5 261 0 0 0.0 261 31965 31.8 119.6| ar0s1
[...]
5 261 0 0 0.0 261 31965 32.0 119.7| ar0s1

gstat verlässt man wie top indem man q drückt. Mehr Informationen findet man in der Manpage gstat(8).

Related Entries:
Gespeicherte Optionen nach OptionsNG konvertieren
Ports-Subversion-Repository spiegeln
sysinstall-Ersatz für neuere FreeBSD-Versionen
Alte FreeBSD-Port Patchdateien aufsplitten
FreeBSD-Portbaum auf Fehler überprüfen
 Permalink

Alten Quellcode von Ports mit portmaster löschen

Mit der Zeit sammeln sich alte Quellcodedateien von Ports in /usr/ports/distfiles, die zum Teil nicht mehr benötigt werden. Natürlich kann man regelmässig den Inhalt dieses Verzeichnisses löschen, aber es gibt auch bessere Möglichkeiten, indem man nur die Dateien löscht, die nicht mehr gebraucht werden.

Benutzer von portupgrade können dies mit portsclean machen.

Seit der heute veröffentlichten Version 1.13 von portmaster können nun auch damit veraltete Quellcodedateien gelöscht werden.

Möchte man, dass der Benutzer zuerst gefragt wird, ob eine Datei gelöscht werden soll, so benutzt man portmaster wie folgt:

# portmaster --clean-distfiles

Möchte man die veralteten Dateien automatisch ohne Nachfrage löschen, kann man portmaster wie folgt benutzen:

# portmaster --clean-distfiles-all
Related Entries:
Gespeicherte Optionen nach OptionsNG konvertieren
Ports-Subversion-Repository spiegeln
sysinstall-Ersatz für neuere FreeBSD-Versionen
Alte FreeBSD-Port Patchdateien aufsplitten
FreeBSD-Portbaum auf Fehler überprüfen
 Permalink

Binäre Aktualisierung des Basissystems

Werden im FreeBSD Basissystem Sicherheitslücken gefunden, so kann man diese auch binär mit freebsd-update stopfen. In FreeBSD 6.2 und 7-CURRENT befindet sich freebsd-update im Basissystem, alle älteren Versionen können freebsd-update aus den Ports installieren:

# cd /usr/ports/security/freebsd-update && make install clean

Nun können noch gebrauchte Patches heruntergeladen werden:

# freebsd-update fetch

Wurden Patches gefunden, die noch nicht eingespielt wurden, so können diese nun installiert werden:

# freebsd-update install

Auch der Kernel wird aktualisiert, allerdings nur wenn man den GENERIC Kernel verwendet. Hat man einen selber zusammengestellten Kernel, so muss man den Quellcode aktualisieren und den Kernel selber neu bauen. Aber auch wenn man den Kernel mit freebsd-update aktualisiert, muss das System neu gestartet werden, damit der neue Kernel in Betrieb genommen wird.

Man kann freebsd-update auch in einen cron-Job aufnehmen. So wird regelmässig nach Aktualisierungen gesucht, diese Heruntergeladen und per Mail eine Meldung verschickt, dass neue Patches eingespielt werden können. Verwendet man ein System mit freebsd-update im Basissystem, so kann folgende Zeile in /etc/crontab eingetragen werden:

 0 5 * * * root /usr/sbin/freebsd-update cron

Verwendet man freebsd-update aus den Ports, so lautet der Pfad /usr/local/sbin/freebsd-update.

Related Entries:
Gespeicherte Optionen nach OptionsNG konvertieren
Ports-Subversion-Repository spiegeln
sysinstall-Ersatz für neuere FreeBSD-Versionen
Alte FreeBSD-Port Patchdateien aufsplitten
FreeBSD-Portbaum auf Fehler überprüfen
 Permalink

/tmp und /var in einer RAM-Disk erstellen

Möchte man /tmp in einer RAM-Disk erstellen, so muss folgender Eintrag in der /etc/rc.conf eingetragen werden:

tmpmfs="YES"

Nach dem nächsten Neustart wird standardmässig eine 20 MB grosse RAM-Disk erstellt und nach /tmp gemountet. Ein Eintrag in der /etc/fstab für /tmp wird nicht benötigt. Möchte man eine grössere RAM-Disk, zum Beispiel 128 MB, so kann dies mit folgendem zusätzlichen Eintrag gemacht werden:

tmpsize="128m"

Auch die /var Partition kann durch folgenden Eintrag in der /etc/rc.conf in eine RAM-Disk ausgelagert werden:

varmfs="YES"

Standardmässig wird die RAM-Disk für /var mit einer Grösse von 32 MB angelegt. Auch diese Grösse kann durch einen Eintrag in der /etc/rc.conf geändert werden:

varsize="<Grösse>"

Auch hier wird danach kein /etc/fstab Eintrag für /var benötigt.

Bei einem Neustart sind natürlich die Daten auf den Partitionen verloren, besitzt man allerdings eine CF-Karte als Disk, die nur eine begrenzte Anzahl Schreibvorgänge erlaubt, so können mit dieser Methode trotzdem Log- und temporäre Daten bis zum nächsten Neustart geschrieben werden.

Related Entries:
Gespeicherte Optionen nach OptionsNG konvertieren
Ports-Subversion-Repository spiegeln
sysinstall-Ersatz für neuere FreeBSD-Versionen
Alte FreeBSD-Port Patchdateien aufsplitten
FreeBSD-Portbaum auf Fehler überprüfen
Comments (1)  Permalink

Systemmeldungen anzeigen

Auf FreeBSD können die Kernelmeldungen, die während des Aufstartens und des Betriebs erzeugt werden, mit dmesg(8) angesehen werden:

# dmesg
Copyright (c) 1992-2006 The FreeBSD Project.
Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994
The Regents of the University of California. All rights reserved.
FreeBSD is a registered trademark of The FreeBSD Foundation.
FreeBSD 6.2-RC1 #0: Sun Nov 19 19:23:21 CET 2006
beat@daedalus.network.local:/usr/obj/usr/src/sys/BEASTIE
...

Sollen zusätzlich zu den Kernelmeldungen noch die Ausgaben von syslog und /dev/console angezeigt werden, so dass alle Systemmeldungen des Aufstartens sichtbar sind, so kann die -a Option von dmesg verwendet werden:

# dmesg -a

Soll die Ausgabe von /dev/console in eine Datei geschrieben werden, so kann die Raute vor folgenden Eintrag in der /etc/syslog.conf entfernt werden:

console.info                                    /var/log/console.log

Danach muss die Datei /var/log/console.log als root angelegt und die Rechte angepasst werden:

# touch /var/log/console.log && chmod 600 /var/log/console.log

Sollen alle syslog Meldungen in einer Datei gesammelt werden, so kann die Raute vor folgender Zeile in der /etc/syslog.conf entfernt werden:

*.*                                             /var/log/all.log

Danach muss die Datei /var/log/all.log erstellt, die Rechte angepasst und syslog neu gestartet werden:

#  touch /var/log/all.log && chmod 600 /var/log/all.log && /etc/rc.d/syslogd restart


Related Entries:
Gespeicherte Optionen nach OptionsNG konvertieren
Ports-Subversion-Repository spiegeln
sysinstall-Ersatz für neuere FreeBSD-Versionen
Alte FreeBSD-Port Patchdateien aufsplitten
FreeBSD-Portbaum auf Fehler überprüfen
 Permalink

Manpages nachträglich installieren

Möchte man auf einem FreeBSD-System die Manpages nachträglich installieren, so kann man dies in sysinstall(8) mit Configure -> Distributions -> man machen.

Hat man die FreeBSD-Sourcen unter /usr/src installiert, so lassen sich die Manpages auch ganz einfach wie folgt installieren:

# cd /usr/src && make all-man && make maninstall
Related Entries:
Gespeicherte Optionen nach OptionsNG konvertieren
Ports-Subversion-Repository spiegeln
sysinstall-Ersatz für neuere FreeBSD-Versionen
Alte FreeBSD-Port Patchdateien aufsplitten
FreeBSD-Portbaum auf Fehler überprüfen
 Permalink
Prev Next61-70/125