IT-Blog von Sebastian van de Meer

Schlagwort: BSD (Seite 4 von 4)

ZFS RAID: Mirror, RAID-Z und Root-Pool spiegeln

ZFS bringt RAID als eingebaute Funktion mit — kein separater Volumemanager nötig. Mirror, RAID-Z (ähnlich RAID-5), RAID-Z2 (ähnlich RAID-6) und RAID-Z3 sind direkt im Pool konfigurierbar. Spare-Platten und Striping ebenfalls.

Mirror anlegen

Einen neuen Pool direkt als Mirror erstellen:

zpool create backup mirror da0 da1

Einem bestehenden Pool eine Spiegelplatte hinzufügen:

zpool attach backup da0 da1
Make sure to wait until resilver is done before rebooting.

Wichtig: Die Reihenfolge der Platten zählt. Die erste Platte (da0) ist die Quelle, die zweite (da1) wird als Spiegel hinzugefügt. Vertauscht man die Platten, spiegelt ZFS die leere Platte auf die Datenplatte.

RAID-Z

RAID-Z verteilt Daten und Parität über mehrere Platten — ähnlich wie klassisches RAID, aber mit Copy-on-Write und ohne Write Hole:

# raidz — 1 Platte darf ausfallen (wie RAID-5), mindestens 3 Platten
zpool create tank raidz da0 da1 da2

# raidz2 — 2 Platten dürfen ausfallen (wie RAID-6), mindestens 4 Platten
zpool create tank raidz2 da0 da1 da2 da3

# raidz3 — 3 Platten dürfen ausfallen, mindestens 5 Platten
zpool create tank raidz3 da0 da1 da2 da3 da4

# Mit Hot-Spare
zpool create tank raidz da0 da1 da2 spare da3

Resilvering

Beim Resilvering zeigt sich ein großer Vorteil von ZFS: Da Dateisystem und Volumemanager nicht getrennt sind, weiß ZFS genau, wo Daten liegen. Es spiegelt nur belegte Blöcke. Ein 80-GB-Mirror mit 4 GB Daten war in 5 Minuten fertig resilvered — klassische Lösungen wie mdadm würden stumpf alle 80 GB Block für Block kopieren.

zpool status backup
  pool: backup
 state: ONLINE
  scan: resilvered 4,04G in 0h5m with 0 errors on Mon Oct 31 13:33:00 2011
config:

    NAME        STATE     READ WRITE CKSUM
    backup      ONLINE       0     0     0
      mirror-0  ONLINE       0     0     0
        da0     ONLINE       0     0     0
        da1     ONLINE       0     0     0

errors: No known data errors

Root-Pool spiegeln

Gespiegelte Daten helfen nichts, wenn die Systemplatte ausfällt und man nicht booten kann. Daher den Root-Pool ebenfalls spiegeln — und den Bootloader auf beide Platten schreiben.

Unter Solaris/OpenIndiana:

# Partitionslayout der Quellplatte auf die Zielplatte kopieren
prtvtoc /dev/rdsk/c2d0s2 | fmthard -s - /dev/rdsk/c2d1s2

# Zielplatte dem Root-Pool als Mirror hinzufügen
zpool attach -f rpool c2d0s0 c2d1s0
Make sure to wait until resilver is done before rebooting.

# Grub auf die Zielplatte schreiben
installgrub /boot/grub/stage1 /boot/grub/stage2 /dev/rdsk/c2d1s0

Unter FreeBSD ist es einfacher — gpart für die Partitionierung und gptzfsboot für den Bootloader. Unter Linux mit UEFI reicht oft ein zpool attach und die Kopie der EFI-Partition.

Praxistest — Hauptplatte gezogen, System von der Spiegelplatte gebootet:

zpool status rpool
  pool: rpool
 state: DEGRADED
config:

    NAME        STATE     READ WRITE CKSUM
    rpool       DEGRADED     0     0     0
      mirror-0  DEGRADED     0     0     0
        c2d0s0  FAULTED      0     0     0  corrupted data
        c2d1s0  ONLINE       0     0     0

errors: No known data errors

Degraded, aber online — genau wie gewünscht. Nach dem Einsetzen einer neuen Platte übernimmt zpool replace den Rest.

Details in der OpenZFS-Dokumentation zu zpool create. Mehr zu ZFS: ZFS Snapshots und ZFS Compression und Deduplication. Fragen? Einfach melden.

ZFS Compression und Deduplication: Konfiguration und Praxis

Compression

ZFS kann Daten transparent beim Schreiben komprimieren und beim Lesen dekomprimieren. Bei heutigen CPUs merkt man davon nichts — im Gegenteil: Weil weniger Daten auf die Platte geschrieben werden müssen, sinkt die I/O-Last und es wird oft sogar schneller. Man bekommt also mehr Platz und mehr Performance gleichzeitig.

Wichtig: Beim Aktivieren werden nicht rückwirkend alle Daten komprimiert. Nur neue Schreibvorgänge werden komprimiert abgelegt. Schaltet man Compression wieder ab, bleiben die komprimierten Daten lesbar — neue Daten werden unkomprimiert geschrieben.

Aktivieren:

zfs set compression=lz4 pool/dataset

LZ4 ist heute der empfohlene Algorithmus — schnell, niedriger CPU-Verbrauch, gutes Kompressionsverhältnis. Es ist seit OpenZFS 0.7 und FreeBSD 12 der Default bei compression=on. Alternativ gibt es gzip (Level 1–9, stärkere Kompression aber mehr CPU) und zstd (seit OpenZFS 2.0, guter Kompromiss zwischen gzip und lz4).

Für Daten, die bereits komprimiert sind (Videos, Bilder, Archive), bringt Compression nichts — ZFS erkennt das und legt solche Blöcke unkomprimiert ab. Für Logfiles, Konfigurationen, VMs und Datenbanken lohnt es sich fast immer.

Compression in der Praxis

Test mit einer frischen Betriebssystem-Installation auf zwei baugleichen Rechnern — einmal mit, einmal ohne Compression:

# Kompressionsverhältnis prüfen
zfs get compressratio rpool
NAME   PROPERTY       VALUE  SOURCE
rpool  compressratio  1.52x  -

# Plattenverbrauch mit Compression
zpool list
NAME    SIZE  ALLOC   FREE    CAP  HEALTH
rpool    74G  2,59G  71,4G     3%  ONLINE

# Plattenverbrauch ohne Compression
zpool list
NAME    SIZE  ALLOC   FREE    CAP  HEALTH
rpool    74G  3,93G  70,1G     5%  ONLINE

2,59 GB statt 3,93 GB — ein Drittel weniger Plattenverbrauch bei einer Standard-Installation. Die Installation dauerte mit Compression etwa 30 Sekunden länger.

Algorithmus-Wahl

Pro Dataset lässt sich der Algorithmus und Level anpassen:

# LZ4 — schnell, empfohlen für fast alles
zfs set compression=lz4 pool/data

# gzip-9 — maximale Kompression, mehr CPU
zfs set compression=gzip-9 pool/archiv

# zstd — seit OpenZFS 2.0, guter Kompromiss
zfs set compression=zstd pool/logs

# Prüfen
zfs get compression pool/data

Deduplication

Bei aktivierter Deduplication werden identische Blöcke nur einmal gespeichert. ZFS bildet für jeden Block eine SHA-256-Checksumme — existiert ein Block mit derselben Checksumme bereits, wird nur ein Verweis angelegt statt die Daten erneut zu schreiben.

Das spart Platz bei VMs (viele identische OS-Blöcke), Fileservern (dasselbe Dokument an verschiedenen Stellen) oder Versionierungs-Kopien. Aktivieren:

zfs set dedup=on pool/vms

Für zusätzliche Sicherheit gegen Hash-Kollisionen kann man einen Byte-für-Byte-Vergleich erzwingen:

zfs set dedup=sha256,verify pool/vms

Dedup-Warnung: RAM-Verbrauch

Deduplication frisst RAM. Die Dedup-Tabelle (DDT) muss im Arbeitsspeicher gehalten werden — pro Block ein Eintrag. Faustformel: ~320 Bytes pro Block, bei 128K-Blockgröße also ~2,5 GB RAM pro TB gespeicherter Daten. Passt die DDT nicht mehr in den RAM, wird sie auf die Platte ausgelagert und die Performance bricht dramatisch ein.

Ob sich Dedup lohnt, kann man vorher mit einem Trockenlauf prüfen — zdb -S pool zeigt das erwartete Dedup-Ratio ohne tatsächlich zu deduplizieren. In den meisten Fällen ist Compression allein die bessere Wahl: weniger Komplexität, kein RAM-Overhead, und der Platzvorteil ist oft vergleichbar.

Mehr zu ZFS: TRIM im ZFS-Pool aktivieren und Linux Mint mit verschlüsseltem ZFS Root Pool. Fragen? Einfach melden.

Solaris ipadm

Veraltet: OpenIndiana und Solaris werden kaum noch eingesetzt. Wer heute einen Unix-ähnlichen Server betreiben will, ist mit FreeBSD oder Linux besser bedient.

Der OpenSolaris fork Openindiana und die feste IP-Adresse (static IP-Adress)

Solaris war auf den ersten Blick noch nie so richtig einfach in Sachen IP-Adressen. Auf den zweiten Blick finde ich es aber logischer als bei allen anderen! Wie auch immer, die Meinungen gehen hier wohl auseinander.

Ab OpenSolaris dem SolarisExpress 11 also grob dem aktellen Solaris 11 hat sich etwas hinsichtlich des Netzwerkes geändert. Openindiana ist nun daraus hervorgegangen also muss man dieses hier auch beachten 🙂

So wie der Befehl ifconfig unter Linux von ip abgelöst wird, sieht es wohl unter Solaris mit ipadm aus!

Ich mache es einfach mal ganz kurz und schmerzlos:

Als erstes muss nwam (Network Auto-Magic) deaktiviert werden:

$ svcadm disable svc:/network/physical:nwam
$ svcadm enable svc:/network/physical:default

Dann listen wir uns mal kurz alle Netzwerkinterfaces auf:

$ ipadm show-if -o all
IFNAME     CLASS    STATE    ACTIVE CURRENT       PERSISTENT OVER
lo0        loopback ok       yes    -m46-v------  46--       --
net0       ip       ok       yes    bm46--------  ----       --

Schon können wir die feste IP 192.168.1.10 mit der Netmask 255.255.255.0 dem Interface net0 zuteilen:

$ ipadm create-addr -T static -a 192.168.1.10/24 net0/v4

Damit unsere IP-Pakete später den Weg ins „Internet“ finden benötigen wir noch die Defaultroute zum Router:

$ route -p add default 192.168.1.254

Jetzt noch schnell den System mitteilen wie es mit DNS Auflösungen umzugehen hat:

$ cp /etc/nsswitch.dns /etc/nsswitch.conf

Fehlen nur noch die zu fragenden Nameserver:

$ echo "nameserver 192.168.1.254" > /etc/resolve.conf
$ echo "nameserver 8.8.8.8" >> /etc/resolve.conf

Achtung, 8.8.8.8 ist google. Aber wem schreibe ich dieses und wer macht schon ungeprüftes Copy & Past?

Damit hat unsere Kiste also nun die IP Adresse: 192.168.1.10/24 fragt erst den DNS Server 192.168.1.254 und dann den DNS Server 8.8.8.8. Den Weg aus seinem eigenen Subnetz findet die Kiste über den Router 192.168.1.254

Noch Fragen?

ZFS Boot Environments: Sichere Updates unter Solaris/OpenIndiana

Boot Environments (BEs) sind eine der besten Funktionen von Solaris/OpenIndiana: Vor einem Update erstellt man einen Snapshot des laufenden Systems. Geht etwas schief, bootet man einfach die alte Umgebung — kein Rollback-Stress, kein Datenverlust. Das Ganze basiert auf ZFS-Snapshots und ist mit dem Befehl beadm in Sekunden erledigt.

Boot Environments anzeigen

beadm list
BE                                     Active Mountpoint Space  Policy Created
oi_151a2-Sebastians-geht-steil-Version NR     /          14,7G  static 2012-02-14 16:18
openindiana                            -      -          26,5M  static 2011-09-28 19:06
openindiana-1                          -      -          22,6M  static 2011-10-27 20:04

N bedeutet: aktuell gebootet. R bedeutet: wird beim nächsten Reboot gestartet. NR heißt beides. Die BEs erscheinen auch im GRUB-Bootmenü.

Neue Boot Environment erstellen und aktivieren

Vor einem Update — hier ein VirtualBox-Upgrade als Beispiel:

# Neue BE anlegen (Snapshot des aktuellen Systems)
beadm create Nach-Virtualbox-Update
Created successfully

# Beim nächsten Reboot diese BE starten
beadm activate Nach-Virtualbox-Update
Activated successfully

Updates in der neuen BE installieren

Das Besondere: Man kann die neue BE mounten und dort Pakete installieren oder deinstallieren — ohne das laufende System zu berühren. Der Ausfall beschränkt sich auf den Reboot.

# Neue BE mounten
beadm mount Nach-Virtualbox-Update /mnt
Mounted successfully on: '/mnt'

# Alte Version in der neuen BE deinstallieren
pkgrm -R /mnt SUNWvbox
Removal of  was successful.

# Neue Version in der neuen BE installieren
pkgadd -R /mnt -d VirtualBox-4.1.8-SunOS-r75467.pkg
Installation of  was successful.

# BE wieder aushängen
beadm unmount Nach-Virtualbox-Update
Unmounted successfully

Nach dem Reboot startet das System in der neuen BE mit der aktualisierten Software. Funktioniert alles? Fertig. Funktioniert etwas nicht? Im GRUB die alte BE auswählen und man ist sofort zurück auf dem vorherigen Stand.

GRUB-Bootmenü mit mehreren ZFS Boot Environments unter OpenIndiana.

Aufräumen

# Alte BE löschen (wenn nicht mehr gebraucht)
beadm destroy openindiana-1
Are you sure you want to destroy openindiana-1? [y|n] y
Destroyed successfully

Alte BEs belegen nur so viel Platz wie sich seitdem geändert hat — genau wie bei ZFS-Snapshots. Trotzdem lohnt es sich, nicht mehr benötigte BEs zu löschen.

Eine Warnung

Boot Environments machen nachlässig. Man gewöhnt sich daran, dass man alles zurückrollen kann — und hört irgendwann auf, sich den vorherigen Stand zu merken oder Konfigurationsdateien vorher zu sichern. Bis man dann an einem System ohne BEs sitzt und sich fragt, warum man keine Kopie gemacht hat.

Mehr zu ZFS: ZFS Snapshots und ZFS Pool erstellen. Unter FreeBSD gibt es mit bectl ein äquivalentes Tool. Fragen? Einfach melden.

Solaris USB unmount

Veraltet: OpenIndiana und Solaris werden kaum noch eingesetzt. Unter Linux: umount /dev/sdX, unter FreeBSD: umount /dev/daX.

Der OpenSolaris fork Openindiana und das USB mount Problem

Inzwischen ist man selbst als Unix Mensch verwöhnt von seinem GUI. Daher nerven kleinere Problemchen welche einen zwingen doch wieder die Konsole zu öffnen sehr….Openindiana unmount umount USB Stick So ging es mir mit allem was man so mal eben in die Kiste stopfen kann. Ob es nun ein USB-Stick, eine CD/DVD oder eine Wechselplatte ist. Sie wird sauber erkannt und automatisch eingebunden. Es gibt ein schönes Symbol auf dem Gnome Desktop und in dessen Dateiverwaltung. Selbst der Zugriff auf alles klappt tadellos. Aber wehe man möchte das Teil wieder los werden. Sobald man auf „Aushängen“ klickt, springt einem das System mit der GUI-Meldung an: cannot unmount volume Sehr nervig…. Konsole aufmachen, su, unmount….. Dass dieses ein Problem mit irgendeiner Berechtigung sein muss ist schnell klar, aber welcher? Google konnte mir schnell helfen. Das Problem besteht seit 147 bzw. Solaris Express, soll aber inzwischen gefixt sein. Ist es auch, nur taucht es inzwischen durch eine andere Änderung wieder auf. Das ganze ist bekannt und soll gelöst werden. Bisher gibt es einen Workaround. Einfach nachstehende Zeile in die folgende Datei packen:
/etc/logindevperm
/dev/vt/console_user    0620    /dev/console            # workaround for defect.opensolaris.org 12133
Einen einfachen Reboot später klappt dann alles mit dem unmount per GUI.

Solaris OpenOffice

Veraltet: OpenIndiana und Solaris werden kaum noch als Desktop eingesetzt. LibreOffice läuft unter Linux und FreeBSD problemlos.

OpenOffice Installation Setup OpenSolaris Solaris Openindiana

Der OpenSolaris fork Openindiana und OpenOffice

Ein Office Paket darf kaum auf einem Desktopsystem fehlen. In den ersten Versionen von OpenSolaris hat Sun (jetzt Oracle) sogar noch ihre kommerzielle Version StartOffice mitgeliefert. Das hat sich inzwischen sehr geändert. Von OpenOffice.org gibt es fertige Pakete für Solaris. Zwar bevorzuge ich LibreOffice, müsste dieses für Solaris nur selbst aus den Quellen bauen. Dafür fehlt mir die Zeit/Lust… Also OpenOffice.org… Dieses ist schnell in einer aktuellen Version inkl. Javainstaller von www.openoffice.org heruntergeladen. Nach dem entpacken
$ tar xczf OOo_3.3.0_Solaris_x86_install-wJRE_de.tar.gz
lässt sich die Installation schnell und einfach wie folgt starten:
$ cd OOO330_m20_native_packed-1_de.9567
$ ./setup
Der Rest ist dann sogar für jeden Windows-User selbsterklärend.

Solaris gpodder

Veraltet: OpenIndiana und Solaris werden kaum noch produktiv eingesetzt. gpodder läuft problemlos unter Linux und FreeBSD.

gPodder Solaris Openindiana Opensolaris MTPDer OpenSolaris fork Openindiana und gPodder

Ich nutze zur Verwaltung meiner abonnierten Podcasts schon seit langer Zeit gPodder. Es ist schlank klein, schnell und tut nur das was ich möchte Das soll unter Openindiana nun auch so sein. Zusätzlich möchte ich auch gerne die Podcasts auf meinen Creative ZEN mozaic per MTP schieben. Hier gibt es zwar ein kleines Problem, dieses konnte ich aber für mich mit einem (ganz ganz ganz ganz bösen) Workaround lösen, davon später mehr.

Um gpodder auf mein System zu bekommen sind zusätzlich noch folgende Python Erweiterungen nötig:

– feedparser (http://code.google.com/p/feedparser/downloads/list)
– mygpoclient (http://thp.io/2010/mygpoclient/)

Einfach herunterladen, auspacken:

$ gzcat feedparser-5.0.1.tar.gz | tar xvf -
$ gzcat mygpoclient-1.6.tar.gz | tar xvf -

Und dann ganz schnell als root installieren:

$ cd feedparser
$ python setup.py build
$ python setup.py install
$ cd ..
$ cd mygpoclien
$ python setup.py build
$ python setup.py install

Man man man…. Das ging ja noch. Jetzt also gpodder (http://gpodder.org/downloads.html). Nach dem Download entpacken und dann…

$ gzcat gpodder-2.19.tar.gz | tar xvf -
$ cd gpodder
$ python setup.py build

Immer wenn ich nun ein python setup.py install gestartet habe blieb er mit folgender Meldung hängen:

error: can't copy 'data/org.gpodder.service': doesn't exist or not a regular file

Ganz braun hat mir hie folgendes geholfen:

$ cd data
$ cp org.gpodder.service.in org.gpodder.service
$ cd ..
$ org.gpodder.service

Damit lässt sich gpodder auch schon starten und benutzen. Mir fehlt nur noch die Unterstützung von MTP (http://libmtp.sourceforge.net/) nach Download und Auspacken kommt der bekannte Dreisatz zum Tragen:

$ ./configure
$ make
$ make install

Fertig…

Fertig? Na ja fast!

$ mtp-detect

erkennt meinen Player. mtp-files listet die auf dem Player befindlichen Files auf und ein mtp-sendfile schiebt eine mp3 Datei sauber und abspielbar auf den MP3-Player. Wenn ich nun im gpodder unter: Preferences ==> Devices ==> Device type: MTP einstelle. Kann ich mit der rechten Maustaste Podcasts an meinen MP3-Player senden. Diese kommen dort wirklich an und sind in der Liste auswählbar. Ich bekomme nur im MP3-Player die Meldung: „Problem bei der Audiowiedergabe“ das File wieder übersprungen und Ende. So habe ich mir das nicht vorgestellt :-/ Vor allem lassen sich Dateien abspielen, welche ich von Hand auf der Konsole per mtp-sendfile herüberschiebe. Daher müsste es doch auch über den gpodder funktionieren, oder?

Beim Auflisten der Files vom MP3-Player ist mir aber etwas spannendes aufgefallen:

$ mtp-files

File ID: 18655
Filename: 1LIVE - Comedy_ Dennis ruft an_ ANUGA (10.10.2011).mp3
File size 964156 (0x00000000000EB63C) bytes
Parent ID: 96
Storage ID: 0x00010001
Filetype: RIFF WAVE file

File ID: 8214
Filename: pofacs#093 - Commodores Homecomputer.mp3
File size 98408576 (0x0000000005DD9880) bytes
Parent ID: 96
Storage ID: 0x00010001
Filetype: ISO MPEG-1 Audio Layer 3

AHA… Der funktionsfähige, von Hand angeschobene, Podcast hat den Filetype: ISO MPEG-1 Audio Layer 3

Dieses ist für ein MP3-File auffallend korrekt. Der vom gpodder hochgeschobene Podcast hat den Filetype: RIFF WAVE file. Das kann ja nicht klappen.

Ich tippe nun mal dass es irgendwo im gpodder auf meiner Solaris Kiste ein Problem damit gibt den Filetype richtig zu erkennen oder zu setzten (Vermutung halt)… Ich habe den Quelltext nun einmal hoch und runter gescrollt aber nichts gefunden (ich bin halt kein Programmierer)…. Ich habe nur eine Liste von Filetypen gefunden mit dem Hinweiss das diese immer syncron mit den Einträgen aus der libmtp.h sein müssen.

Daher habe ich mir mal die libtmp.h.in angeschaut. Hier finden sich diese Filetypen wieder. Was soll ich sagen? An erster Stelle steht jeweils WAV… Nun zu meinem bösen Versuch (bitte nicht schimpfen) ich habe einfach den ersten Eintrag:

LIBMTP_FILETYPE_WAV,

ausgetauscht gegen:

LIBMTP_FILETYPE_MP3,

Weiter unten habe ich dann MP3 gegen WAV getauscht. Nun einfach libmtp neu übersetzen und, ja es funktioniert. Zumindest mit MP3 Files.

Bei Zeiten müsste ich mich hier wohl mal eingehender beschäftigen oder mal einen Bug aufmachen, das Problem könnte auch hausgemacht sein. Bei Zeiten…..

Solaris Virtualbox

Veraltet: OpenIndiana und Solaris werden kaum noch eingesetzt. VirtualBox läuft unter FreeBSD und Linux problemlos.

Solaris Virtualbox

Der OpenSolaris fork Openindiana und VirtualBox

Nicht nur das die modernen Systeme inzwischen meist genug Leistung haben um zu einem Hostsystem noch ein weiteres oder mehrere zu „Emulieren“ nein, man kann es auch ganz gut gebrauchen. Bedingt durch meine Arbeit bin ich leider an vielen Stellen auf Produkte von Microsoft angewiesen. Zusätzlich ist es ganz praktisch für Schulungen oder Vorträge immer ein dazu passendes, sauberes und funktionsfähiges System aus dem Glas holen zu können. Natürlich ist es auch mehr als praktisch wenn man Experimente nicht immer in seinem echten System fahren muss. Ich setzte hier derzeit auf VirtualBox, da dieses die für mich wichtigsten Plattformen abdeckt und ich so die VMs einfach von hier nach da schieben und nutzen kann. Das darf natürlich auf meinem Solaris Desktop nicht fehlen! Bei Oracle gibt es fertige Pakete für Solaris. Ein solches ist schnell heruntergeladen und entpackt sich fast von alleine:
$ tar xvzf VirtualBox-4.1.2-73507-SunOS.tar.gz
Die Installation stellt einen auch nicht weiter vor große Probleme:
$ cd VirtualBox-4.1.2-73507-SunOS
$ pkgadd -d VirtualBox-4.1.2-SunOS-r73507.pkg
Damit ist Virtualbox schon nutzbar und fertig installiert. Man sollte nun aber nicht vergessen seinen User mit in die Gruppe vboxuser zu packen, sonst gibt es so lustige Fehlermeldungen beim Versuch an USB Geräte zu kommen:
Could not load the Host USB Proxy service (VERR_ACCESS_DENIED).
Details:
Result Code: NS_ERROR_FAILURE (0x00004005)
Component: Host
Interface: IHost {f460cbfc-2332-4fa6-899e-45ded6b3242342}
Callee: IMachine {99404fe0-2310-40d3-889b-dd2f79e7365e}
USB 2.0 und noch etwas mehr Lulu bekommt man über das Oracle VM VirtualBox Extension Pack. Hier sollte man sich aber (wie bei allen Dingen) die Lizenzbestimmungen durchlesen.

Solaris NFS

Veraltet: OpenIndiana und Solaris werden kaum noch eingesetzt. NFS funktioniert unter FreeBSD und Linux identisch und ist dort besser dokumentiert.

Der OpenSolaris fork Openindiana und NFS zu Linux

Es gibt leider ein kleines Problem zwischen den Lizenzen unter welchen Linux und Opensolaris herausgegeben werden. Diese sind nämlich inkompatibel. Das bedeutet man kann nicht einfach Code welcher unter der CDDL erstellt wurde in den GPL Linux Kernel packen und umgekehrt. Dieses merkt man, wie ich, sehr schnell beim einfachen Versuche seine lang genutzte externe ext4 formatierte USB Festplatte in mein Opensolaris zu mounten….. Es gibt zwar Mittel und Wege sein ext2 / ext3 read only zu mounten aber bei ext4 ist hängen im Schacht :-/ In Zeiten von GB-Netzwerken geht das ja bei kleineren Datenmengen dank NFS noch. Solaris Linux NFS mount Pahhh da boote ich ganz cool meine Linux-Schüssel, hänge die USB-Platte ein und passe meine exports für einen ganz einfachen und schnellen Share an:
$ cat /etc/exports
/festpladde (ro)
Dann noch schnell dem NFS Server auf der Linuxschüssel sagen das er die exports neu einliest:
$ exportfs -ra
Und noch mal gegenchecken ob der Export auch sauber in der Liste steht:
$ showmount -e
/festpladde *
Perfekt nun sollte jeder Rechner einfach die Daten mounten können, denke ich! Auf meinem Solaris gebe ich schnell in der Konsole den mount Befehl ein und:
$ mount 192.168.1.88:/festpladde /mnt
No such file or directory
No such file or directory????? Ich prüfe alle Einstellungen noch 3 mal nach…. Alles richtig! Alles richtig? Ja im groben schon. Solaris versucht die Linux Kiste per NFSv4 anzusprechen. Dieses unterstützen zwar beide Maschinen, es kann denn noch Probleme damit geben. Schaltet man aber bewusst auf NFSv3 zurück klappt es (darauf soll mal einer kommen.).
$ mount -o vers=3 192.168.1.88:/festpladde /mnt
Ganz blöde Falle, oder? Hat man häufiger Datenaustausch per NFS zu Linux Maschinen könnte man Solaris dazu bringen per default immer NFSv3 zu nutzen:
$ sharectl set -p client_versmax=3 nfs
Will man es später ändern reicht es natürlich die 3 gegen eine 4 zu ersetzten, schlau was?

Fragen? Einfach melden.

Greylisting mit Postfix und Postgrey einrichten

Greylisting ist ein einfacher Trick gegen Spam: Beim ersten Zustellversuch lehnt der Mailserver die Mail mit einem temporären Fehler ab (4xx). Ein regulärer Mailserver versucht es nach ein paar Minuten erneut und die Mail wird zugestellt. Spam-Botnets dagegen arbeiten nach dem „fire and forget“ Prinzip. Die probieren es kein zweites Mal, weil sie in der Zeit lieber den nächsten Empfänger anschreiben. Damit lassen sich 80 bis 90 Prozent der Botnet-Zustellungen abfangen, ohne eine einzige Mail filtern zu müssen.

Wie es funktioniert

Postgrey speichert bei jedem Zustellversuch ein Triplet aus Absender-Adresse, Empfänger-Adresse und Client-IP. Beim ersten Versuch wird die Mail abgelehnt. Kommt derselbe Server nach Ablauf der Wartezeit (Standard: 5 Minuten) nochmal, wird die Mail durchgelassen. Bekannte Triplets werden 35 Tage gespeichert, danach lernt Postgrey den sendenden Server automatisch und lässt ihn ohne Verzögerung durch (Auto-Whitelist).

Installation

# Debian/Ubuntu
apt-get install postgrey

# FreeBSD
pkg install postgrey

Nach der Installation lauscht Postgrey auf 127.0.0.1:10023 (Debian) bzw. 127.0.0.1:10030 (FreeBSD, je nach Config). Prüfen mit ss -tlnp | grep postgrey oder sockstat -4l | grep postgrey.

Postfix-Integration

In der main.cf den Postgrey-Check in die smtpd_recipient_restrictions einfügen, nach den Authentifizierungs-Checks und vor den RBL-Checks:

smtpd_recipient_restrictions =
    permit_mynetworks,
    permit_sasl_authenticated,
    reject_unauth_destination,
    check_policy_service inet:127.0.0.1:10023,
    reject_rbl_client zen.spamhaus.org,
    reject_rbl_client bl.spamcop.net

Nach einem postfix reload ist Greylisting aktiv.

Im Log

Beim ersten Versuch wird die Mail abgelehnt:

postgrey: action=greylist, reason=new, client_name=mail.example.de, sender=user@example.de
postfix/smtpd: NOQUEUE: reject: 450 4.2.0 Recipient address rejected: Greylisted

Beim zweiten Versuch (nach Ablauf der Wartezeit) wird durchgelassen:

postgrey: action=pass, reason=triplet found, delay=355, client_name=mail.example.de

Bekannte Server werden automatisch durchgelassen:

postgrey: action=pass, reason=client AWL, client_name=mail.example.de

Limitationen

Greylisting verzögert die erste Mail von jedem neuen Absender um einige Minuten. Für zeitkritische Mails (Passwort-Resets, Zwei-Faktor-Codes) kann das ein Problem sein. Postgrey führt deshalb eine Whitelist mit bekannten großen Providern (/etc/postgrey/whitelist_clients), die nie verzögert werden.

Inzwischen setzt auch rspamd Greylisting um, als Teil seines Score-basierten Ansatzes. Dort wird nur gegrey­listet wenn der Spam-Score in einem Graubereich liegt. Mails die eindeutig Spam oder eindeutig sauber sind, werden sofort abgelehnt oder zugestellt. Fragen? Einfach melden.

Neuere Beiträge »

© 2026 -=Kernel-Error=-RSS

Theme von Anders NorénHoch ↑