Linux

Juni 4, 2014

Fehlermeldung des Tages

Fehlermeldung des Tages:
Out of memory: Kill process 8177 (...) score 235 or sacrifice child

Kategorien Linux
Tagged Out of Memory sacrifice child
Mobil qrcode zeigen

0 Kommentare

Nov. 22, 2011

Linuxtipp: Welche Prozesse benutzen Swap?

Wenn ein Linux-System Auslagerungsspeicher nutzt, wird es normalerweise langsam, weil das Lesen von der Festplatte deutlich langsamer ist als das Lesen aus dem RAM. Wenn ein Prozess wirklich nicht benutzt wird kann er allerdings im Swap liegen und das System läuft sogar schneller, weil es den RAM des Prozesses wieder zur Verfügung hat.

Ob man wirklich mehr RAM braucht hängt also davon ab ob Prozesse, die aktiv genutzt werden, im Swap liegen oder nur Prozesse, die ausgelagert wurden, weil sie sowieso inaktiv sind.

Nur wie stellt man das fest? Mit den gängigen Linux-Tools ist das schwer auszulesen. Aber es gibt Abhilfe:

Erik Ljungstrom hat ein praktisches Shellscript geschrieben, das ausgibt welcher Prozess wieviel Swap benutzt.

Beispiel:

$ sudo ~/bin/swapusage.sh 
PID=1 - Swap used: 108 - (init )
PID=2 - Swap used: 0 - (kthreadd )
[...]
PID=312 - Swap used: 472 - (udevd )
PID=438 - Swap used: 460 - (udevd )
PID=439 - Swap used: 512 - (udevd )
[...]
PID=3057 - Swap used: 956 - (console-kit-dae )
PID=3171 - Swap used: 64 - (screen )
PID=3172 - Swap used: 14224 - (irssi )
[...]
PID=24750 - Swap used: 0 - (bash )
PID=24794 - Swap used: 0 - (screen )
PID=25387 - Swap used: 0 - (bash )
PID=25445 - Swap used: 0 - (sudo )
PID=25446 - Swap used: 0 - (swapusage.sh )
[...]

(Ausgabe gekürzt)

In dem Beispiel ist das einzige Programm das nennenswert Daten im Swap liegen hat irssi. Da irssi trotzdem nicht spürbar langsam ist liegt der Verdacht nahe dass vielleicht längere Backlogs im Swap liegen, die nur nötig sind wenn man wirklich mal in einem Fenster wieder hochscrollt.

Kategorien Linux
Tagged linux Tipp Swap Shell Script
Mobil qrcode zeigen

0 Kommentare

Nov. 19, 2009

Bash-Prompt

Mal ein neuer Post zu praktischen Bash-Prompts, nachdem ich den alten doch wieder um einiges überarbeitet habe.

Ziele:

  • Übersichtlichkeit
  • Möglichst lange Eingabezeilen ohne Umbruch
  • Prompt soll auf verschiedenen Hosts unterscheidbar sein
  • Der Prompt soll möglichst informativ sein.
Lösung:
  • Zweizeiliger Prompt, eine Zeile mit vielen Informationen, eine mit nur einem > und der Eingabe dahinter.
  • Username und Hostname Farbkodiert, geschieht automatisch ueber eine Hashing-Funktion
  • Zeitausgabe ermöglicht es einfach zu sehen wann der Befehl beendet wurde, und damit auch wie lange er gebraucht hat.
  • Smiley in der Ausgabe zeigt ob der Befehl korrekt gelaufen ist (Return Code 0 = kein Fehler)
Um Farben aus hostname/username zu generieren, kann man einfach md5sum als hash-Funktion nutzen, und dann das erste Byte der md5summe ansehen. Das tut die Funktion hashcolor in meiner .bashrc. Dabei habe ich mir noch die Freiheit genommen, die Farben so zu sortieren, dass der Text  "root" eine Rote Farbe bekommt.

die Umgebungsvariable PROMPT_COMMAND darf einen Befehl enthalten, der ist in dem Falle die Funktion Prompt, welche auf der Linux-Konsole nur setps1 aufruft um den Prompt zu ändern, und in X-Terminals aber auch settitle und mittels Escape-Code den Titel des Fensters auf das letzte genutzte Kommando zu setyen.

Der Prompt sieht bei mir jetzt so aus:

12:59:56 :-) username@hostname:~

>

Die .bashrc dazu:
# If running interactively, then:
if [ "$PS1" ]; then
    ## aendert den xterm-Titel in das zuletzt benutzte Kommando usw.
    xtitle() {
        echo -ne "\033]0;[$(history 1 | cut -b 8-30)] $USER@$HOSTNAME:$PWD\007";
    }
    setps1() {
        if [ $? -eq 0 ];then smiley=":-)"; else smiley=":-(";fi
        export PS1="\t $smiley \[`hashcolor $USER`\]\u\[$grey\]@\[`hashcolor $HOSTNAME`\]\H\[$grey\]:\[$yellow\]\w\n\[$normal\]> "
    }
    if [ "${TERM}" != "linux" ]; then
        prompt() {
            setps1
            xtitle
        }
    else
        prompt() {
            setps1
        }
    fi
    PROMPT_COMMAND='prompt'
fi

normal='\e[0m' black='\e[0;30m' bblack='\e[1;30m' red='\e[0;31m' bred='\e[1;31m' green='\e[0;32m' bgreen='\e[1;32m' yellow='\e[0;33m' byellow='\e[1;33m' blue='\e[0;34m' bblue='\e[1;34m' purple='\e[0;35m' bpurple='\e[1;35m' blue2='\e[0;36m' bblue2='\e[1;36m' white='\e[0;37m' bwhite='\e[1;37m' grey='\e[0;39m' bgrey='\e[1;39m'

bgnorm='\e[0;0m' bgblack='\e[0;40m' bgred='\e[0;41m' bggreen='\e[0;42m' bgyellow='\e[0;43m' bgblue='\e[0;44m' bgpurple='\e[0;45m' bgblue2='\e[0;46m' bggrey='\e[0;47m'

function hashcolor { case $(echo $1|md5sum|cut -b 1) in 0)echo -en $red;; 1)echo -en $bblue;; 2)echo -en $green;; 3)echo -en $bgrey;; 4)echo -en $yellow;; 5)echo -en $byellow;; 6)echo -en $blue;; 7)echo -en $bred;; 8)echo -en $purple;; 9)echo -en $bpurple;; a)echo -en $blue2;; b)echo -en $bblue2;; c)echo -en $grey;; d)echo -en $bgreen;; e)echo -en $white;; f)echo -en $bwhite;; esac }

Die interessanten Manpages zu dem Thema sind:
  • man console_codes erklärt die Escape Codes z.B. für Farben oder auch um den Titel eines X-Terminals zu ändern.
  • man bash erklärt, dass man Farbcodes in \[...\] einschliessen sollte, damit sie den Zeilenumbruch im Prompt nicht kaputt machen.

Kategorien Software Linux
Tagged Bash Prompt color farben
Mobil qrcode zeigen

3 Kommentare

Okt. 30, 2009

Finger weg von Ubuntu One?

Dass es gefährlich ist private Daten unverschlüsselt auf fremden Servern zu lagern, sollte einem zwar klar sein, aber für manche Daten reicht diese Sicherheit ja vielleicht. Aber Ubuntu One hat eine ähnliche Klausel wie ICQ in ihren "Terms and Conditions":
9. Collection and use of your data. We may collect certain non-personally-identifiable information, which is located on your computer. The information collected may include statistics relating to how often data is transferred, and performance metrics in relation to software and configuration. You agree this information may be retained and used by Canonical.
Ähnlich wie im Falle ICQ kann man argumentieren "ja die meinen ja nur Statistiken ...", rechtlich jedoch akzeptiert man dass alle Daten die einen nicht persönlich identifizieren von Canoncial gesammelt und benutzt werden dürfen. Also Rat für alle die ihre Daten nicht Canoncial schenken möchten: Finger weg von Ubuntu One!

Ach ja, nur damit es erwähnt ist, sie lassen sich natürlich auch zusichern, dass sie die Nutzerdaten an die Polizei weitergeben dürfen, wenn sie gesetzlich dazu verpflichtet sind. Da wird man aber kaum einen Anbieter finden, der keine solche Klausel hat.

Kategorien Linux Sicherheit Datenschutz
Tagged Daten Ubuntu One Terms Conditions persönliche collect personally-identifiable
Mobil qrcode zeigen

0 Kommentare

Okt. 18, 2009

Ganz komischer Xorg Fehler

Vielleicht weiß ja jemand die Antwort, der Fehler ist sehr seltsam. Also ich kann in Browsern (Firefox, Opera nicht aber Konqueror) keine Zeichen mit AltGr eingeben, in anderen Programmen als den Beiden aber schon. Das wäre ja halb so komisch, und vielleicht ein Fehler in der xorg.conf bzw. der Tastaturconfig von KDE(4), aber ich habe zusätzlich noch einen Effekt:

Ich nutze Fokus-folgt-der-Maus. Wenn ich ein Fenster im Vordergrund vor dem Browser habe, welches den Fokus momentan hat, und der Mauszeiger befindet sich über dem Browser, kann ich in dem Fenster tippen, aber keine Zeichen die AltGr als Taste benötigen. befindet sich der Mauszeiger über dem Fenster mit Fokus, kann ich ganz normal alle Zeichen tippen.

Weiß irgendwer, was das für ein komischer Fehler sein kann?

Kategorien OpenSource Linux
Tagged Browser Opera Firefox Fehler Xorg komisch
Mobil qrcode zeigen

2 Kommentare

Feb. 24, 2009

.ape / .cue Dateien konvertieren

APE ist das Monkey's Audio Format, ein verlustfreier Audiocodec. Abgesehen davon kennt natürlich kaum ein Player das Format. Man kann die Dateien aber unter Linux mit den Programmen mplayer, bchunk, lame relativ einfach konvertieren: mplayer -vo null -vc null -ao pcm:fast *ape;bchunk -w audiodump.wav *.cue track;rm audiodump.wav;for i in *.wav;do lame --preset extreme $i;done;rm *.wav Im Detail: mplayer -vo null -vc null -ao pcm:fast *.ape Spielt die .ape Datei quasi ab und speichert das Ergebnis in audiodump.wav. bchunk -w audiodump.wav *.cue track trennt audiodump.wav an den Stellen die in der .cue Datei stehen, und nennt die Ergebnisse trackXY.wav. Mit -w schreibt es zusätzlich Wave-Header. rm audiodump.wav Entfernt audiodump.wav damit es nicht auch (als Ganzes) nochmal kodiert wird. for i in *.wav;do lame --preset extreme $i;done Kodiert die .wav in .mp3 mit sehr guter Qualität. rm *.wav Entfernt die übrig gebliebenen .wav Dateien.

Die Commandline geht davon aus, dass sich im Verzeichnis nur eine .ape und eine .cue Datei befinden, und dann funktioniert der Befehl ohne die Namen zu kennen. Befinden sich mehrere im aktuellem Ordner, funktionieren die Anweisungen nicht, weil zum Beispiel der erste audiodump.wav durch den zweiten direkt überschrieben wird.

Kategorien Software Linux
Tagged APE CUE konvertieren
Mobil qrcode zeigen

3 Kommentare

Aug. 19, 2008

OpenVZ

OpenVZ ist übrigens ein schönes Spielzeug. Ich nutze es gerade auf meinem Desktop-PC u.a. um die Software-Installation vom Server nachzustellen.

Schade, dass Checkpoints in den Debian-OpenVZ-Kerneln deaktiviert sind.

Kategorien Linux
Tagged Debian OpenVZ Server Virtualisierung
Mobil qrcode zeigen

0 Kommentare

April 23, 2008

Tipp: Textfelder in KDE/Qt/Gtk beschleunigen

Es sind zwar nur 50-150ms jeweils, aber dafür kostet es auch fast keinen Aufwand:
$ mkdir ~/.compose-cache
Erklärung und mehr dazu: Rob's KDE Blog: Magic Trick

Kategorien Linux Kurz bemerkt Software
Tagged Tipps KDE Compose Compose-Cache Gtk Qt
Mobil qrcode zeigen

0 Kommentare

März 31, 2008

EEE-PC mit Windows

Asus EEE-PCDer EEE-PC mit Windows wird genausoviel kosten wie mit Linux. Damit dürfte der Linux-Nutzer wohl den Windows-Nutzer mitfinanzieren. Und die Leute werden wieder einmal nicht bemerken, wieviel Geld sie bei neuen PCs für das enthaltene Windows ausgeben. Dabei wäre der EEE-PC ja die ideale Platform gewesen um zu demonstrieren, dass Linux nicht nur billiger ist, sondern auch für die meisten Leute Windows vollständig ersetzen kann.

Außerdem kann man damit rechnen, dass auf der Hardware Windows langsam laufen wird, was schlechte Testberichte für den EEE-PC bewirken könnte. Auch werden von den 4 GB Flashspeicher wohl nur noch 1,8 GB verfügbar sein auf dem Windows-Modell. Werden dann die nötigen Programme installiert, bleibt für Daten wirklich wenig übrig. Das Xandros-Linux hingegen, welches bisher Standard ist bringt bereits die wichtigsten Programme (wie Multi-Messanger) mit

Kategorien Linux Windows
Tagged Technik EEE-PC
Mobil qrcode zeigen

0 Kommentare

März 24, 2008

nilfs2: Ein log-structured file system für Linux

Achtung: Dies ist ein Artikel für technisch Interessierte, die bereits mit der Linux-Shell umgehen können und wissen was sie tun. Alle anderen sollten lieber eines der Standard-Dateisysteme wie ext3, xfs oder ReiserFS verwenden, die bereits im Linux-Kernel enthalten sind.

Nilfs2 ist ein log-structured file system. Das heißt, dass Daten bei bearbeitung nicht überschrieben werden, sondern an eine andere Stelle geschrieben werden, sodass das Original erhalten bleibt.

Ähnlich wie bei Journalling Dateisystemen führt dies dazu, dass im Falle eines Ausfalls keine Daten nur halb geschrieben sind. Aber auch nach der Schreiboperation bleibt der alte Zustand erhalten, und kann zum Beispiel genutzt werden um gelöschte Dateien wiederherzustellen. Dazu nutzt Nilfs2 Checkpoints und Snapshots. Bearbeitet man Dateien, erstellt Nilfs2 ca. alle 30 Sekunden einen Checkpoint, welcher in der Standardeinstellung nach einer Stunde gelöscht wird. Möchte man einen Checkpoint dauerhaft behalten, kann man ihn in einen Snapshot umwandeln, welcher nicht automatisch gelöscht wird.

Installation

Zur Installation lädt man den Quelltext des Kernel-Moduls und der nötigen Programme herunter und kompiliert diese. Für das Modul muss der Kernel selber nicht gepatcht werden, die Kernel-Header Dateien müssen jedoch beim kompilieren vorhanden sein. Danach muss das Modul geladen werden, und schon ist Nilfs2 einsatzbereit.

Einführung

Zunächst erstellen wir ein Testimage:
# dd if=/dev/zero of=nilfs2.image bs=1M count=200 #200MiB Datei erstellen
200+0 Datensätze ein
200+0 Datensätze aus
209715200 Bytes (210 MB) kopiert, 4,8456 Sekunden, 43,3 MB/s
# losetup /dev/loop0 nilfs2.image
# mkfs.nilfs2 /dev/loop0
mkfs.nilfs2 ver 2.0
Start writing file system initial data to the device
Blocksize:4096  Device:/dev/loop0  Device Size:209715200
File system initialization succeeded !!

Und hängen es ein:

# mount -t nilfs2 /dev/loop0 /media/loop
# cd /media/loop
# ls -a

.  ..  .nilfs  .sketch

Die Checkpoints zeigt "lscp" an:

# lscp
CNO        DATE     TIME  MODE  SKT   NBLKINC       ICNT
1  2008-03-24 21:43:46  cp     -         11          3
# touch test
# ls -a

.  ..  .nilfs  .sketch  test
# lscp
CNO        DATE     TIME  MODE  SKT   NBLKINC       ICNT
1  2008-03-24 21:43:46  cp     -         11          3
2  2008-03-24 21:45:58  cp     -         11          4

Wenn man möchte, kann man alte Checkpoints mit rmcp entfernen:

# rmcp 1
# lscp

CNO        DATE     TIME  MODE  SKT   NBLKINC       ICNT
2  2008-03-24 21:45:58  cp     -         11          4

möchte man einen Stand dauerhaft behalten, hilft "mkcp -s" einen neuen Snapshot zu erstellen.

# echo "test1" >test
# mkcp -s
# lscp

CNO        DATE     TIME  MODE  SKT   NBLKINC       ICNT
2  2008-03-24 21:45:58  cp     -         11          4
3  2008-03-24 21:47:04  cp     -          7          4
4  2008-03-24 21:47:59  ss     -         11          4
# echo "test2" >test
# lscp

CNO        DATE     TIME  MODE  SKT   NBLKINC       ICNT
2  2008-03-24 21:45:58  cp     -         11          4
3  2008-03-24 21:47:04  cp     -          7          4
4  2008-03-24 21:47:59  ss     -         11          4
5  2008-03-24 21:48:04  cp     -          8          4
6  2008-03-24 21:48:11  cp     -         11          4

Stattdessen hätte man auch mit "chcp ss #num" einen existierenden Checkpoint in einen Snapshot umwandeln können.

Snapshot 4 sollte also in der Datei test den Text "test1" enthalten, wohingegen die Datei momentan "test2" enthält. Probieren wir es aus, indem wir Checkpoint 4 in einen neuen Ordner mounten:

# mount -t nilfs2 -o ro,cp=4 /dev/loop0 /media/loop2
# cd /media/loop2/
# cat test

test1

Tatsächlich, unter "/media/loop2" kann man nun im nur-lesen Modus den alten Snapshot benutzen. Möchte man den Snapshot wieder entfernen, muss man ihn zunächst mit "chcp cp #num" wieder in einen Checkpoint umwandeln:

# lscp |grep "^[ ]*4" #das  grep filtert auf Checkpoints die mit 4 anfangen
4  2008-03-24 21:47:59  ss     -         11          4
# chcp cp 4
# lscp |grep "^[ ]*4"
4  2008-03-24 21:47:59  cp     -         11          4

Nun wird der Snapshot entweder automatisch gelöscht werden, oder man kann ihn wie jeden anderen Checkpoint mit rmcp entfernen.

Checkpoints löschen

Nilfs2 nutzt einen Daemon, der via /etc/nilfs_cleanerd.conf konfiguriert wird um alte Checkpoints zu löschen. In der Datei kann man einstellen, wie lange Checkpoints aufgehoben werden(1 Stunde als Default), und wieviele Chunks in welchem Zeitabstand wieder freigegeben werden sollen.

Vorteile

Nilfs2 spielt seine Vorteile vor allem im Backupbereich aus. So kann zum Beispiel rsync-Backup mit Nilfs2 ohne Hardlinks realisiert werden, wodurch das Löschen von alten Backups beschleunigt wird. Liegt nicht nur das Backup auf dem Nilfs2, sondern die ganzen Daten, können ausversehen gelöscht Dateien aus einem Checkpoint wiederhergestellt werden, und es sind höchstens die Änderungen der letzten 30 Sekunden verloren. Eine komplette Datensicherung wäre mit einer Kombination von RAID-1(Sicherheit gegen Festplattenausfall) und Nilfs2(Sicherheit gegen versehentliches Löschen) denkbar.

Nachteile

Nilfs2 ist nicht im offziellem Kernel, was garantieren würde, dass es auch in Zukunft noch verfügbar ist.[UPDATE Seit Linux 2.6.30 ist Nilfs2 Bestandteil des offiziellen Kernels] Außerdem fehlen noch einige Dateisystemfunktionen. Weiterhin ist die Stabilität und Performance noch nicht so gut untersucht wie bei den verbreiteten Dateisystemen. Nilfs 2.0.0 kann noch kein NFS, was in 2.0.1 jedoch inzwischen möglich ist. Außerdem ergibt sich ein Problem, wenn man das Dateisystem komplett füllt, dass selbst nach dem Löschen der Datei der Platz nicht freigegeben wird, da die Datei noch in diversen Checkpoints weiterexistiert. Auch wenn diese Checkpoints gelöscht werden wird der Platz erst freigegeben, wenn die protection_period aus der Konfiguration erreicht wird. Das führt unter Umständen schoneinmal dazu, dass man ca. 1 Stunde keine neuen Datei mehr erstellen kann.

Workaround: kurze protection_period (dann aber snapshots für jeden Stand den man noch braucht!) oder darauf achten, dass das Dateisystem nie komplett gefüllt wird.

Sicheres Löschen mit Tools wie shred funktioniert aufgrund der Wirkungsweise eines log-structured FS leider nicht. Umgekehrt werden gelöschte Daten, sobald sie in keinem Checkpoint mehr enthalten sind vermutlich recht häufig durch das anlegen neuer Checkpoints überschrieben, wenn das FS aktiv genutzt wird.

Vorsicht bei 2.0.1

Nilfs2 2.0.1 erkennt Dateisysteme von 2.0.0 nicht. Dies liegt wohl nicht an einer Disk-Layout Änderungen, sondern ist ein Fehler. 2.0.1 Images laufen mit 2.0.1 jedoch problemlos.

Fazit

Momentan teste ich Nilfs2 2.0.0, und warte auf den Bugfix für 2.0.1, damit es mein Dateisystem wieder erkennt. Die Performance ist bisher super, und während des Betriebs von 2.0.0 hatte ich keinerlei Probleme, außer dass NFS noch nicht implementiert war. Es bleibt zu hoffen, dass Regressionen wie bei 2.0.1 eine Ausnahme bleiben.

[UPDATE] Inzwischen ist nilfs2 bei 2.0.4 (utils 2.0.5) angekommen, und der 2.0.1 Bug ist beseitigt, NFS wurde nachgerüstet und im 2.0.4 Release wurde ein von mir gemeldeter Bug beim löschen von Dateien die mehrere Gigabyte groß sind beseitigt. Auf der Backup-Partition ist nilfs2 jetzt schon länger ohne Probleme im Einsatz. Mit Rsync werden die Dateien auf den aktuellen Stand gebracht, und dann wird ein Snapshot erstellt, welcher den Stand dauerhaft sichert.

Kategorien Linux OpenSource Software
Tagged Filesystem nilfs Technik nilfs2 Dateisystem
Mobil qrcode zeigen

1 Kommentar