Oracle Solaris Administration Cheat Sheet

Solaris 11.4 · Hinweise zu Solaris 10 · SPARC / x86
Keine Treffer – Suchbegriff anpassen.

💻System- & Hardware-Informationen

uname -aAlles auf einmal: OS, Hostname, Release, Version, Architektur
uname -r / uname -vRelease 5.11 bzw. Version 11.4 (S10: 5.10 / Generic_150400-xx)
uname -p / uname -i / uname -mProzessorarchitektur (sparc/i386), Plattform, Hardwareklasse
cat /etc/releaseGenauer OS-Stand, z. B. Oracle Solaris 11.4.42.111.0
pkg info entireSolaris 11: exakte SRU-/Build-Version des Systems
pkg list entireKurzform mit FMRI der installierten Support-Repository-Update
showrev -pInstallierte Patches (nur Solaris 10, in 11 durch pkg ersetzt)
showrev -aKompletter Systemsteckbrief inkl. Hostid, Kernel, Netz (Solaris 10)
prtconfGerätebaum und Speichergröße (Memory size: in der ersten Zeile)
prtconf -v | moreGerätebaum mit allen Properties (WWN, Modelle, Treiber)
prtconf -DGerätebaum mit zugehörigem Treibernamen je Knoten
prtdiag -vKonfiguration und Fehlerstatus der Hardware (CPU, DIMM, PSU, FRU)
psrinfoAlle Strands/vCPUs mit Status on-line/off-line
psrinfo -vpPhysische Sockets, Cores, Threads und Taktfrequenz – wichtigster CPU-Check
psrinfo -tNur die Anzahl der Prozessoren (skriptfreundlich)
isainfo -kvKernel-Bitbreite und Instruktionssatz-Erweiterungen
isainfo -bNur 64 oder 32 – Kernel-Bits
sysdef | moreKernel-Konfiguration, Module, Tunables, Pseudo-Devices
hostidHexadezimale Host-ID (Lizenzbindung, Cluster-Identifikation)
hostname / nodenameHostname (in 11 über svc:/system/identity:node gesetzt)
svccfg -s identity:node setprop config/nodename = astring: sol01Hostname in Solaris 11 dauerhaft ändern, danach svcadm refresh/restart
kstat -p unix:0:system_misc:boot_timeBootzeitpunkt als Unix-Timestamp aus dem Kernel
kstat -m cpu_info -s brandCPU-Bezeichnung je Strand aus dem Kernel-Statistik-Framework
kstat -p zfs:0:arcstats:sizeAktuelle Größe des ZFS-ARC in Bytes
virtinfo / virtinfo -aSolaris 11: Läuft das System nativ, als LDom, Kernel Zone oder Zone?
eepromAlle OBP-/NVRAM-Variablen aus dem laufenden System lesen
eeprom boot-deviceEinzelne OBP-Variable abfragen (SPARC)
date; uptime; who -bZeit, Laufzeit, Load Average, letzter Boot
iostat -EnAlle Platten mit Hersteller, Serie, Größe und Fehlerzählern
cfgadm -alAlle Attachment Points (Controller, Platten, PCI, USB) mit Status
fmadm faultyAktive Hardware-/Software-Diagnosen der Fault Management Architecture
format < /dev/nullPlattenliste anzeigen, ohne in das interaktive Menü zu gehen
diskinfoSolaris 11: kompakte Plattenliste mit Typ, Größe und Chassis-Position
croinfoSolaris 11: Chassis/Receptacle/Occupant-Zuordnung der Datenträger
smbios -t SMB_TYPE_SYSTEMx86: Hersteller, Modell, Seriennummer, UUID aus dem BIOS
Praxis: Ist-Zustand vor jedem Change sichern: prtdiag -v > /var/tmp/prtdiag_$(date +%F).txt, dazu pkg info entire, zpool status, ipadm show-addr und svcs -xv ablegen.
Version erkennen: uname -r liefert bei Solaris 10 und 11 jeweils 5.10/5.11. Verlässlich ist cat /etc/release; existiert /usr/bin/pkg und beadm, ist es Solaris 11.

⏻Boot, OBP/GRUB & Boot Environments

Herunterfahren & Neustarten

shutdown -y -g0 -i6Sofortiger Reboot ohne Wartezeit (-i5 = ausschalten, -i0 = OBP)
shutdown -y -g300 -i5 "Wartung"In 5 Minuten herunterfahren mit Meldung an alle User
init 6 / init 0 / init 5Reboot / Stop (SPARC: ok>-Prompt) / Power off
init s / init 1Single-User-Modus (entspricht Milestone single-user)
rebootSchneller Reboot ohne saubere rc-Skripte – nur wenn bewusst gewollt
reboot -- -sReboot direkt in den Single-User-Modus
reboot -pReboot über die Plattform-Firmware (Fast Reboot umgehen)
reboot -fFast Reboot erzwingen (Kernel lädt Kernel, ohne POST)
halt / poweroffHart anhalten bzw. ausschalten (keine Dienste-Abmeldung)
who -rAktuellen Runlevel anzeigen
svcs -a | grep milestoneErreichte Milestones (Solaris-11-Äquivalent zu Runleveln)
svcadm milestone svc:/milestone/multi-user-server:defaultZielzustand temporär setzen (-d = dauerhaft als Default)
svcadm milestone noneAlle Dienste außer dem SMF-Kern stoppen (Notfall-Analyse)

SPARC: OpenBoot PROM (OBP)

Stop-A bzw. ~# / #. an der KonsoleIn den ok>-Prompt wechseln (ALOM/ILOM: break)
ok> bannerModell, Firmware-Version, RAM, Ethernet-Adresse, Host-ID
ok> printenvAlle NVRAM-Variablen mit aktuellem und Default-Wert
ok> printenv boot-deviceKonfigurierte Bootreihenfolge anzeigen
ok> setenv boot-device disk1 disk0Bootreihenfolge setzen (Reihenfolge = Priorität)
ok> setenv auto-boot? falseAutomatischen Boot abschalten (Wartung)
ok> devaliasAlle Geräte-Aliase (disk0, net0, rootmirror…)
ok> nvalias rootmirror /pci@0/…/disk@1Eigenen, reboot-festen Alias anlegen (nvunalias entfernt ihn)
ok> show-disksInteraktive Liste der Plattenpfade zum Kopieren
ok> probe-scsi-allAlle SCSI-/SAS-Geräte scannen (nur bei gestopptem OS!)
ok> bootNormaler Boot von boot-device
ok> boot -sBoot in den Single-User-Modus
ok> boot -rReconfiguration Boot – neue Hardware wird eingelesen
ok> boot -m verboseAusführliche SMF-Meldungen beim Start (Fehlersuche)
ok> boot net - installNetzinstallation über Automated Installer / JumpStart
ok> boot cdrom -sVon Medium in den Single-User-Modus (Rettungsboot)
ok> boot -LListe der Boot Environments zur Auswahl anzeigen (ZFS-Root)
ok> boot -Z rpool/ROOT/solaris-1Gezielt ein bestimmtes Boot Environment starten
ok> reset-allFirmware neu initialisieren (nach setenv empfohlen)

x86: GRUB2 & bootadm

bootadm list-menuAlle Boot-Einträge mit Default und Timeout (ab Solaris 11.1 GRUB2)
bootadm change-entry -i 2 defaultDefault-Boot-Eintrag umstellen
bootadm set-menu timeout=10GRUB-Timeout setzen
bootadm update-archiveBoot-Archiv neu erzeugen (Pflicht nach Treiber-/Kerneleingriff)
bootadm update-archive -R /aBoot-Archiv eines gemounteten Alt-Systems reparieren
bootadm install-bootloaderBootloader neu schreiben (x86 GRUB2 bzw. SPARC bootblk)
bootadm install-bootloader -P rpoolAuf alle Platten eines gespiegelten Root-Pools schreiben
/rpool/boot/grub/menu.confVon bootadm verwaltete GRUB2-Konfiguration – nicht direkt editieren
e am GRUB-Eintrag, dann -s in der kernel-ZeileEinmalig in den Single-User-Modus booten

Boot Environments (beadm)

beadm listAlle BEs mit Aktiv-Flag (N=now, R=reboot), Größe, Datum
beadm list -aZusätzlich Datasets, Snapshots und Mountpoints
beadm create solaris-vor-sruKlon des laufenden BE anlegen – der sichere Rollback vor Updates
beadm create -e solaris solaris-testNeues BE aus einem anderen BE erzeugen
beadm activate solaris-vor-sruBE als Default für den nächsten Boot markieren
beadm mount solaris-vor-sru /mntBE im laufenden System mounten (Dateien vergleichen/retten)
beadm unmount solaris-vor-sruBE wieder aushängen
beadm rename alt neuBE umbenennen
beadm destroy -F solaris-testBE samt Snapshots löschen (-F ohne Rückfrage)
zfs list -r rpool/ROOTBEs auf ZFS-Ebene: jedes BE ist ein Dataset unter rpool/ROOT
Goldene Regel für Updates: Vor jedem pkg update ein Boot Environment anlegen. Geht etwas schief, reicht beadm activate <alt> plus Reboot – kein Restore, kein Bandlaufwerk, Minuten statt Stunden.
Reihenfolge merken: beadm activate wirkt erst beim nächsten Boot (Spalte R in beadm list). Der laufende Kernel bleibt unverändert.

🛠SMF – Service Management Facility

Status abfragen

svcsAlle aktivierten Service-Instanzen mit Status und Startzeit
svcs -aWirklich alle Instanzen, auch disabled
svcs -xvNur Probleme, mit Ursache, Logpfad und blockierender Abhängigkeit – erster Griff bei Störungen
svcs -x -v svc:/network/ssh:defaultErklärung zu genau einer Instanz
svcs -l sshLangformat: FMRI, Zustand, Restarter, Contract-ID, alle Dependencies
svcs -p sshZum Service gehörende Prozesse mit PID
svcs -d sshDienste, von denen ssh abhängt (Dependencies)
svcs -D nfs/serverDienste, die von nfs/server abhängen (Dependents)
svcs -H -o state,fmri "*apache*"Ohne Kopfzeile, eigene Spalten – skriptfreundlich
svcs -o fmri,state,stime -a | grep maintenanceAlle Dienste im Zustand maintenance finden
svcs -L sshPfad der Logdatei der Instanz ausgeben
svcs -Lv ssh | tail -40Logdatei direkt anzeigen (Kurzform zu tail /var/svc/log/…)

Dienste steuern

svcadm enable sshDienst dauerhaft aktivieren und starten
svcadm enable -t sshNur temporär bis zum Reboot aktivieren
svcadm enable -r nfs/serverRekursiv: alle fehlenden Abhängigkeiten mit aktivieren
svcadm enable -s sshSynchron warten, bis der Dienst online ist
svcadm disable sshDienst dauerhaft deaktivieren und stoppen
svcadm restart sshDienst neu starten (Prozess wird beendet und gestartet)
svcadm refresh sshKonfiguration neu einlesen, ohne den Dienst zu stoppen
svcadm mark maintenance apache24Dienst bewusst außer Betrieb setzen (z. B. für Wartung)
svcadm mark -I degraded apache24Zustand nur für die laufende Instanz markieren
svcadm clear apache24Nach behobenem Fehler aus maintenance herausholen
svcadm disable -s apache24; svcadm enable -s apache24Sauberer Kaltstart eines hängenden Dienstes

Konfiguration: svccfg & svcprop

svcprop -p config sshAlle Properties der Gruppe config lesen
svcprop -p start/exec apache24Konkretes Startkommando eines Dienstes anzeigen
svccfg -s ssh listpropKomplette Property-Liste einer Instanz
svccfg -s ssh listprop 'config/*'Nur eine Property-Gruppe filtern
svccfg -s site/myapp setprop config/logdir = astring: /var/log/myappProperty setzen (Typ mit angeben)
svccfg -s site/myapp refreshGeänderte Properties ins laufende Repository übernehmen
svccfg -s site/myapp delprop config/logdirProperty wieder entfernen
svccfg export ssh > /var/tmp/ssh.xmlManifest einer Instanz exportieren (Backup vor Änderungen)
svccfg import /var/tmp/myapp.xmlManifest importieren bzw. aktualisieren
svccfg delete site/myappService komplett aus dem SMF-Repository entfernen
svccfg validate /var/tmp/myapp.xmlManifest gegen das DTD prüfen, ohne zu importieren
svcadm restart manifest-importNeue Manifeste aus den Standardverzeichnissen einlesen

Dateien & Legacy

/var/svc/log/<fmri>.logLogdatei je Service – enthält Start-/Stop-Ausgaben und Fehler
/var/svc/log/svc.startd.logProtokoll des Master-Restarters (Abhängigkeiten, Timeouts)
/lib/svc/manifest/Solaris 11: von Paketen gelieferte Manifeste
/var/svc/manifest/Solaris 10: Manifest-Verzeichnis (in 11 für Eigenbau/Site)
/lib/svc/method/Start-/Stop-Methodenskripte der Dienste
svcs -a | grep lrc:Legacy-Run-Control-Skripte aus /etc/rc*.d (nicht von SMF gesteuert)
inetadmAlle von inetd verwalteten Dienste mit Status
inetadm -l telnetAlle Properties eines inetd-Dienstes anzeigen
inetadm -m telnet tcp_wrappers=TRUEProperty eines inetd-Dienstes ändern
inetadm -e / -d ftpinetd-Dienst aktivieren / deaktivieren
Anti-Pattern: Startskripte in /lib/svc/method nicht manuell aufrufen. SMF glaubt dann, der Dienst sei aus, und der Restarter greift nicht. Immer über svcadm arbeiten und Fehler mit svcs -xv diagnostizieren.
maintenance vs. offline: maintenance = der Dienst selbst ist gescheitert (Log lesen, dann svcadm clear). offline = eine Abhängigkeit ist nicht erfüllt – dann mit svcs -d die Ursache suchen, nicht den Dienst.

📦Software: IPS (pkg) & SVR4 (Solaris 10)

Abfragen

pkg listAlle installierten Pakete mit Version und Status
pkg list -a "*apache*"Verfügbare Pakete im Repository suchen
pkg list -af entireAlle Versionen (auch ältere) eines Pakets auflisten
pkg list -uNur Pakete, für die ein Update vorliegt
pkg info bashDetails zum installierten Paket (Version, Größe, Publisher, FMRI)
pkg info -r apache-24Details eines noch nicht installierten Pakets aus dem Repo
pkg search -l /usr/bin/vmstatWelches installierte Paket liefert diese Datei?
pkg search -r /usr/sbin/dtraceSuche im Remote-Repository nach einer Datei
pkg contents -m bashKomplettes Manifest eines Pakets (Actions, Dateien, Abhängigkeiten)
pkg contents -H -o path bashNur die Dateiliste eines Pakets
pkg contents -t depend -o fmri entireAbhängigkeiten eines Pakets anzeigen
pkg verifyKonsistenzprüfung aller Pakete (Rechte, Checksummen, fehlende Dateien)
pkg verify -v bashEinzelnes Paket detailliert prüfen
pkg fix bashGefundene Abweichungen aus dem Repository reparieren
pkg historyAlle Paketoperationen mit Datum, Ergebnis und User
pkg history -l -t 2026-08-18T00:00:00Langformat ab Zeitpunkt inkl. verwendeter Kommandozeile

Installieren & Updaten

pkg install nmapPaket installieren (Abhängigkeiten automatisch)
pkg install -nv nmapTestlauf (Dry-Run) mit ausführlicher Planung – nichts wird geändert
pkg install --accept solaris-desktopLizenzen automatisch akzeptieren (Group-Pakete)
pkg uninstall nmapPaket entfernen
pkg updateKomplettes System auf den aktuellen SRU-Stand bringen
pkg update -nvUpdate planen und anzeigen, ohne es auszuführen – immer zuerst!
pkg update --be-name s11.4-sru42Update in ein neues, sprechend benanntes Boot Environment
pkg update --require-new-beUpdate erzwingt ein neues BE (Rollback bleibt möglich)
pkg update --no-be-activateNeues BE anlegen, aber noch nicht für den Boot aktivieren
pkg update entire@11.4-11.4.42.0.0.111.0Gezielt auf einen definierten SRU-Stand aktualisieren
pkg update pkg:/network/sshNur ein einzelnes Paket aktualisieren
pkg avoid pkg:/paket / pkg unavoidPaket von automatischer Installation ausnehmen bzw. wieder zulassen
pkg freeze -c "Change 4711" bash / pkg unfreeze bashVersion einfrieren, damit Updates sie nicht anfassen
pkg mediator -aAlternativen (z. B. Java-, Python-, mysql-Version) anzeigen
pkg set-mediator -V 11 javaStandardversion einer Alternative festlegen
pkg rebuild-indexSuchindex neu bauen (wenn pkg search nichts findet)

Publisher & Repositories

pkg publisherKonfigurierte Publisher mit Origin-URI und Reihenfolge
pkg publisher solarisDetails eines Publishers inkl. Zertifikate und Proxy
pkg set-publisher -G '*' -g http://ips.intern/solaris/ solarisAlle alten Origins entfernen und einen neuen setzen
pkg set-publisher -g file:///mnt/repo solarisLokales Repository (ISO/Verzeichnis) als Quelle nutzen
pkg set-publisher --search-first solarisSuchreihenfolge der Publisher ändern
pkg unset-publisher extraPublisher entfernen
pkg refresh --fullPublisher-Metadaten komplett neu laden
pkgrepo info -s /export/repoInhalt und Paketanzahl eines lokalen Repositories
pkgrepo list -s /export/repo 'entire*'Enthaltene Versionen eines Pakets im Repo
pkgrepo verify -s /export/repoRepository auf Integrität prüfen
pkgrepo rebuild -s /export/repoRepository-Katalog und Suchindex neu erzeugen
pkgrecv -s http://pkg.oracle.com/… -d /export/repo '*'Repository spiegeln bzw. einzelne Pakete herunterladen
pkgrecv -s /export/repo -d /var/tmp --raw pkg:/bashPaket als Rohmanifest extrahieren (Analyse)
svcadm enable application/pkg/serverLokalen IPS-Repository-Server bereitstellen (Port 80/tcp)

Solaris 10: SVR4-Pakete & Patches

pkginfo | wc -lInstallierte SVR4-Pakete zählen (nur Solaris 10)
pkginfo -l SUNWcsuDetails eines SVR4-Pakets (nur Solaris 10)
pkgchk -l -p /usr/bin/vmstatZu welchem Paket gehört die Datei? (nur Solaris 10)
pkgadd -d /var/spool/pkg SUNWxyzPaket aus Verzeichnis installieren (nur Solaris 10)
pkgadd -d ./paket.pkg allAlle Pakete eines Datastreams installieren (nur Solaris 10)
pkgrm SUNWxyzPaket entfernen (nur Solaris 10)
showrev -p | grep 148888Prüfen, ob ein Patch installiert ist (nur Solaris 10)
patchadd -pAlle installierten Patches auflisten (nur Solaris 10)
patchadd /var/tmp/148888-03Patch einspielen (nur Solaris 10)
patchadd -M /var/tmp patchlistMehrere Patches aus Liste einspielen (nur Solaris 10)
patchrm 148888-03Patch zurücknehmen (nur Solaris 10)
smpatch analyze / smpatch updatePatch-Empfehlungen ermitteln und einspielen (nur Solaris 10)
/var/sadm/pkg/ und /var/sadm/patch/Paket- bzw. Patch-Datenbank von Solaris 10
Update-Standardablauf 11.4: pkg publisher prüfen → pkg update -nv → beadm create (bzw. pkg update --be-name) → pkg update → Reboot → pkg info entire und svcs -xv kontrollieren.
Merke: pkg update legt bei Kernel-relevanten Änderungen automatisch ein neues BE an. Wird die Aktion „im laufenden System“ ausgeführt, gibt es keinen Rollback – deshalb bei größeren Updates --require-new-be verwenden.

🗃ZFS – Storage Pools (zpool)

Status & Übersicht

zpool listAlle Pools mit Größe, Alloc, Free, Fragmentierung, CAP, HEALTH
zpool list -vZusätzlich alle vdevs eines Pools
zpool statusZustand aller Pools mit Redundanz, Fehlerzählern und Hinweisen
zpool status -v rpoolDetailliert, inkl. Liste beschädigter Dateien
zpool status -xNur Pools mit Problemen – ideal für Monitoring-Skripte
zpool status -D tankDedup-Statistik des Pools (DDT-Größe beachten)
zpool iostat 2I/O-Statistik je Pool im 2-Sekunden-Takt
zpool iostat -v tank 5I/O aufgeschlüsselt nach vdev und Einzelplatte
zpool historyAlle ändernden Kommandos, die je auf dem Pool liefen
zpool history -il tankInklusive interner Ereignisse, mit User und Hostname
zpool get all rpoolAlle Pool-Properties (autoexpand, version, failmode…)
zpool set autoexpand=on tankPool wächst automatisch mit, wenn LUNs vergrößert werden
zpool set failmode=continue tankVerhalten bei Totalausfall (wait/continue/panic)
zpool upgrade -vVerfügbare Pool-Versionen mit Feature-Liste
zpool upgrade tankPool auf aktuelle Version heben (danach kein Zugriff mit älterem OS!)

Pools anlegen & erweitern

zpool create tank mirror c0t1d0 c0t2d0Mirror-Pool aus zwei Platten
zpool create tank mirror c1t0d0 c1t1d0 mirror c1t2d0 c1t3d0Zwei Mirror-vdevs (Striping darüber) – typischer DB-Layout
zpool create tank raidz c1t0d0 c1t1d0 c1t2d0RAIDZ1 (einfache Parität)
zpool create tank raidz2 c1t0d0 c1t1d0 c1t2d0 c1t3d0RAIDZ2 (doppelte Parität, Standard für große Platten)
zpool create -n tank mirror c0t1d0 c0t2d0Testlauf: geplantes Layout anzeigen, nichts anlegen
zpool create -o autoexpand=on -O compression=lz4 tank …Pool- (-o) und Dataset-Properties (-O) direkt setzen
zpool add tank mirror c1t4d0 c1t5d0Pool um ein weiteres vdev erweitern (Kapazität wächst)
zpool attach tank c0t1d0 c0t3d0Platte an bestehende hängen → Mirror wird gebildet (Resilver)
zpool detach tank c0t3d0Spiegelhälfte aus dem Mirror herauslösen
zpool add tank spare c1t9d0Hot Spare hinzufügen (greift bei Plattenausfall automatisch)
zpool add tank log mirror c2t0d0 c2t1d0Separates ZIL (SLOG) für synchrone Schreibvorgänge
zpool add tank cache c2t2d0L2ARC-Cache-Device (Lese-Cache auf SSD)
zpool remove tank c1t9d0Spare, Cache oder Log-Device entfernen
zpool split tank tank_kopieMirror aufteilen und aus einer Hälfte einen neuen Pool erzeugen

Fehlerbehandlung & Wartung

zpool scrub tankAlle Blöcke lesen und gegen Checksummen prüfen (online möglich)
zpool scrub -s tankLaufenden Scrub abbrechen
zpool clear tankFehlerzähler zurücksetzen, nachdem die Ursache behoben ist
zpool clear tank c1t2d0Nur eine Platte wieder in Betrieb nehmen
zpool offline tank c1t2d0Platte kontrolliert aus dem Pool nehmen (vor Tausch)
zpool online tank c1t2d0Platte wieder aufnehmen, Resilver startet automatisch
zpool online -e tank c1t2d0Vergrößerte LUN erkennen, wenn autoexpand=off ist
zpool replace tank c1t2d0Platte an gleicher Position ersetzen (nach Hot-Swap)
zpool replace tank c1t2d0 c1t8d0Defekte Platte durch eine andere ersetzen
zpool labelclear -f /dev/rdsk/c1t8d0s0Alte ZFS-Labels von einer Platte entfernen

Import & Export

zpool export tankPool sauber abmelden (vor Umzug auf anderen Server)
zpool importImportierbare Pools suchen und anzeigen
zpool import -d /dev/dskIn einem bestimmten Verzeichnis nach Pools suchen
zpool import tankPool importieren
zpool import -f tankImport erzwingen, wenn der Pool auf einem anderen Host aktiv war
zpool import tank tank_altPool unter neuem Namen importieren (Namenskonflikt vermeiden)
zpool import -R /a rpoolMit alternativem Root importieren – Rettung von außen
zpool import -N tankImportieren, aber Dateisysteme nicht mounten
zpool import -D tankBereits zerstörten Pool wiederherstellen (wenn Labels intakt)
zpool import -f: Das Flag übergeht die Hostid-Sperre. Ist der Pool noch auf dem anderen Knoten aktiv, droht Datenkorruption. Erst zweifelsfrei prüfen, dass der Fremdhost aus ist bzw. den Pool nicht mehr hält.
Routine: zpool status -x täglich per Cron, zpool scrub monatlich (Enterprise-Platten) bzw. wöchentlich (Consumer/große SATA). Ein Scrub findet „stille“ Bitfehler, bevor sie beim Resilver zum Datenverlust führen.
Redundanz-Faustregeln: Mirror für IOPS/Datenbanken und schnellen Resilver, RAIDZ2 für Kapazität/Archive. RAIDZ1 bei Platten > 4 TB nicht mehr verwenden – die Resilver-Dauer macht das Risiko zu groß.

🧩ZFS – Dateisysteme, Snapshots & Klone

Datasets anlegen & anzeigen

zfs listAlle Datasets mit USED, AVAIL, REFER, MOUNTPOINT
zfs list -r tank/dataRekursiv ab einem Punkt im Baum
zfs list -o name,used,quota,mountpointEigene Spaltenauswahl
zfs list -t filesystem,volume,snapshotNach Typ filtern
zfs create tank/dataDateisystem anlegen – wird sofort gemountet
zfs create -p tank/app/prod/logsAlle fehlenden Ebenen mit anlegen
zfs create -o compression=lz4 -o quota=100g tank/dataMit Properties direkt bei der Anlage
zfs create -V 16g rpool/swap1ZFS-Volume (zvol) anlegen, z. B. für Swap oder Raw-Devices
zfs destroy tank/dataDataset löschen (muss leer von Kindern und Snapshots sein)
zfs rename tank/data tank/data_altDataset umbenennen bzw. im Baum verschieben
zfs mount -a / zfs umount tank/dataAlle ZFS-Dateisysteme mounten / eines aushängen
zfs mountAktuell gemountete ZFS-Dateisysteme anzeigen

Properties

zfs get all tank/dataAlle Properties mit Quelle (local, inherited, default)
zfs get -r compressratio tankErreichtes Kompressionsverhältnis rekursiv
zfs get -H -o value used tank/dataEinzelwert ohne Kopfzeile (Skripting)
zfs set mountpoint=/data tank/dataMountpoint setzen – kein /etc/vfstab-Eintrag nötig
zfs set mountpoint=legacy tank/dataMount über /etc/vfstab und mount steuern
zfs set quota=200g tank/dataHarte Obergrenze inkl. Snapshots und Kinder
zfs set refquota=150g tank/dataObergrenze nur für die Nutzdaten, ohne Snapshots
zfs set reservation=50g tank/dataPlatz fest reservieren (garantierte Kapazität)
zfs set refreservation=50g tank/dataReservierung ohne Snapshots/Kinder
zfs set userquota@rene=20g tank/homeQuota je Benutzer (groupquota@ für Gruppen)
zfs userspace tank/homeBelegung je Benutzer auswerten
zfs set compression=lz4 tank/dataKompression aktivieren (gilt nur für neu geschriebene Blöcke)
zfs set recordsize=8k tank/oradataBlockgröße an DB-Blockgröße anpassen (vor dem Befüllen setzen!)
zfs set logbias=throughput tank/oradataZIL-Verhalten für große sequentielle Writes optimieren
zfs set primarycache=metadata tank/oradataARC nur für Metadaten nutzen (DB hat eigenen Cache)
zfs set atime=off tank/dataAccess-Time-Updates abschalten (weniger Schreib-I/O)
zfs set copies=2 tank/wichtigJeden Block doppelt speichern (zusätzlich zur vdev-Redundanz)
zfs set readonly=on tank/archivDataset schreibgeschützt setzen
zfs set snapdir=visible tank/data.zfs-Verzeichnis sichtbar machen
zfs inherit -r compression tank/dataLokale Property löschen und wieder erben

Snapshots, Klone & Rollback

zfs snapshot tank/data@2026-08-18Snapshot anlegen – sekundenschnell, kostet zunächst keinen Platz
zfs snapshot -r tank@vor_changeRekursiv über alle Kinder, atomar zum gleichen Zeitpunkt
zfs list -t snapshot -o name,used,creation -r tankAlle Snapshots mit Platzverbrauch und Datum
ls /data/.zfs/snapshot/2026-08-18/Snapshot-Inhalt direkt lesen – Datei einfach zurückkopieren
zfs diff tank/data@vor_change tank/dataWelche Dateien wurden seit dem Snapshot geändert (M/+/-/R)?
zfs rollback tank/data@vor_changeDataset auf den Snapshot zurücksetzen (neuere Daten sind weg)
zfs rollback -r tank/data@altAlle jüngeren Snapshots mit verwerfen
zfs clone tank/data@snap tank/data_testBeschreibbaren Klon erzeugen (teilt Blöcke mit dem Snapshot)
zfs promote tank/data_testKlon vom Ursprungs-Snapshot lösen – Original wird löschbar
zfs hold keep tank/data@wichtigSnapshot gegen Löschen sperren
zfs holds tank/data@wichtig / zfs release keep …Sperren anzeigen / aufheben
zfs destroy tank/data@2026-08-18Einzelnen Snapshot löschen
zfs destroy tank/data@snap1%snap5Snapshot-Bereich in einem Schritt löschen
zfs destroy -n -v -r tank/dataTestlauf: was würde rekursiv gelöscht? Immer zuerst ausführen!

Replikation & Delegation

zfs send tank/data@snap > /backup/data.zfsVollstream in eine Datei schreiben
zfs send -R tank/data@snap | zfs recv -Fdu tank2Kompletter Baum inkl. Properties und Snapshots replizieren
zfs send -i @alt tank/data@neu | ssh srv2 zfs recv tank/dataInkrementell – nur die Differenz zwischen zwei Snapshots
zfs send -I @alt tank/data@neu | …Inkrementell inkl. aller Zwischen-Snapshots
zfs send -nv -R tank/data@snapGröße des Streams schätzen, ohne zu senden
zfs recv -F tank2/dataZiel vor dem Empfang auf den Stand des Streams zurückrollen
zfs recv -u tank2/dataEmpfangenes Dataset nicht mounten (wichtig auf dem Zielserver)
zfs allow rene snapshot,mount,create tank/homeRechte an einen Nicht-Root-User delegieren
zfs allow tank/home / zfs unallow rene tank/homeDelegationen anzeigen / zurücknehmen
zfs upgrade / zfs upgrade -aDataset-Version anzeigen bzw. alle heben
zfs destroy -r ist gefährlich: Es löscht rekursiv alle Kind-Datasets, Snapshots und abhängige Klone. Immer erst zfs destroy -n -v -r als Testlauf laufen lassen und die Ausgabe lesen.
ARC frisst RAM – absichtlich: Freier Speicher wird als ZFS-Cache genutzt und bei Bedarf sofort wieder freigegeben. Prüfen mit kstat -p zfs:0:arcstats:size und arcstat 5; begrenzen nur bei DBs, die eigenen Cache brauchen (Property user_reserve_hint_pct in 11.4 statt zfs_arc_max in /etc/system).
Platz weg, aber du zeigt nichts? Fast immer Snapshots. Prüfen mit zfs list -o space -r tank – die Spalte USEDSNAP zeigt, wie viel die Snapshots halten.

📁UFS & Solaris Volume Manager (Altbestand)

UFS-Dateisysteme

df -h / df -kBelegung aller Dateisysteme (lesbar / in KB)
df -F ufs -o i /varInode-Auslastung eines UFS (100 % = „voll“ trotz freiem Platz)
newfs /dev/rdsk/c1t1d0s0UFS anlegen (Raw-Device!) – UFS nur noch für Altbestand
newfs -i 4096 /dev/rdsk/c1t1d0s0Mehr Inodes (viele kleine Dateien)
mkfs -F ufs /dev/rdsk/c1t1d0s0 20971520UFS mit expliziter Sektorenanzahl anlegen
mount /dev/dsk/c1t1d0s0 /dataManuell mounten (Block-Device)
mount -F ufs -o logging /dev/dsk/c1t1d0s0 /dataMit UFS-Logging (Journal) mounten – Standard ab Solaris 9
mount -o remount,rw /dataMountoptionen ohne Aushängen ändern
mountall / umountallAlle Einträge aus /etc/vfstab mounten / aushängen
umount /dataAushängen (umount -f erzwingt)
fuser -c /dataWer benutzt das Dateisystem (PIDs)
fuser -ck /dataAlle Zugriffe hart beenden, danach umount
fsck -F ufs -y /dev/rdsk/c1t1d0s0UFS prüfen und reparieren – nur im ausgehängten Zustand!
growfs -M /data /dev/md/rdsk/d10UFS online auf die neue Größe des Volumes erweitern
tunefs -m 2 /dev/rdsk/c1t1d0s0Minfree-Reserve anpassen (mehr nutzbarer Platz)
lockfs -a / lockfs /dataUFS-Sperren anzeigen bzw. Status prüfen
/etc/vfstabMount-Tabelle – in Solaris 11 nur noch für UFS, Swap, NFS relevant
/etc/mnttabAktuell gemountete Dateisysteme (Kernel-Sicht, read-only)

SVM – Solaris Volume Manager (metadevices)

metadb -iStatus aller State Database Replicas (mindestens 3 nötig)
metadb -a -f -c 3 c1t0d0s7 c1t1d0s7Je 3 Replicas auf zwei Platten anlegen (-f beim ersten Mal)
metadb -d c1t1d0s7Replicas einer Platte entfernen
metastatStatus aller Metadevices mit Submirrors und Sync-Fortschritt
metastat -cKompakte einzeilige Übersicht je Volume
metastat -pAusgabe im md.tab-Format – ideal zur Dokumentation
metainit d10 1 1 c1t0d0s0Einfache Konkatenation/Stripe als Submirror anlegen
metainit d0 -m d10Mirror aus einem Submirror bilden
metattach d0 d20Zweiten Submirror anhängen – Resync startet
metadetach d0 d20Submirror abtrennen (z. B. für Backup-Split)
metaoffline / metaonline d0 d20Submirror temporär deaktivieren / reaktivieren
metareplace -e d0 c1t1d0s0Getauschte Platte wieder aufnehmen und resyncen
metaclear d0 d10 d20Metadevices löschen (von oben nach unten)
metaroot d0Root-Dateisystem auf ein Metadevice umstellen (passt vfstab/system an)
metaset -s dg -a -h node1 node2Shared Diskset für Cluster anlegen
/etc/lvm/md.tabKonfigurationsvorlage für metainit -a
/etc/lvm/mddb.cfSpeicherorte der State Database Replicas

ufsdump / ufsrestore

ufsdump 0uf /dev/rmt/0 /dataLevel-0-Vollsicherung, Zeitstempel in /etc/dumpdates
ufsdump 9uf /dev/rmt/0 /dataInkrementelle Sicherung (Level 1–9)
ufsdump 0f - /data | gzip > /backup/data.dump.gzIn Datei sichern und komprimieren
ufsrestore -tf /backup/data.dumpInhaltsverzeichnis eines Dumps anzeigen
ufsrestore -ivf /dev/rmt/0Interaktiver Restore (add, extract, quit)
ufsrestore -rvf /dev/rmt/0Kompletter Restore in ein leeres, gemountetes UFS
Solaris 11 und UFS: Root ist immer ZFS, UFS ist nur noch für Datenpartitionen und Migrationen relevant. SVM (metadb, metainit) existiert in 11 noch, neue Layouts gehören aber in ZFS – dort ersetzen zpool-vdevs die Metadevices.
Migration UFS → ZFS: ZFS-Dataset anlegen, dann cd /altes_ufs && find . -depth -print | cpio -pdumv /neues_zfs – hält Rechte, Links und Sparse-Struktur.

🔌Devices, Storage-Pfade & Multipathing

Geräte erkennen

devfsadm -CvGerätebaum neu aufbauen und verwaiste Links (-C) entfernen
devfsadm -i sdNur für einen Treiber scannen (schneller, schonender)
devfsadm -c diskNur Geräte einer Klasse konfigurieren
cfgadm -alAlle Attachment Points mit Typ, Receptacle und Occupant
cfgadm -al -o show_FCP_dev c2Alle LUNs hinter einem FC-Controller einzeln anzeigen
cfgadm -c configure c2::5006016…Gerät/Port in Betrieb nehmen (LUN sichtbar machen)
cfgadm -c unconfigure c2::dsk/c2t1d0Gerät sauber abmelden (vor Ausbau/SAN-Wartung)
cfgadm -x replace_device c1::dsk/c1t2d0Hot-Swap-Tausch einer Platte geführt durchführen
formatInteraktiv: Platten anzeigen, labeln, partitionieren, analysieren
format -eErweiterter Modus – EFI/GPT-Label für Platten > 2 TB
prtvtoc /dev/rdsk/c1t0d0s2Partitionstabelle (VTOC) lesen – wichtig für Dokumentation
prtvtoc /dev/rdsk/c1t0d0s2 | fmthard -s - /dev/rdsk/c1t1d0s2Label 1:1 auf eine gleich große Platte kopieren
fdisk /dev/rdsk/c1t1d0p0x86: fdisk-Partition (Solaris2) anlegen, vor format
rmformat -lWechselmedien (USB-Stick, DVD, Bandlaufwerk) auflisten
iostat -EnAlle Platten mit Serie, Größe und Hard-/Soft-/Transport-Errors
iostat -EnrGleiche Daten in CSV-Form (auswertbar)
/dev/dsk/cXtYdZsN und /dev/rdsk/cXtYdZsNBlock- bzw. Raw-Device einer Partition (s2 = ganze Platte bei VTOC)
/dev/rdsk/cXtYdZ (ohne Slice)Bei EFI-Label: s0 bzw. der Gerätename ohne Slice

FC, SAS & Multipathing (MPxIO)

fcinfo hba-portAlle FC-HBA-Ports mit WWN, Status, Speed, Firmware – für Zoning
fcinfo hba-port -lZusätzlich unterstützte Link-Geschwindigkeiten
fcinfo remote-port -p <hba-wwn> -sSichtbare Storage-Ports und deren LUNs
luxadm probeAlle erkannten Storage-Arrays und Platten mit Pfad
luxadm display /dev/rdsk/c0t60…d0s2Details einer LUN inkl. aller Pfade und deren Status
luxadm -e portZustand der FC-Ports (CONNECTED / NOT CONNECTED)
luxadm led_blink /dev/rdsk/c1t2d0s2Positions-LED der Platte blinken lassen (Tausch im Rack)
mpathadm list luAlle Multipath-LUNs mit Anzahl gesamter und aktiver Pfade
mpathadm show lu /dev/rdsk/c0t60…d0s2Pfaddetails: Load-Balancing, Initiator, Target-Port, Status
mpathadm list initiator-portAlle Initiator-Ports des Systems
mpathadm modify lu -a disable -t <target-port> <lu>Einzelnen Pfad gezielt deaktivieren
stmsboot -LZuordnung alter zu neuer Gerätenamen nach MPxIO-Aktivierung
stmsboot -eMPxIO systemweit aktivieren – erfordert Reboot
stmsboot -dMPxIO deaktivieren (Reboot)
stmsboot -D fp -eMPxIO nur für einen Gerätetyp (hier FC) einschalten
stmsboot -uNach manuellen Änderungen /etc/vfstab und Dump anpassen
/etc/driver/drv/fp.conf, scsi_vhci.confSolaris 11: Treiberkonfiguration (in 10: /kernel/drv/)
stmsboot -e ändert Gerätenamen: Aus c2t1d0 wird c0t60060…d0. Vor der Umstellung stmsboot -L speichern, /etc/vfstab, ZFS-Pools, Dump- und Swap-Geräte prüfen und danach zwingend rebooten. ZFS findet seine Platten über Labels selbst wieder, UFS-Einträge nicht.
LUN vergrößert im Storage? cfgadm -c configure bzw. devfsadm → format → Label prüfen → zpool set autoexpand=on tank bzw. zpool online -e tank <dev>.

📈Swap, Dump & Core-Dateien

Swap

swap -lAlle Swap-Bereiche mit Gerät, Größe und freien Blöcken
swap -sZusammenfassung: allocated, reserved, used, available
zfs create -V 16g rpool/swap1Neues Swap-zvol anlegen (Solaris 11-Standardweg)
swap -a /dev/zvol/dsk/rpool/swap1Swap sofort aktivieren
swap -d /dev/zvol/dsk/rpool/swap1Swap deaktivieren (muss vor dem Löschen erfolgen)
swap -a /var/tmp/swapfileDatei als Swap nutzen (Notlösung bei akutem Engpass)
zfs set volsize=32g rpool/swapSwap-zvol vergrößern (danach swap -d und swap -a)
/etc/vfstab → /dev/zvol/dsk/rpool/swap1 - - swap - no -Swap dauerhaft eintragen – einer der letzten vfstab-Anwendungsfälle
vmstat 5 | awk '{print $4,$5,$7,$8}'swap, free, page-in, page-out beobachten

Crash Dump

dumpadmAktuelle Dump-Konfiguration: Gerät, savecore-Verzeichnis, Modus
dumpadm -d /dev/zvol/dsk/rpool/dumpDump-Gerät setzen (eigenes zvol, nicht Swap!)
dumpadm -s /var/crashZielverzeichnis für die entpackten Dumps festlegen
dumpadm -c curprocDump-Inhalt: kernel, curproc oder all
dumpadm -y / dumpadm -nsavecore beim Boot ein- bzw. ausschalten
dumpadm -z onDump komprimiert ablegen (spart Platz in /var/crash)
savecore -vf /dev/zvol/dsk/rpool/dumpDump nachträglich aus dem Dump-Device holen
savecore -LLive-Dump des laufenden Systems (Analyse ohne Ausfall)
ls -l /var/crash/Vorhandene Dumps (vmcore.N, unix.N bzw. vmdump.N)
zfs get volsize rpool/dumpGröße des Dump-zvol prüfen – muss zum RAM passen

Core-Dateien

coreadmAktuelle Core-Konfiguration (Muster, global/per-process)
coreadm -e global -g /var/cores/core.%f.%p.%tZentrales Core-Verzeichnis mit sprechendem Namensmuster
coreadm -e logJeden Core-Dump im syslog protokollieren
coreadm -d processPer-Process-Cores abschalten
coreadm -p /var/cores/core.%f.%p $$Muster für die aktuelle Shell und Kinder setzen
pargs -a core; pstack core; pflags coreCore-Datei auswerten: Argumente, Stack, Flags
file coreWelches Programm hat den Core erzeugt?
Getrennte zvols: In Solaris 11 sind rpool/swap und rpool/dump zwei eigene Volumes. Nie das Swap-Device als Dump-Device eintragen – ein Panic würde sonst Swap-Inhalte überschreiben. Dump-Größe grob: 30–50 % des RAM bei komprimiertem Dump.

⚙Prozesse, Jobs & Zeitsteuerung

Prozesse anzeigen

ps -efAlle Prozesse im Full-Format
ps -ef | grep -v grep | grep sshdProzess gezielt suchen
ps -eo pid,ppid,user,pcpu,pmem,rss,argsEigene Spaltenauswahl
ps -eo pid,rss,args | sort -k2 -rn | head -20Speicherhungrigste Prozesse
ps -eo pid,pcpu,args | sort -k2 -rn | head -20CPU-hungrigste Prozesse
ps -eLo pid,lwp,pcpu,argsProzesse mit ihren LWPs/Threads
ps -ez / ps -eo zone,pid,argsProzesse mit Zonenzuordnung (aus der Global Zone)
prstatInteraktive Top-Ansicht der Prozesse
prstat -aProzesse plus Zusammenfassung je User
prstat -Lm 5Je Thread mit Mikrostate-Accounting (LAT, TFL, DFL, LCK) – Goldstandard
prstat -ZZusammenfassung je Zone
prstat -J / prstat -TZusammenfassung je Projekt bzw. je Task
prstat -s rss -n 15 1 1Top 15 nach Speicher, einmalige Momentaufnahme
ptree -a <pid>Prozessbaum mit Argumenten
ptree $$Eigene Prozesskette bis init anzeigen

proc-Tools (/proc-Werkzeuge)

pfiles <pid>Alle offenen File Descriptors mit Pfad, Socket und Peer
pmap -x <pid>Speicherabbild mit RSS je Segment (echte Speichernutzung)
pmap -S <pid>Aufschlüsselung nach Shared/Private Memory
pstack <pid>Stack-Trace aller Threads – erster Griff bei hängenden Prozessen
pargs -ae <pid>Aufrufargumente und komplettes Environment eines Prozesses
pwdx <pid>Aktuelles Arbeitsverzeichnis
pldd <pid>Geladene Shared Libraries
psig <pid>Signalbehandlung des Prozesses
pcred <pid>UID/GID und Privilegien-Set des Prozesses
plimit <pid>Ressourcen-Limits eines laufenden Prozesses anzeigen
plimit -n 8192 <pid>Limit im laufenden Betrieb erhöhen (z. B. File Descriptors)
pstop / prun <pid>Prozess anhalten / weiterlaufen lassen
preap <pid>Zombie-Prozess (Status defunct) einsammeln
ptime -m cmdKommando mit Mikrostate-Zeiten messen
truss -f -o /var/tmp/t.out cmdSystemaufrufe verfolgen, auch der Kindprozesse
truss -p <pid> -t open,statAn laufenden Prozess anhängen, nur bestimmte Calls
truss -u ':::' -p <pid>Zusätzlich Aufrufe in User-Libraries verfolgen

Steuern & Prioritäten

kill -TERM <pid> / kill -KILL <pid>Sauber beenden / hart abschießen
kill -HUP <pid>Konfiguration neu einlesen (bei Daemons ohne SMF-Refresh)
pgrep -fl apachePIDs samt Kommandozeile suchen
pgrep -u oracle -nJüngster Prozess eines Users
pkill -9 -f "java.*myapp"Alle passenden Prozesse beenden (Muster auf ganze Kommandozeile)
nice -n 10 cmdMit niedrigerer Priorität starten
renice -n 5 -p <pid>Priorität eines laufenden Prozesses ändern
priocntl -lVerfügbare Scheduling-Klassen (TS, IA, FX, RT, FSS, SDC)
priocntl -d -i pid <pid>Scheduling-Klasse eines Prozesses anzeigen
priocntl -s -c FX -m 0 -p 40 -i pid <pid>In die Fixed-Priority-Klasse setzen
nohup cmd > /var/tmp/log 2>&1 &Job abgekoppelt im Hintergrund starten
jobs / fg %1 / bg %1Shell-Jobverwaltung
ipcs -a / ipcrm -m <id>Shared Memory, Semaphore, Queues anzeigen / entfernen

cron & at

crontab -l / crontab -eEigene Crontab anzeigen / bearbeiten
crontab -l oracleCrontab eines anderen Users lesen (als root)
crontab -rEigene Crontab löschen – Vorsicht, keine Rückfrage
/var/spool/cron/crontabs/Speicherort aller Crontabs (im Backup berücksichtigen)
/etc/cron.d/cron.allow, cron.denyWer darf crontab nutzen
/var/cron/logCron-Protokoll: was wurde gestartet, mit welchem Ergebnis
svcs -xv cron; svcadm restart croncron-Dienst prüfen und neu starten
at 22:00 tomorrowEinmaligen Job planen (Ctrl-D beendet die Eingabe)
at -f /var/tmp/job.sh now + 2 hoursSkript zeitversetzt starten
atq / at -r <jobid>Geplante at-Jobs listen / löschen
Cron-Falle: cron startet mit minimalem Environment – kein .profile, PATH nur /usr/bin. Immer absolute Pfade nutzen und nötige Variablen (PATH, ORACLE_HOME, LD_LIBRARY_PATH) im Skript selbst setzen. In Solaris 11 zusätzlich prüfen, ob der User die nötigen Rechtsprofile hat.
Hangt ein Prozess? pstack <pid> zweimal im Abstand von 10 Sekunden – ist der Stack identisch, steckt der Prozess. Dann pfiles (hängt er an einem Socket/NFS?) und truss -p.

📊Performance-Analyse & DTrace

Schnellüberblick

vmstat 5Alle 5 s: CPU, Runqueue (r), Paging (sr, pi, po)
vmstat 5 1212 Messungen – erste Zeile ist immer der Mittelwert seit Boot, ignorieren
vmstat -p 5Paging nach Typ getrennt: executable, anonymous, filesystem
vmstat -sKumulierte Kernel-Zähler seit Boot
mpstat 5Auslastung je vCPU: csw, icsw, smtx, intr, idl
mpstat -a 5Aggregiert je Prozessorgruppe/Socket
prstat -Lm 5Thread-Mikrostates: wo verbringt der Prozess seine Zeit?
iostat -xnz 5I/O je Gerät, Nullzeilen unterdrückt – auf asvc_t und %b achten
iostat -xnzM 5Gleiche Ausgabe in MB/s
iostat -xnzcp 5Zusätzlich CPU-Anteil und Partitionsstatistik
fsstat zfs 5Dateisystem-Operationen (lookup, read, write) je FS-Typ
fsstat /data 5Statistik für einen einzelnen Mountpoint
arcstat 5ZFS-ARC: Hit-Rate, Größe, Ziel (Solaris 11)
zonestat 5Ressourcenverbrauch je Zone (CPU, RAM, Netz, Swap)
zonestat -q -r physical-memory 10 1h 1hEine Stunde aufzeichnen und Bericht ausgeben

sar & kstat

sar -u 5 10CPU-Nutzung (usr, sys, wio, idle)
sar -d 5 5Disk-Statistik mit Queue-Länge und Service-Zeit
sar -g 5 5 / sar -p 5 5Page-out-/Page-in-Aktivität
sar -q 5 5Runqueue- und Swap-Queue-Länge
sar -AAlle Berichte auf einmal
sar -f /var/adm/sa/sa18Aufzeichnung des 18. Tages auswerten
svcadm enable system/sarAutomatische sar-Datensammlung einschalten
kstat -pAlle Kernel-Statistiken als modul:inst:name:stat-Paare
kstat -p 'unix:0:vopstats_zfs:*'Gezielt eine Statistikgruppe abfragen
kstat -n nfs_client -s 'read*'Nach Statistiknamen filtern
kstat -p -T d 5 3Mit Zeitstempel wiederholt messen (Delta selbst bilden)
cpustat -c PAPI_tot_ins 1 5CPU-Performance-Counter systemweit auslesen
cputrack -c <counter> -p <pid>Performance-Counter für einen einzelnen Prozess
trapstat -t 5SPARC: TLB-Misses und Traps – Hinweis auf Page-Size-Probleme
busstat -l / busstat -w <dev>Bus- und Interconnect-Zähler der Plattform
lockstat -kIW sleep 10Kernel-Profiling: wo verbringt der Kernel CPU-Zeit?
lockstat sleep 10Kernel-Lock-Contention messen
plockstat -A -p <pid>Userland-Mutex-/RWLock-Contention einer Anwendung
netstat -i 5Pakete und Fehler je Interface im Intervall

DTrace

dtrace -l | wc -lAnzahl verfügbarer Probes (mehrere Zehntausend)
dtrace -l -P ioAlle Probes eines Providers auflisten
dtrace -n 'syscall:::entry { @[probefunc] = count(); }'Welche Systemaufrufe dominieren? Abbruch mit Ctrl-C
dtrace -n 'syscall:::entry /execname=="java"/ { @[probefunc]=count(); }'Nur für einen bestimmten Prozessnamen
dtrace -n 'proc:::exec-success { trace(curpsinfo->pr_psargs); }'Alle neu gestarteten Programme mitschreiben
dtrace -n 'io:::start { @[args[1]->dev_statname] = count(); }'I/O-Verteilung auf die Geräte
dtrace -n 'io:::start { @[execname] = sum(args[0]->b_bcount); }'Welcher Prozess verursacht die meisten Bytes I/O?
dtrace -n 'syscall::open*:entry { printf("%s %s", execname, copyinstr(arg0)); }'Welche Dateien werden geöffnet?
dtrace -n 'profile-997 /arg0/ { @[stack()]=count(); } tick-10s { exit(0); }'Kernel-Stacks samplen (Hotspot finden)
dtrace -n 'sched:::off-cpu /execname=="myapp"/ { @=quantize(…) }'Off-CPU-Analyse: worauf wartet die Anwendung?
dtrace -qs script.dD-Skript ausführen, ohne Kopfzeilen
dtrace -c "cmd" -n 'syscall:::entry{@[probefunc]=count();}'Nur für die Laufzeit eines gestarteten Kommandos messen
execsnoop / opensnoop / iosnoopDTraceToolkit: Prozessstarts / Dateiöffnungen / Einzel-I/Os live
dtrace -n 'dtrace:::ERROR { }'Eigene Skripte auf Fehler prüfen
Wo klemmt es? Reihenfolge: vmstat 5 (CPU vs. Paging) → mpstat 5 (einzelne CPU heiss? smtx hoch = Lock-Contention) → iostat -xnz 5 (asvc_t > 20 ms bei SAN = Storage) → prstat -Lm 5 (welcher Thread, welcher Mikrostate) → DTrace für die Feinanalyse.
Kennzahlen lesen: vmstat-Spalte sr (scan rate) dauerhaft > 0 bedeutet echten Speichermangel – free allein ist wegen des ARC kein Indikator. In iostat -xnz ist %b nahe 100 bei gleichzeitig niedrigen IOPS ein Zeichen für ein einzelnes langsames Gerät, nicht für Last.

🌐Netzwerk: dladm, ipadm & Routing

Datalinks (dladm, ab Solaris 11)

dladm show-physPhysische NICs mit Medium, Status, Speed, Duplex und Gerätenamen
dladm show-phys -LZuordnung Linkname ↔ physischer Steckplatz/Treiberinstanz
dladm show-linkAlle Datalinks (physisch, VNIC, Aggregation, VLAN) mit MTU
dladm show-link -s -i 5Paket-/Fehlerstatistik je Link im Intervall
dladm show-ether net0Autonegotiation, Pause Frames, ausgehandelte Geschwindigkeit
dladm show-linkprop net0Alle Link-Properties mit aktuellem, Default- und möglichem Wert
dladm set-linkprop -p mtu=9000 net0Jumbo Frames setzen (Switch und Gegenstelle müssen mitspielen)
dladm set-linkprop -p speed=1000,duplex=full net0Geschwindigkeit fest vorgeben (nur wenn wirklich nötig)
dladm set-linkprop -t -p …-t = nur temporär bis zum Reboot
dladm reset-linkprop -p mtu net0Property auf den Default zurücksetzen
dladm rename-link net0 mgmt0Link sprechend umbenennen (Link muss ungenutzt sein)
dladm create-vlan -l net0 -v 100 vlan100VLAN-Interface auf einem Link anlegen
dladm create-vnic -l net0 -v 100 vnic0Virtuelle NIC (für Zonen), optional mit VLAN-Tag
dladm create-vnic -l net0 -m auto vnic0VNIC mit automatisch generierter MAC-Adresse
dladm show-vnicAlle VNICs mit MAC, Speed-Limit und Zonenzuordnung
dladm create-aggr -l net0 -l net1 aggr0Link Aggregation (Trunk) aus zwei Ports
dladm create-aggr -P L2,L3 -L active -l net0 -l net1 aggr0Mit Hash-Policy und LACP im Active-Mode
dladm show-aggr -xStatus jedes Ports in der Aggregation (LACP-Zustand!)
dladm add-aggr -l net2 aggr0 / dladm remove-aggr -l net2 aggr0Port zur Aggregation hinzufügen / entfernen
dladm delete-aggr aggr0 / delete-vnic vnic0 / delete-vlan vlan100Virtuelle Links wieder abbauen
dlstat -i 5Durchsatz je Link (Pakete und Bytes, rx/tx)
dlstat show-link -r net0Empfangsstatistik inkl. Drops je Hardware-Ring

IP-Konfiguration (ipadm, ab Solaris 11)

ipadm show-ifAlle IP-Interfaces mit Zustand und aktivierten Protokollklassen
ipadm show-addrAlle Adressobjekte (net0/v4) mit Typ, Status und Adresse
ipadm show-addr -o all net0/v4Alle Felder eines Adressobjekts
ipadm create-ip net0IP-Interface auf dem Datalink anlegen (Schritt 1)
ipadm create-addr -T static -a local=10.0.0.10/24 net0/v4Statische IPv4-Adresse dauerhaft setzen (Schritt 2)
ipadm create-addr -T static -a 10.0.0.11/24 net0/v4bZweite Adresse (Alias) auf demselben Interface
ipadm create-addr -T dhcp net0/dhcpAdresse per DHCP beziehen
ipadm create-addr -T addrconf net0/v6IPv6-Autokonfiguration (SLAAC) aktivieren
ipadm delete-addr net0/v4Adressobjekt entfernen
ipadm delete-ip net0IP-Interface komplett abbauen
ipadm disable-if -t net0 / ipadm enable-if -t net0Interface temporär deaktivieren / reaktivieren
ipadm down-addr net0/v4 / ipadm up-addr net0/v4Einzelne Adresse abschalten / einschalten
ipadm show-ifprop net0Interface-Properties (mtu, forwarding, metric) je Protokoll
ipadm set-ifprop -p mtu=9000 -m ipv4 net0MTU auf IP-Ebene setzen (zusätzlich zum Link!)
ipadm show-prop tcpProtokoll-Tunables von TCP mit Default- und aktuellem Wert
ipadm set-prop -p send_buf=1048576 tcpTCP-Tunable dauerhaft setzen (ersetzt ndd)
ipadm set-prop -p forwarding=on ipv4IP-Forwarding einschalten (Router-Betrieb)
ipadm reset-prop -p send_buf tcpTunable auf Default zurücksetzen
ipadm create-ipmp ipmp0IPMP-Gruppe anlegen (Ausfallsicherheit auf IP-Ebene)
ipadm add-ipmp -i net0 -i net1 ipmp0Interfaces in die IPMP-Gruppe aufnehmen
ipmpstat -g / -i / -a / -t / -pIPMP: Gruppen / Interfaces / Adressen / Targets / Probes

Routing, Namensauflösung & Analyse

netstat -rnRouting-Tabelle numerisch
route -p add default 10.0.0.1Default-Route persistent setzen – -p ist entscheidend
route -p add -net 192.168.5.0/24 10.0.0.254Persistente statische Route
route -p delete default 10.0.0.1Persistente Route entfernen
route -p showAlle persistenten Routen auflisten
route get 8.8.8.8Welche Route/Interface würde für ein Ziel genutzt?
netstat -an -f inet | grep LISTENLauschende TCP-Ports
netstat -an -P tcpAlle TCP-Verbindungen mit Zustand
netstat -s -P tcpTCP-Protokollstatistik (Retransmits, Resets)
arp -a / arp -d 10.0.0.5ARP-Cache anzeigen / Eintrag löschen
ping -s 10.0.0.1 56 5Fortlaufendes Ping mit Paketgröße und Anzahl
traceroute 10.1.2.3Pfad zum Ziel verfolgen
snoop -d net0Paketmitschnitt am Interface (Solaris-eigener Sniffer)
snoop -d net0 -o /var/tmp/net0.snoop host 10.0.0.5 and port 22Gefiltert in Datei schreiben
snoop -i /var/tmp/net0.snoop -VMitschnitt lesen (-v = alle Protokollschichten)
/etc/inet/hosts (Link: /etc/hosts)Lokale Namensauflösung
/etc/resolv.conf, /etc/nsswitch.confDNS-Resolver und Reihenfolge der Namensquellen
svccfg -s dns/client setprop config/nameserver = net_address: "(10.0.0.53 10.0.0.54)"Solaris 11: DNS-Server im SMF hinterlegen
svccfg -s dns/client setprop config/search = astring: "(intern.example)"Suchdomain setzen, danach svcadm refresh dns/client
svccfg -s name-service/switch setprop config/host = astring: "files dns"nsswitch-Reihenfolge über SMF steuern
nscfg export svc:/system/name-service/switch:defaultSMF-Konfiguration in die klassische Datei schreiben
nscfg import -f svc:/network/dns/client:defaultBestehende /etc/resolv.conf ins SMF importieren
svcadm refresh dns/client; svcadm restart name-service/cacheDNS-Einstellungen aktivieren und Cache leeren
nscd -i hosts / getent hosts sol01Namescache für hosts invalidieren / Auflösung testen
nslookup sol01 / dig sol01.intern.exampleDNS gezielt abfragen

Solaris 10: ifconfig & Konfigurationsdateien

ifconfig -aAlle Interfaces mit IP und Flags (nur Solaris 10 als Konfigurationsweg)
ifconfig ce0 plumb 10.0.0.10 netmask 255.255.255.0 upInterface temporär konfigurieren (nur Solaris 10, nach Reboot weg)
ifconfig ce0:1 plumb 10.0.0.11 netmask + upLogisches Interface / Alias (nur Solaris 10)
ifconfig ce0 unplumbInterface abbauen (nur Solaris 10)
/etc/hostname.ce0Hostname/IP je Interface – macht die Konfiguration dauerhaft (Solaris 10)
/etc/dhcp.ce0Leere Datei = Interface bezieht DHCP (Solaris 10)
/etc/defaultrouter, /etc/netmasks, /etc/inet/netmasksDefault-Gateway und Netzmasken (Solaris 10)
ndd -get /dev/tcp tcp_conn_req_max_qTCP/IP-Tunable lesen (nur Solaris 10, in 11: ipadm show-prop)
ndd -set /dev/ip ip_forwarding 1Tunable temporär setzen (nur Solaris 10)
svcadm restart network/physicalNetzkonfiguration neu einlesen (beide Versionen)
Persistenz – der häufigste Fehler: ipadm und dladm schreiben ihre Konfiguration persistent (außer mit -t). ifconfig dagegen ist immer nur temporär und in Solaris 11 nur noch für Diagnose gedacht. Routen brauchen zwingend route -p, sonst sind sie nach dem Reboot weg.
MTU an zwei Stellen: Jumbo Frames erfordern dladm set-linkprop -p mtu=9000 und ipadm set-ifprop -p mtu=9000 -m ipv4. Prüfen mit ping -s -D <host> 8972 (Don't-Fragment).
Netzprofil: In Solaris 11 gibt es svc:/network/physical:default (manuell, ipadm/dladm) und :nwam (automatisch, für Laptops). Auf Servern muss default aktiv sein – sonst überschreibt NWAM die Konfiguration.

🛡Firewall & Netzwerk-Sicherheit

Packet Filter (PF) – Solaris 11.4

pkg install firewallPF-Paket installieren (ab 11.4 der Nachfolger von IP Filter)
/etc/firewall/pf.confStandard-Regelwerk (Default-Set schaltet nur set skip on lo0)
pfctl -n -f /etc/firewall/pf.confSyntaxprüfung, ohne die Regeln zu laden – immer zuerst!
svcadm enable firewallFirewall-Dienst aktivieren (lädt pf.conf und ruft pfctl -e)
svcadm refresh firewallGeändertes Regelwerk neu laden
svccfg -s firewall listprop firewall/rulesWelche Regeldatei nutzt der Dienst?
pfctl -s rulesGeladene Filterregeln anzeigen
pfctl -s natAktive NAT-/Redirect-Regeln
pfctl -s stateAktuelle Verbindungszustände (State Table)
pfctl -s infoZähler: passed, blocked, State-Table-Auslastung
pfctl -s allKomplette Diagnoseausgabe
pfctl -vvs rulesRegeln mit Trefferzählern – findet nie greifende Regeln
pfctl -F state / pfctl -F rulesState-Table bzw. Regeln leeren (Vorsicht im Produktivbetrieb)
pfctl -e / pfctl -dPaketfilter ein-/ausschalten (der Dienst tut das normalerweise)
pfctl -t badhosts -T showInhalt einer PF-Tabelle anzeigen (-T add/-T delete)
ipf2pf -4 /etc/ipf/ipf.confBestehende IPF-Regeln nach PF konvertieren (Migrationshilfe)
svcadm enable network/pflog; /var/log/firewall/pflog/PF-Logging aktivieren und Mitschnitte auswerten

IP Filter – Solaris 10 und 11.3

svcadm enable ipfilterIP-Filter-Dienst starten (nur Solaris 10 / 11.3 und älter)
/etc/ipf/ipf.conf, ipnat.conf, ippool.confRegeldateien von IP Filter (nur Solaris 10 / 11.3)
ipf -Fa -f /etc/ipf/ipf.confRegeln neu laden (nur Solaris 10 / 11.3)
ipf -VVersion und Status des Filters (nur Solaris 10 / 11.3)
ipfstat -ioAktive Ein- und Ausgangsregeln (nur Solaris 10 / 11.3)
ipfstat -hioRegeln mit Trefferzählern (nur Solaris 10 / 11.3)
ipnat -l / ipnat -CF -f /etc/ipf/ipnat.confNAT-Regeln anzeigen / neu laden (nur Solaris 10 / 11.3)
ipmon -sDIPF-Logmeldungen ins syslog schreiben (nur Solaris 10 / 11.3)

Weitere Absicherung

dladm set-linkprop -p protection=mac-nospoof,ip-nospoof vnic0Link Protection: Spoofing durch Zonen verhindern
dladm set-linkprop -p allowed-ips=10.0.0.20 vnic0VNIC auf bestimmte IP-Adressen festnageln
dladm show-linkprop -p protection,allowed-ips vnic0Aktive Link-Protection prüfen
inetadm -M tcp_wrappers=TRUETCP Wrapper für alle inetd-Dienste einschalten
/etc/hosts.allow, /etc/hosts.denyTCP-Wrapper-Regeln (auch von sshd genutzt)
svccfg -s svc:/network/ssh setprop …; /etc/ssh/sshd_configSSH absichern (PermitRootLogin, Ciphers, AllowGroups)
ipsecconf -l / ipsecconf -a /etc/inet/ipsecinit.confIPsec-Policy anzeigen / laden
ipseckey -s / ikeadm dump p1Security Associations bzw. IKE-Phase-1-Zustände prüfen
netstat -an -f inet | grep LISTENAngriffsfläche prüfen: welche Ports sind offen?
svcs -a | grep -e telnet -e rlogin -e ftpKlartext-Dienste finden und mit svcadm disable abschalten
Versionsbruch: Solaris 11.4 ersetzt IP Filter durch das aus OpenBSD stammende Packet Filter. Alte ipf.conf-Regelwerke laufen nicht weiter – mit ipf2pf konvertieren und das Ergebnis von Hand prüfen.
Reihenfolge beim Aktivieren: Immer erst pfctl -n -f prüfen, dann per Konsole/ILOM (nicht per SSH!) aktivieren. Scheitert das Laden des Regelwerks, lädt der Dienst das Basis-Schutzregelwerk, das nur Port 22 durchlässt – alles andere ist dann blockiert.

📡NFS, SMB & Netzwerkdienste

NFS-Server

svcadm enable -r nfs/serverNFS-Server samt Abhängigkeiten starten
svcs -a | grep nfsStatus aller NFS-Dienste (server, client, mapid, rquota, cbd)
zfs set share.nfs=on tank/dataSolaris 11.1+: ZFS-Dataset per NFS freigeben
zfs set share.nfs.sec.default.rw=@10.0.0.0/24 tank/dataSchreibzugriff auf ein Netz begrenzen
zfs set share.nfs.sec.default.root=@10.0.0.5 tank/dataRoot-Zugriff für einen bestimmten Client erlauben
zfs get -r share.nfs tankAlle NFS-Freigaben eines Pools prüfen
zfs set sharenfs=on tank/dataÄltere Syntax (Solaris 10 / 11.0), wird weiter unterstützt
share -F nfs -o rw=@10.0.0.0/24 /export/dataNicht-ZFS-Verzeichnis temporär freigeben
shareAlle aktiven Freigaben mit Optionen anzeigen
unshare /export/dataFreigabe zurücknehmen
/etc/dfs/dfstabDauerhafte Freigaben (nur Solaris 10; in 11 über ZFS-Properties)
shareall / shareall -F nfsAlle Einträge aus dfstab aktivieren (Solaris 10)
sharemgr show -vpShare-Gruppen und Freigaben anzeigen (Solaris 10 / 11.0)
sharectl get nfsGlobale NFS-Parameter (Versionen, Ports, Grace-Zeiten)
sharectl set -p server_versmax=4 nfsMaximale NFS-Version festlegen, danach Dienst neu starten
dfshares / dfshares sol02Freigaben des lokalen bzw. eines entfernten Servers auflisten
dfmountsWelche Clients haben welche Freigabe gemountet
nfsstat -sServerseitige NFS-Statistik

NFS-Client & Automounter

showmount -e sol02Verfügbare Freigaben eines Servers anzeigen
mount -F nfs sol02:/export/data /mntTemporär mounten
mount -F nfs -o vers=3,rw,hard,intr sol02:/export/data /mntMount mit typischen Optionen
mount -F nfs -o vers=4,rw,proto=tcp sol02:/export/data /mntNFSv4 explizit erzwingen
/etc/vfstab → sol02:/export/data - /data nfs - yes rw,hard,intrDauerhafter NFS-Mount (weiterhin über vfstab)
nfsstat -mPro Mount: ausgehandelte Version, Timeouts, Serverantwortzeiten
nfsstat -cClientseitige Statistik (Retransmits prüfen!)
rpcinfo -p sol02RPC-Dienste des Servers prüfen (rpcbind, nfs, mountd)
/etc/auto_master, /etc/auto_home, /etc/auto_directAutofs-Konfiguration: Master-, Home- und Direct-Maps
automount -vAutofs-Maps neu einlesen und Aktionen anzeigen
svcadm restart system/filesystem/autofsAutofs-Dienst neu starten
sharectl get -p nfsmapid_domain nfsNFSv4-Domain prüfen (falsche Domain → alles gehört nobody)

SMB/CIFS & weitere Dienste

pkg install service/file-system/smbSMB-Serverpaket installieren
svcadm enable -r smb/serverSMB-Server starten
zfs set share.smb=on tank/datenDataset per SMB freigeben (Solaris 11.1+)
zfs set share.smb.name=Daten tank/datenSichtbaren Sharenamen festlegen
smbadm join -w ARBEITSGRUPPEServer einer Workgroup beitreten lassen
smbadm join -u admin intern.exampleIn eine Active-Directory-Domain aufnehmen
smbadm listDomain-/Workgroup-Zugehörigkeit und Domain-Controller
smbadm show-user / smbadm enable-user reneSMB-Benutzer verwalten
sharectl get smbGlobale SMB-Parameter (Signing, Protokollversionen)
smbstat -rSMB-Server: Sitzungen und Durchsatz
svcadm enable ntp; ntpq -pZeitsynchronisation starten und Peers prüfen
/etc/inet/ntp.confNTP-Konfiguration (Server, driftfile, restrict)
svcadm enable ptpSolaris 11.4: Precision Time Protocol als Alternative zu NTP
date -u; TZ=Europe/Berlin dateUTC-Zeit bzw. Zeit in anderer Zone anzeigen
svccfg -s timezone:default setprop timezone/localtime = astring: Europe/BerlinZeitzone in Solaris 11 systemweit setzen
/etc/default/init → TZ=Europe/BerlinZeitzone in Solaris 10 setzen
svcadm enable sendmail / svcadm disable sendmailMailversand aktivieren/abschalten (mailwrapper für Postfix)
svcadm enable network/ssh; ssh-keygen -t ed25519SSH-Dienst und Schlüsselpaar
scp -p datei user@sol02:/pfad/ ; sftp user@sol02Dateitransfer mit Zeitstempel bzw. interaktiv
NFS-Freigabe prüfen: zfs get -r share.nfs tank → share → dfshares → auf dem Client showmount -e. Kommt nichts, zuerst svcs -xv auf dem Server – meist ist nfs/server offline, weil kein Share definiert ist.
NFSv4 und IDs: Bei NFSv4 werden Namen statt UIDs übertragen. Stimmen nfsmapid_domain auf Server und Client nicht überein, gehören alle Dateien nobody:nobody. Prüfen mit sharectl get nfs.

👤User, RBAC, Privilegien & ACLs

Benutzer & Gruppen

useradd -u 5001 -g staff -d /export/home/rene -m -s /usr/bin/bash reneUser anlegen samt Home-Verzeichnis
useradd -G dba,sysadmin -c "Rene Pfeifer" reneZusätzliche Gruppen und Kommentar
usermod -G staff,dba reneSekundäre Gruppen neu setzen (ersetzt die alte Liste!)
usermod -s /usr/bin/pfbash reneProfil-Shell zuweisen (Voraussetzung für RBAC-Rechte)
usermod -K defaultpriv=basic,net_privaddr renePrivilegien-Set eines Users erweitern
userdel -r reneUser samt Home-Verzeichnis löschen
passwd rene / passwd -r files renePasswort setzen, ggf. Namensdienst explizit angeben
passwd -l rene / passwd -u reneAccount sperren / entsperren
passwd -N reneLogin sperren, Cron-Jobs des Users laufen weiter
passwd -s renePasswort-Status und Alterungsdaten anzeigen
passwd -x 90 -w 14 -n 1 renePasswort-Alterung: max, Warnung, min Tage
passwd -f renePasswortwechsel beim nächsten Login erzwingen
groupadd -g 2001 dba / groupmod / groupdel dbaGruppen verwalten
id / id -a rene / groups reneUID, GID und Gruppen anzeigen
userattr type rene / userattr roles reneSolaris 11: einzelne Attribute aus user_attr lesen
getent passwd rene; getent group dbaAuflösung über alle Namensdienste testen
logins -x -l rene / logins -pLogin-Details eines Users / alle Accounts ohne Passwort
who / w / last | head -20Angemeldete User / letzte Anmeldungen
/var/adm/wtmpx, /var/adm/lastlogLogin-Historie (mit last auswerten)
/etc/default/passwdSystemweite Passwortregeln (MINLENGTH, HISTORY, Komplexität)
/etc/default/loginRoot-Login auf Konsole, RETRIES, TIMEOUT
/etc/security/policy.confStandard-Rechtsprofile, Privilegien und Krypto-Algorithmus

RBAC: Rollen, Profile & Autorisierungen

profilesEigene Rechtsprofile anzeigen
profiles -l reneAlle Profile eines Users mit den enthaltenen Kommandos
profiles -p "Netz Admin" infoDetails eines Rechtsprofils
roles / roles reneWelche Rollen darf der User annehmen?
auths / auths reneZugewiesene Autorisierungen (solaris.*)
roleadd -m -d /export/home/netadm -P "Network Management" netadmRolle mit Rechtsprofil anlegen
rolemod -P "Network Management,File System Management" netadmProfile einer Rolle ändern
roledel -r netadmRolle entfernen
usermod -R netadm reneRolle einem User zuweisen
usermod -P "Software Installation" reneRechtsprofil direkt an den User hängen
usermod -A solaris.smf.manage.apache reneEinzelne Autorisierung zuweisen
su - netadmIn eine Rolle wechseln (mit dem Rollenpasswort)
pfexec zpool statusEinzelnes Kommando mit den Rechten des Profils ausführen
pfbash / pfksh / pfshProfil-Shells: alle Kommandos laufen mit den Profilrechten
profiles -p "MyApp Admin" -S ldap 'set desc="…"; add cmd=/opt/app/bin/ctl; end'Eigenes Rechtsprofil interaktiv anlegen
/etc/user_attr, /etc/user_attr.d/Zuordnung User → Rollen/Profile (in 11 auch als Fragmentdateien)
/etc/security/prof_attr, /etc/security/exec_attrDefinition der Rechtsprofile und der darin erlaubten Kommandos
/etc/security/auth_attrAlle bekannten Autorisierungen mit Beschreibung
visudo; sudo -lsudo ist ebenfalls vorhanden – RBAC ist der Solaris-eigene Weg

Privilegien (Least Privilege)

ppriv -lAlle im Kernel definierten Privilegien auflisten
ppriv -l -v net_privaddrBeschreibung eines einzelnen Privilegs
ppriv $$Privilegien-Sets der eigenen Shell (E, P, I, L)
ppriv -S <pid>Privilegien eines laufenden Prozesses vereinfacht anzeigen
ppriv -eD cmdKommando starten und protokollieren, welche Privilegien fehlen
ppriv -s A-net_rawaccess -e cmdKommando mit reduzierten Privilegien starten
svccfg -s myapp setprop start/privileges = astring: basic,net_privaddrDienst mit minimalen Privilegien laufen lassen

ZFS-ACLs & Dateirechte

chmod 750 datei; chown user:group dateiKlassische POSIX-Rechte
umask 022Standardrechte für neue Dateien
ls -v dateiZFS-ACL im ausführlichen Format anzeigen
ls -V dateiZFS-ACL kompakt anzeigen
chmod A+user:rene:rwx:allow dateiACL-Eintrag hinzufügen
chmod A+group:dba:read_data/write_data:allow dateiFeingranulare Rechte für eine Gruppe
chmod A0- dateiErsten ACL-Eintrag (Index 0) löschen
chmod A- dateiAlle nicht-trivialen ACL-Einträge entfernen
chmod -R A+user:rene:rwx:fd:allow /dataRekursiv mit Vererbung auf Dateien und Verzeichnisse
zfs set aclinherit=passthrough tank/dataVererbungsverhalten der ACLs steuern
zfs set aclmode=passthrough tank/dataVerhalten von chmod auf vorhandene ACLs

Auditing, BART & Compliance

auditconfig -getpolicy / -getflagsAudit-Policy und aktive Klassen anzeigen
auditconfig -setflags lo,ad,exAudit-Klassen setzen (Logins, Administration, exec)
auditreduce -d 20260818 | praudit -x | moreAudit-Trail eines Tages filtern und lesbar ausgeben
audit -s / audit -nAudit-Konfiguration neu laden / Logdatei rotieren
svcadm enable auditd; svcs auditdAudit-Dienst aktivieren und prüfen
bart create -R / > /var/tmp/bart_$(date +%F).manifestDatei-Fingerprint des Systems erzeugen
bart create -r /etc/bart/rules > manifest.neuNur definierte Bereiche erfassen
bart compare manifest.alt manifest.neuWelche Dateien haben sich geändert? (Change-Nachweis)
compliance list -pVerfügbare Compliance-Benchmarks und Profile (ab 11.2)
compliance assess -b solaris -p BaselineBewertung gegen die Solaris-Security-Baseline durchführen
compliance list -aBereits durchgeführte Assessments auflisten
compliance report -a <assessment> -f /var/tmp/report.htmlHTML-Bericht erzeugen (Audit-taugliche Dokumentation)
/etc/pam.conf, /etc/pam.d/PAM-Stacks (in 11.4 aufgeteilt nach Diensten)
RBAC statt sudo-Wildwuchs: Eine Rolle anlegen (roleadd -P "…"), dem Admin zuweisen (usermod -R) und die Profil-Shell setzen. Der Admin arbeitet dann ohne root-Passwort, jede Aktion ist über den Audit-Trail nachvollziehbar.
Immutable Zones: Mit zonecfg -z z1 set file-mac-profile=fixed-configuration wird die Zone read-only – nicht einmal root in der Zone kann Systemdateien ändern. Werte: none, strict, fixed-configuration, flexible-configuration.

🧮Zonen, Kernel Zones & LDoms

Zonen verwalten

zoneadm list -cvAlle konfigurierten Zonen mit ID, Status, Pfad, Brand und IP-Typ
zoneadm list -ivNur installierte bzw. laufende Zonen
zonename; zoneadm list -pEigene Zone / maschinenlesbare Liste
zonecfg -z z1 infoKomplette Konfiguration einer Zone anzeigen
zonecfg -z z1 export > /var/tmp/z1.cfgKonfiguration sichern bzw. auf anderen Host übertragen
zonecfg -z z1 -f /var/tmp/z1.cfgZone aus einer Konfigurationsdatei erzeugen
zonecfg -z z1Interaktiv konfigurieren (create, set, add, verify, commit)
zoneadm -z z1 verifyKonfiguration auf Plausibilität prüfen, ohne zu installieren
zoneadm -z z1 installZone installieren (IPS holt die Pakete vom Publisher)
zoneadm -z z1 install -c /var/tmp/z1-profile.xmlMit vorbereitetem System-Configuration-Profil (unattended)
zoneadm -z z1 boot / halt / rebootZone starten / hart stoppen / neu starten
zoneadm -z z1 shutdownZone sauber herunterfahren (Dienste werden gestoppt)
zlogin -C z1An die Zonenkonsole (Erstkonfiguration); Lösen mit ~.
zlogin z1 / zlogin z1 svcs -xvShell in der Zone / einzelnes Kommando ausführen
zoneadm -z z1 detach / attachZone abmelden bzw. auf anderem Host anmelden (Umzug)
zoneadm -z z1 attach -uBeim Anhängen an den Paketstand des neuen Hosts anpassen
zoneadm -z z2 clone z1Zone klonen (ZFS-Klon, in Sekunden fertig)
zoneadm -z z1 uninstall -FZone deinstallieren, Konfiguration bleibt erhalten
zonecfg -z z1 delete -FZonenkonfiguration endgültig entfernen
zoneadm -z z1 move /zones_neu/z1Zonepath verschieben
zonestat -z z1 5Ressourcenverbrauch einer Zone live beobachten
zonep2vchk -bPhysisches System auf Zonen-Tauglichkeit prüfen (P2V-Vorbereitung)
/etc/zones/index, /etc/zones/z1.xmlZonenregister und -konfiguration auf dem Global-Zone-Dateisystem

Typische zonecfg-Bausteine

create; set zonepath=/zones/z1; set autoboot=trueGrundgerüst einer Solaris-Zone
add anet; set lower-link=net0; endAutomatische VNIC (Exclusive-IP) – Standard in Solaris 11
add anet; set lower-link=net0; set allowed-address=10.0.0.21/24; endZone auf eine feste IP festlegen
add net; set physical=net1; set address=10.0.0.22/24; endShared-IP-Variante (klassisch, auch Solaris 10)
add dataset; set name=tank/zonedata; endZFS-Dataset an die Zone delegieren
add fs; set dir=/opt/app; set special=/export/app; set type=lofs; endVerzeichnis der Global Zone einbinden
add capped-memory; set physical=8g; set swap=16g; endSpeicher begrenzen
set cpu-shares=200 / add capped-cpu; set ncpus=4; endCPU-Anteil bzw. harte CPU-Grenze
add dedicated-cpu; set ncpus=2-4; endEigenen Prozessorpool zuweisen
create -t SYSsolaris-kzKernel Zone: eigener Kernel, unabhängig aktualisierbar
create -t SYSsolaris10Solaris-10-Branded Zone (Migration alter S10-Systeme)
set file-mac-profile=fixed-configurationImmutable Zone (read-only Root)
set limitpriv=default,dtrace_proc,dtrace_userZusätzliche Privilegien in der Zone erlauben

LDoms / Oracle VM Server for SPARC

virtinfo -aRolle des Systems: Control Domain, Guest Domain, Kernel Zone?
svcadm enable ldmd; ldm listLDom-Manager starten und alle Domains auflisten
ldm list -l primaryVollständige Konfiguration einer Domain
ldm list -o network,disk dom1Nur bestimmte Bereiche der Konfiguration anzeigen
ldm list-bindingsWelche Ressourcen sind welcher Domain fest zugeordnet
ldm list-devices -aAlle freien und belegten Ressourcen der Plattform
ldm list-servicesVirtuelle Dienste: vsw, vds, vcc (Konsolen-Konzentrator)
ldm add-domain dom1Neue Guest Domain anlegen
ldm add-vcpu 16 dom1 / ldm remove-vcpu 8 dom1vCPUs dynamisch hinzufügen/entziehen
ldm set-memory 32g dom1Speicher der Domain setzen
ldm add-vdsdev /dev/zvol/dsk/tank/dom1 vol1@primary-vds0Backend-Device im Virtual Disk Service bereitstellen
ldm add-vdisk vdisk0 vol1@primary-vds0 dom1Virtuelle Platte der Domain zuweisen
ldm add-vnet vnet0 primary-vsw0 dom1Virtuelles Netzwerk anbinden
ldm bind dom1; ldm start dom1Ressourcen binden und Domain starten
ldm stop dom1; ldm unbind dom1Domain stoppen und Ressourcen freigeben
telnet localhost 5000Auf die virtuelle Konsole einer Domain (Port aus ldm list)
ldm add-spconfig prod-2026-08Konfiguration im Service Processor sichern – sonst nach Power-Cycle weg!
ldm list-spconfigGespeicherte Konfigurationen und die aktive anzeigen
ldm set-spconfig prod-2026-08Konfiguration für den nächsten Plattform-Neustart wählen
ldm migrate-domain dom1 root@sparc02Live-Migration auf einen anderen SPARC-Server
LDom-Klassiker: Nach jeder Änderung an der Domain-Konfiguration ldm add-spconfig ausführen. Ohne gesicherte Konfiguration bootet die Plattform nach einem Power-Cycle in die factory-default-Konfiguration – alle Guest Domains sind dann verschwunden.
Zone vs. Kernel Zone: Normale Zonen teilen den Kernel der Global Zone und werden mit ihr aktualisiert – sparsam und schnell. Kernel Zones haben einen eigenen Kernel, lassen sich unabhängig patchen und live migrieren, kosten aber mehr Ressourcen.

🚨Fehleranalyse, FMA & Logs

Erste Diagnoseschritte

svcs -xvWelche Dienste sind kaputt und warum – immer als Erstes
zpool status -xSind alle Pools gesund?
fmadm faultyVon der FMA diagnostizierte Defekte mit UUID und FRU
fmadm faulty -aAuch bereits behobene bzw. quittierte Diagnosen
fmadm repaired <fmri|uuid>Nach dem Hardwaretausch als repariert markieren
fmadm acquit <uuid>Fehldiagnose freisprechen (Bauteil war doch in Ordnung)
fmadm configGeladene Diagnose-Module der FMA
fmdumpFault-Log: alle abgeschlossenen Diagnosen mit Zeitstempel
fmdump -eV | moreRohe Fehler-Events mit allen Details (ereport-Payload)
fmdump -eV -t "18Aug2026 08:00"Events ab einem Zeitpunkt einschränken
fmdump -Vu <uuid>Alle Events zu einer konkreten Diagnose
fmstatStatistik je Diagnose-Modul (welches Modul feuert?)
prtdiag -vHardwarestatus inkl. der Abschnitte Failed und Environmental
iostat -En | grep -v "0 Hard"Nur Platten mit Fehlerzählern > 0 anzeigen
dmesg | tail -50Letzte Kernelmeldungen (liest aus /var/adm/messages)
svcs -Lv <fmri> | tail -40Logdatei des betroffenen Dienstes direkt lesen

Logs

/var/adm/messagesZentrales Systemlog (Kernel, Treiber, Dienste)
tail -f /var/adm/messagesLive mitlesen – parallel zur Fehlerreproduktion
/var/adm/messages.0 … .3Von logadm rotierte ältere Logs
/etc/syslog.confWohin schreibt syslogd welche Facility/Level
svcadm refresh system-logsyslog.conf neu einlesen
svcs -a | grep system-log11.4: Instanzen :default (syslogd) und :rsyslog
pkg install rsyslog; svcadm enable system-log:rsyslog11.4: rsyslog als Alternative aktivieren (nur eine Instanz online!)
logadm -VAlle Rotationsregeln aus /etc/logadm.conf prüfen
logadm -w myapp -C 8 -c -p 1d /var/log/myapp/app.logEigene Rotationsregel anlegen (8 Generationen, täglich)
logadm -p now myappRotation sofort auslösen (zum Testen)
/var/svc/log/Logdateien aller SMF-Dienste
/var/log/syslog, /var/log/authlogMail- bzw. Authentifizierungsmeldungen
/var/adm/utmpx, /var/adm/wtmpxAktuelle und historische Logins (binär, mit who/last)
/var/log/zones/Konsolen- und Installationslogs der Zonen

Kernel-Debugger & Support-Daten

mdb -kKernel-Debugger am laufenden System (Ausstieg mit ::quit)
mdb -k -e "::status"Kurzstatus: Release, Plattform, Panic-Zustand
mdb 1 (in /var/crash)Crash-Dump Öffnen (unix.1 + vmcore.1)
> ::statusÜberblick zum geladenen Dump
> ::panicinfoPanic-Meldung, Register und auslösender Thread
> ::msgbufKernel-Meldungspuffer zum Zeitpunkt des Absturzes
> ::stack / ::threadlist -vAktueller Stack bzw. alle Threads mit Stacks
> ::ps / ::pgrep javaProzessliste im Dump / gezielt suchen
> ::memstatSpeicherverteilung (Kernel, ZFS-ARC, Anon, Page Cache, Free)
> ::kmastatKernel-Memory-Allocator-Statistik (Leak-Suche)
> ::arcZFS-ARC-Details im Dump
explorerOracle Explorer (Services Tools Bundle): komplette Supportdatensammlung
explorer -w default,zfs,netNur bestimmte Module sammeln
/var/explorer/output/Ergebnisarchiv des Explorer für den Oracle-Support
/usr/lib/scrub/…; prtdiag -v; showrev -aErgänzende Systemdaten für den Support-Call
Standard-Diagnosekette: svcs -xv → fmadm faulty → zpool status -x → tail -100 /var/adm/messages → iostat -En → prtdiag -v. Damit sind die meisten Störungen in fünf Minuten eingegrenzt.
Vor dem Oracle-Support-Call: explorer laufen lassen, dazu cat /etc/release, pkg info entire, den passenden Dump aus /var/crash und die Ausgabe von fmdump -eV bereithalten.

💾Backup, Recovery & Installation

ZFS als Backup-Standard

zfs snapshot -r tank@$(date +%Y%m%d-%H%M)Konsistenter Snapshot des ganzen Baums als Backup-Basis
zfs send -R tank/data@voll | ssh sol02 zfs recv -Fdu tank2Vollreplikation auf einen zweiten Server
zfs send -i @gestern tank/data@heute | ssh sol02 zfs recv tank2/dataTägliches Inkrement – nur die geänderten Blöcke gehen übers Netz
zfs send -R tank/data@snap | gzip > /backup/data_$(date +%F).zfs.gzStream als Datei archivieren (z. B. auf NFS-Share)
gunzip -c /backup/data.zfs.gz | zfs recv -F tank/dataAus dem Stream zurückspielen
zfs list -t snapshot -o name,creation -r tank | tailSnapshot-Kette und Aufbewahrung kontrollieren
zfs destroy tank/data@alt1%alt7Alte Snapshots einer Generation aufräumen
beadm create pre-change-$(date +%F)Systemseitiges Rollback vor jedem Change
zpool status rpool; bootadm install-bootloader -P rpoolRoot-Pool-Spiegel prüfen und Bootloader auf alle Platten schreiben

Klassische Werkzeuge

tar cvf /backup/etc.tar /etctar-Archiv (xvf entpacken, tvf listen)
tar cvEf /backup/data.tar /dataMit erweiterten Attributen/ACLs sichern
find /data -depth -print | cpio -ocv > /backup/data.cpiocpio-Sicherung
cpio -icvdm < /backup/data.cpiocpio-Restore mit Verzeichnisstruktur
find . -depth -print | cpio -pdumv /zielVerzeichnisbaum rechtetreu kopieren
pax -rw -pe /data /backup/datapax: kopieren mit Erhalt aller Attribute
dd if=/dev/rdsk/c1t0d0s0 of=/backup/s0.dd bs=1024kRaw-Kopie einer Partition
rsync -avz --delete /data/ sol02:/data/Inkrementell synchronisieren (Paket network/rsync)
mt -f /dev/rmt/0n status / rewind / fsf 1Bandlaufwerk steuern (n = no rewind)
ufsdump 0uf /dev/rmt/0 /dataUFS-Vollsicherung (nur für UFS-Altbestände)
flarcreate -n sol10img -c /export/sol10.flarFlash-Archive des ganzen Systems (nur Solaris 10)
flar info /export/sol10.flarInhalt eines Flash-Archivs prüfen (nur Solaris 10)

Installation & Notfall-Recovery

installadm create-service -n s11-4-sparc -s /repo/sol-11_4-ai.isoAutomated-Installer-Service anlegen (Solaris 11)
installadm list -m -pAI-Services, Manifeste und Profile auflisten
installadm create-client -e 00:14:4f:aa:bb:cc -n s11-4-sparcClient per MAC-Adresse an einen AI-Service binden
installadm create-manifest -n s11-4-sparc -f manifest.xmlEigenes AI-Manifest hinterlegen
sysconfig create-profile -o /var/tmp/sc.xmlSystem-Configuration-Profil interaktiv erzeugen
sysconfig unconfigure -g systemSystem für Klonen/Auslieferung zurücksetzen (ersetzt sys-unconfig)
sys-unconfigSystemidentität zurücksetzen (nur Solaris 10)
setup_install_server / add_install_clientJumpStart-Installationsserver (nur Solaris 10)
ok> boot cdrom -s (bzw. AI-Media, Option "Shell")Rettungsboot in die Wartungsumgebung
zpool import -f -R /a rpoolRoot-Pool von außen importieren
beadm list -a; zfs mount rpool/ROOT/solarisBE finden und einhängen, Konfiguration reparieren
bootadm update-archive -R /a; bootadm install-bootloader -R /a -P rpoolBoot-Archiv und Bootloader des Alt-Systems reparieren
zpool export rpool; rebootNach der Reparatur sauber exportieren und neu starten
zpool import -f tankDatenpool nach Systemtausch übernehmen (Hostid weicht ab)
zpool import -D -f tankVersehentlich zerstörten Pool wiederherstellen
Backup-Routine Solaris 11: Stündlich/täglich zfs snapshot -r, täglich zfs send -i auf einen zweiten Server, wöchentlich ein zfs send -R-Vollstream aufs Band/NFS, vor jedem Change beadm create. Restore mindestens einmal jährlich testen – ein ungetestetes Backup ist kein Backup.
Snapshot ist kein Backup: Snapshots liegen im gleichen Pool. Geht der Pool verloren, sind sie mit weg. Erst die Replikation per zfs send auf ein zweites System macht daraus ein Backup.

📄Wichtige Dateien & Verzeichnisse

/etc/releaseGenaue OS-Version – erste Datei bei jeder Analyse
/etc/vfstabMount-Tabelle; in Solaris 11 nur noch UFS, Swap, NFS, legacy-ZFS
/etc/mnttabTatsächlich gemountete Dateisysteme (Kernel, read-only)
/etc/dfs/dfstab, /etc/dfs/sharetabNFS-Freigaben (dfstab nur Solaris 10) bzw. aktive Shares
/etc/inet/hosts, /etc/inet/ipnodesLokale Namensauflösung (/etc/hosts ist ein Symlink)
/etc/resolv.conf, /etc/nsswitch.confDNS und Reihenfolge der Namensquellen (in 11 aus SMF generiert)
/etc/hostname.<if>, /etc/defaultrouterNetzkonfiguration (nur Solaris 10)
/etc/inet/ntp.confZeitsynchronisation
/etc/systemKernel-Parameter beim Boot – in 11 nur noch selten nötig
/etc/default/initSystemweite Defaults wie TZ, LANG (Solaris 10 Zeitzone)
/etc/default/passwd, /etc/default/login, /etc/default/suPasswortregeln, Login-Verhalten, su-Protokollierung
/etc/security/policy.confStandardprofile, Privilegien und Krypto-Verfahren
/etc/user_attr, /etc/security/prof_attr, exec_attr, auth_attrRBAC-Datenbanken
/etc/profile, /etc/skel/Login-Umgebung für alle User bzw. Vorlagen für neue Homes
/etc/motd, /etc/issueBegrüßungstext nach bzw. vor dem Login
/etc/logadm.confRegeln der Logrotation
/etc/syslog.confZiele der syslog-Meldungen
/etc/zones/, /etc/zones/indexZonenkonfigurationen und -register
/etc/firewall/pf.confFirewall-Regelwerk (Solaris 11.4)
/etc/ipf/ipf.confIP-Filter-Regeln (Solaris 10 / 11.3)
/etc/driver/drv/*.confTreiberparameter in Solaris 11 (in 10: /kernel/drv/)
/etc/lvm/md.tab, /etc/lvm/mddb.cfSVM-Konfiguration (Altbestand)
/etc/auto_master, /etc/auto_homeAutomounter-Maps
/var/adm/messagesZentrales Systemlog
/var/svc/log/, /var/svc/manifest/SMF-Logs bzw. Site-Manifeste
/lib/svc/manifest/, /lib/svc/method/Von Paketen gelieferte SMF-Manifeste und -Methoden
/var/spool/cron/crontabs/Crontabs aller User
/var/crash/Ausgewertete Crash-Dumps
/var/sadm/pkg/, /var/sadm/patch/SVR4-Paket- und Patch-Datenbank (Solaris 10)
/var/pkg/IPS-Metadaten und Publisher-Kataloge (Solaris 11)
/dev/dsk/, /dev/rdsk/Block- bzw. Raw-Devices der Platten
/dev/zvol/dsk/rpool/…ZFS-Volumes (Swap, Dump, LDom-Backends)
/dev/rmt/0, /dev/rmt/0nBandlaufwerk mit / ohne automatisches Zurückspulen
/devices/, /dev/cfg/Physischer Gerätebaum bzw. Controller-Links

Standard-Datasets im rpool

rpool/ROOTContainer aller Boot Environments
rpool/ROOT/solarisAktives Boot Environment (Root-Dateisystem)
rpool/ROOT/solaris/varEigenes Dataset für /var je BE
rpool/VARSHAREBE-übergreifend gemeinsame Teile von /var (z. B. /var/mail)
rpool/export, rpool/export/homeHome-Verzeichnisse
rpool/swap, rpool/dumpSwap- und Dump-Volumes

🔧Shell-Tipps & Praxis-Workflows

Shell & Werkzeuge

echo $SHELL; pkg list shell/bashStandard-Shell in Solaris 11 ist bash, in 10 ksh/sh
set -o vivi-Editiermodus in ksh/bash (Esc + k für History)
which cmd / whence -v cmd / type cmdPfad und Typ eines Kommandos
man -k begriff / man -s 8 zfsManpages durchsuchen / gezielte Sektion (11.4: 8 statt 1M)
PATH=/usr/gnu/bin:$PATHGNU-Varianten der Standardwerkzeuge nutzen (Solaris 11)
/usr/xpg4/bin/grep -E, /usr/xpg6/bin/POSIX-konforme Varianten – wichtig bei portablen Skripten
nawk '{print $1,$5}' dateiAuf Solaris ist nawk die brauchbare awk-Variante
sed -e 's/alt/neu/g' datei > neu.txtTextersetzung
for p in $(zpool list -H -o name); do zpool status -x $p; doneSchleife über alle Pools
zoneadm list -p | cut -d: -f2Alle Zonennamen skriptfreundlich extrahieren
script /var/tmp/session_$(date +%F).logTerminalsitzung protokollieren (Change-Nachweis)
tee -a /var/tmp/logAusgabe anzeigen und gleichzeitig mitschreiben
nohup ./skript.sh > /var/tmp/out 2>&1 &Langlaufende Skripte abgekoppelt starten
df -h; du -sk /var/* | sort -rn | head -20Platzverbrauch eingrenzen
find /var -xdev -size +100000c -ls | sort -k7 -rn | headGroße Dateien ohne Mount-Grenzen zu überschreiten
digest -a sha256 datei; elfdump -d /usr/bin/lsChecksumme bilden / ELF-Abhängigkeiten prüfen
isaexec, ldd /usr/bin/lsBibliotheksabhängigkeiten eines Programms

Workflow: Neue LUN einbinden und ZFS-Pool erweitern

# 1) LUN im Storage zonen/mappen, dann auf dem Host sichtbar machen
cfgadm -al                                  # Attachment Points pruefen
cfgadm -c configure c3                      # ggf. Controller konfigurieren
devfsadm -Cv                                # Geraetebaum aktualisieren
echo | format                               # neue Platte identifizieren
mpathadm list lu                            # alle Pfade aktiv? Operational Path Count
luxadm display /dev/rdsk/c0t60060160…d0s2  # Pfaddetails pruefen

# 2) In den Pool aufnehmen - Redundanz beibehalten!
zpool status tank
zpool add tank mirror c0t60060160AAd0 c0t60060160BBd0
zpool list tank && zpool status -v tank

# 3) Vorhandene LUN wurde nur vergroessert
zpool set autoexpand=on tank
zpool online -e tank c0t60060160AAd0        # falls autoexpand nachtraeglich
zpool list tank                             # SIZE muss gewachsen sein

Workflow: Update mit Boot Environment (der sichere Weg)

pkg publisher                               # zeigt der Publisher aufs richtige Repo?
pkg update -nv                              # Planung ansehen, NICHTS aendern
zpool list rpool                            # genug Platz fuer ein weiteres BE?
beadm list                                  # alte BEs ggf. aufraeumen

pkg update --be-name s11.4-sru42 --accept   # Update in ein neues BE
beadm list                                  # neues BE hat Flag "R" (reboot)
init 6

# --- nach dem Reboot ---
cat /etc/release; pkg info entire           # neuer Stand?
svcs -xv                                    # alle Dienste sauber?
zpool status -x; ipadm show-addr

# --- Rollback, falls etwas nicht laeuft ---
beadm list                                  # altes BE heraussuchen
beadm activate solaris                      # altes BE reaktivieren
init 6                                      # nach Reboot ist alles wie vorher
beadm destroy -F s11.4-sru42                # spaeter aufraeumen

Workflow: Dienst hängt oder startet nicht

svcs -xv                                    # welcher Dienst, welche Ursache?
svcs -l svc:/network/http:apache24          # Zustand, Restarter, Dependencies
svcs -d svc:/network/http:apache24          # fehlt eine Abhaengigkeit?
svcs -Lv svc:/network/http:apache24 | tail -40   # Logdatei lesen

# Ursache beheben (Config, Port belegt, Dateirechte, Filesystem voll)
netstat -an -f inet | grep LISTEN
svcprop -p start/exec svc:/network/http:apache24  # was wird ueberhaupt gestartet?

svcadm clear svc:/network/http:apache24      # aus maintenance holen
svcs -x svc:/network/http:apache24           # Kontrolle

# Wenn der Dienst danach weiter faellt:
svcadm disable -s svc:/network/http:apache24
svcadm enable  -s svc:/network/http:apache24
tail -f /var/svc/log/network-http:apache24.log

Workflow: Netzwerk dauerhaft konfigurieren (mit Aggregation)

# Ausgangslage pruefen
dladm show-phys
dladm show-link
ipadm show-if; ipadm show-addr

# LACP-Aggregation aus zwei Ports bauen
ipadm delete-ip net0 2>/dev/null            # Link muss frei von IP sein
ipadm delete-ip net1 2>/dev/null
dladm create-aggr -P L2,L3 -L active -l net0 -l net1 aggr0
dladm show-aggr -x                          # LACP auf beiden Ports "active"?
dladm set-linkprop -p mtu=9000 aggr0        # optional Jumbo Frames

# IP persistent vergeben
ipadm create-ip aggr0
ipadm create-addr -T static -a local=10.0.0.10/24 aggr0/v4
ipadm set-ifprop -p mtu=9000 -m ipv4 aggr0  # MTU auch auf IP-Ebene!
route -p add default 10.0.0.1               # -p = ueber Reboot hinaus

# DNS im SMF hinterlegen
svccfg -s dns/client setprop config/nameserver = net_address: "(10.0.0.53)"
svccfg -s dns/client setprop config/search    = astring: "(intern.example)"
svcadm refresh dns/client; svcadm restart name-service/cache

# Kontrolle
ipadm show-addr; netstat -rn; getent hosts sol02; ping -s 10.0.0.1 56 3

Workflow: Zone anlegen und starten

zfs create -o mountpoint=/zones rpool/zones
chmod 700 /zones

zonecfg -z web01 <<'EOF'
create
set zonepath=/zones/web01
set autoboot=true
add anet
  set lower-link=net0
  set allowed-address=10.0.0.21/24
  set defrouter=10.0.0.1
end
add capped-memory
  set physical=8g
  set swap=16g
end
set cpu-shares=200
verify
commit
EOF

zoneadm -z web01 verify
zoneadm -z web01 install                     # holt Pakete vom IPS-Publisher
zoneadm -z web01 boot
zlogin -C web01                              # Erstkonfiguration, Loesen mit ~.
zoneadm list -cv; zonestat -z web01 5

Workflow: ZFS-Backup per send/recv auf zweiten Server

# Einmalig: Vollreplikation
zfs snapshot -r tank/data@voll-$(date +%F)
zfs send -R tank/data@voll-2026-08-18 | \
    ssh root@sol02 zfs recv -Fdu tank2
ssh root@sol02 "zfs list -r tank2/data"

# Taeglich: Inkrement gegen den letzten uebertragenen Snapshot
LAST=$(ssh root@sol02 "zfs list -H -o name -t snapshot -r tank2/data | tail -1")
echo "Ziel steht auf: $LAST"
zfs snapshot -r tank/data@$(date +%F)
zfs send -i tank/data@2026-08-17 tank/data@2026-08-18 | \
    ssh root@sol02 zfs recv -u tank2/data

# Kontrolle und Aufraeumen
zfs list -t snapshot -o name,used,creation -r tank/data | tail
zfs destroy -n -v -r tank/data@2026-08-01    # erst Testlauf lesen!
zfs destroy -r tank/data@2026-08-01
Merksatz Solaris 11: Konfiguration lebt in drei Datenbanken – SMF (Dienste, Hostname, DNS), ZFS-Properties (Mounts, Shares, Quotas) und ipadm/dladm (Netz). Klassische Dateien wie /etc/vfstab oder /etc/dfs/dfstab sind nur noch Randfälle. Wer die Datei editiert statt das Kommando zu nutzen, verliert die Änderung beim nächsten Refresh.
Change-Vorbereitung (Standard): cat /etc/release, pkg info entire, svcs -xv, zpool status -x, ipadm show-addr, netstat -rn, df -h in eine Datei sichern – danach beadm create. Erst dann anfangen.