Mit lsof Speicherplatz von gelöschten offenen Dateien finden & freigeben

Bei Linux kann es manchmal zum Phänomen kommen, dass viel Speicherplatz verbraucht wird, aber tatsächlich gar nicht so viel auf der Disk vorhanden scheint, wenn man alle Files zusammen zählt:

[root@host ~]# df -h /usr/
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda3              22G   20G  357M  99% /usr
 
[root@host ~]# du -sh /usr/
<ol>
12G     /usr/
</ol>

In diesem Beispiel wird mit df auf /usr ein Speicherplatzverbrauch von 20GB angezeigt; tatsächlich sind aber nur 12GB mit Dateien belegt, wenn man diese mit du zusammen zählt. – Wo sind also die restlichen 8GB?

Grund dafür ist, wenn man einem Prozess, der gerade eine Datei schreibt, ihm diese Datei löscht. So wird der Prozess nicht benachrichtigt, dass die Datei nicht mehr im Filesystem ist und er schreibt weiterhin auf die Festplatte, resp. in das sog. "File Handle" wie das ein Programmierer ausdrücken würde.

Solche Prozesse, die gelöschte Dateien noch offen haben, findet man mit dem lsof Kommando:

[root@host ~]# lsof -a +L1
COMMAND  PID   USER   FD   TYPE DEVICE       SIZE NLINK    NODE NAME
perl    5844 oracle    5w   REG    8,3    4194360     0 1337313 /usr/local/myapp.log (deleted)

Startet man dann den entsprechenden Prozess neu, wird der Platz wieder frei gegeben.

[stextbox id=“note“ caption=“Hinweis“]Grundsätzlich sollte man, wenn man files löscht, sicherstellen, dass diese nicht gerade beschrieben werden (gilt besonders für logfiles).

So sollte man bei "aktiven" Dateien am besten vorher den Prozess beenden, der darauf schreibt, oder nach dem löschen diesen neu starten.[/stextbox]

Quellen

http://www.jfranken.de/homepages/johannes/vortraege/lsof_inhalt.de.html

iTunes Album gesplittet

Unter itunes (iphone) oder auch dem Windows Media Center (mce) kann es vorkommen, dass manche Alben als Alben angezeigt werden, andere jedoch sind gesplittet, d.h. für jeden Track wird ein eigenes Album erstellt (mit nur diesem Track drin), was natürlich sehr suboptimal ist. Continue reading iTunes Album gesplittet

vmware web-konsole stürzt nach CentOS-Upgrade ab

[stextbox id=“warning“ caption=“Achtung“]Ab CentOS 5.6 ist das Problem mit der glibc zwar wieder behoben; doch dann stürzt die vmware-konsole ab (vmware-hostd mit einem „Segemnation fault“), wenn der hack aktiv ist!

Um das Problem dann wieder zu lösen muss man lediglich in /usr/sbin/vmware-hostd die zweitletzte Zeile

export LD_LIBRARY_PATH=/usr/lib/vmware/lib/libc.so.6:$LD_LIBRARY_PATH

auskommentieren oder löschen.

Diese Beschreibung bleibt deshalb nur noch als Referenz hier und für solche welche den Hack früher schon mal gemacht hatten. – Falls der Hack noch nicht ausgeführt wurde, sollte man ab jetzt gleich auf CentOS 5.6 upgraden.[/stextbox]

Nach dem upgrade von CentOS 5.3 auf 5.4 oder eine höhere Version stürzt die vmware web-konsole mit einem "HTTP error code" ab.

Grund ist ein bug in vmware, der mit der aktuellen glibc nicht zurecht kommt.

Glücklicherweise lässt sich dies aber sehr einfach lösen, indem man die alte glibc herunter lädt und diese mit vmware verlinkt.

Folgendes script löst das Problem automatisch:

#!/bin/bash
###########################################
# This may help using the vmware-server2  #
# on a CentOS 5.4 x86_64 Host.            #
# There is a problem with the the libc    #
# More informations:                      #
# <a href="http://bugs.centos.org/view.php?id=3884" target="blank">http://bugs.centos.org/view.php?id=3884</a> #
#-----------------------------------------#
# Version 0.1                             #
# This script will get the 'old' libc     #
# from the CentOS 5.3 repositories and    #
# configures vmware-server2 to use this   #
# The original libc (for the 5.4-system)  #
# will not be replaced or touched.        #
#-----------------------------------------#
# License: Do with the code whatever you  #
# want. This came without any warrenty.   #
###########################################
 
LIBC_DIR="/usr/lib/vmware/lib/libc.so.6"
TEMP_DIR="/tmp/vmw_glibc"
VMWARE_CONFIGFILE="/usr/sbin/vmware-hostd"
VMWARE_CONFIGFILE_BAK=$VMWARE_CONFIGFILE.bak
 
# Checking for root
if <span class="keys"> $EUID -ne 0 </span>; then
    echo "This script must be run as root"
    exit 1
fi
 
# We test for the commands  we need:
echo "Looking for some commands I need..."
which wget
if [ $? != 0 ]; then
    echo "I can't find wget but need it to download the files. Please install."
fi
which rpm2cpio
if [ $? != 0 ]; then
    echo "I can't find rpm2cpio but need it to extract Files from a .rpm-file. Please install."
fi
 
# Creating a directory for the 'old' glibc
mkdir -p $LIBC_DIR
if [ $? != 0 ]; then
    echo "Can't create directory $LIBC_DIR"
    exit 2
fi
 
# Removing and creating a temporary directory for the rpm,
# downloading it, extracting the old glibc and copy
# the them to our new directory
rm -rf $TEMP_DIR
mkdir -p $TEMP_DIR
if [ $? != 0 ]; then
    echo "Can't create directory $TEMP_DIR"
    exit 2
fi
cd $TEMP_DIR
wget <a href="http://vault.centos.org/5.3/os/x86_64/CentOS/glibc-2.5-34.x86_64.rpm" target="blank">http://vault.centos.org/5.3/os/x86_64/CentOS/glibc-2.5-34.x86_64.rpm</a>
if [ $? != 0 ]; then
    echo "Something was wrong while downloading"
    exit 2
fi
rpm2cpio glibc-2.5-34.x86_64.rpm | cpio -ivd
mv lib64/libc-2.5.so $LIBC_DIR/libc.so.6
if [ $? != 0 ]; then
    echo "Can't move the libc into directory $LIBC_DIR"
    echo "Removing temporary files..."
    echo -rf $TEMP_DIR
    exit 2
fi
echo "The file libc-2.5.so from the centOS 5.3 rep. was saved in: $LIBC_DIR as libc.so.6"
 
echo "Removing temporary files..."
rm -rf $TEMP_DIR
 
# Now we editing the start-config of the vmware-server
echo "I must change $VMWARE_CONFIGFILE now, you will find a backup in $VMWARE_CONFIGFILE_BAK"
mv $VMWARE_CONFIGFILE $VMWARE_CONFIGFILE_BAK
cat $VMWARE_CONFIGFILE_BAK | grep -v 'eval exec "$DEBUG_CMD" "$binary" "$@"' > $VMWARE_CONFIGFILE
echo export LD_LIBRARY_PATH=$LIBC_DIR/libc.so.6:'$LD_LIBRARY_PATH' >> $VMWARE_CONFIGFILE
echo '' >> $VMWARE_CONFIGFILE
echo 'eval exec "$DEBUG_CMD" "$binary" "$@"' >> $VMWARE_CONFIGFILE
 
# Ensuring the script is executable
chmod 555 $VMWARE_CONFIGFILE
 
echo "Everything is done, please restart your vmware-server2"

Troubleshooting

Nach dem ausführen des scriptes sollte überprüft werden ob das file: /usr/sbin/vmware-hostd ausführbar ist.

Weiter öffnet man am besten mal: /usr/sbin/vmware-hostd und prüft die unterste export Zeile; dabei muss man darauf achten, dass LD_LIBRARY_PATH auf das Verzeichnis zeigt wo die "libc.so.6" liegt und nicht das File selbst!

So ist es falsch:

export LD_LIBRARY_PATH=/usr/lib/vmware/lib/libc.so.6/libc.so.6:$LD_LIBRARY_PATH

So sieht die korrekte export-Zeile aus:

export LD_LIBRARY_PATH=/usr/lib/vmware/lib/libc.so.6:$LD_LIBRARY_PATH

(Dies wird manchmal vom script durcheinander gebracht)

Nach einem vmware-neustart sollte sich dann die Konsole wieder öffnen lassen.

[stextbox id=“note“ caption=“Hinweis“]Seit der Firefox-Version 3.6 lässt sich die vmware Web-Konsole nicht mehr korrekt öffnen; dies ist jedoch nicht mit diesem bug relevant, sondern ein Bug im Firefox-Plugin.[/stextbox]

Related Links

postfix-mysql: queue file write error / Temporary lookup failure

Nachdem ich mein Postfix für die Verwendung mit mysql Tabellen konfiguriert hatte, bekam ich auf einmal beinahe täglich mails, die den Text: "451 4.3.0 Error: queue file write error" und/oder: "Temporary lookup failure" enthielten:

Transcript of session follows.
 
 Out: 220 mail.domain.tld ESMTP Postfix
 In:  EHLO [X.X.X.X]
 Out: 250-mail.domain.tld
 Out: 250-PIPELINING
 Out: 250-SIZE 10240000
 Out: 250-VRFY
 Out: 250-ETRN
 Out: 250-AUTH PLAIN LOGIN
 Out: 250-AUTH=PLAIN LOGIN
 Out: 250-ENHANCEDSTATUSCODES
 Out: 250-8BITMIME
 Out: 250 DSN
 In:  AUTH PLAIN XXXXXXXXXXXXXXXXXXXXXXX
 Out: 235 2.0.0 Authentication successful
 In:  MAIL FROM:<sender@example.org> SIZE=1037
 Out: 250 2.1.0 Ok
 In:  RCPT TO:<empfaenger@example.org>
 Out: 250 2.1.5 Ok
 In:  DATA
 Out: 354 End data with <CR><LF>.<CR><LF>
 Out: 451 4.3.0 Error: queue file write error
 
Session aborted, reason: lost connection

Zwar schien alles zu funktionieren und die mails kamen auch immer noch rein, ich wollte jedoch der Meldung nachgehen.

Im maillog wurde ich dann fündig, denn folgende Fehlermeldung tauchte ziemlich oft auf:

warning: mysql query failed: Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation '=

Dies kam davon, weil ich die postfix Datenbank noch auf dem alten Server angelegt hatte und auf dem der Zeichensatz: latin1_swedish_ci standardmässig eingestellt war, beim neuen Server war jedoch UTF8 standard.

Das Problem kann man dann lösen, wenn man die Postfix Datenbank wie folgt konvertiert:

Login auf mysql:

mysql -uroot -p

dann für jede Tabelle:

ALTER TABLE tbl_name CHARACTER SET utf8 COLLATE utf8_general_ci;

und für jedes Textfeld:

ALTER TABLE tbl_name MODIFY email varchar(255) CHARACTER SET utf8;

Quelle

Lenovo Notebooks: Touchpad und Keyboard reagieren nicht

Einige Besitzer von Lenovo Notebook aus der Baureihe: T50, T51, T60, T61 (und vermutlich noch andere) werden nach einer Neuinstallation von Windows und durchführen der ersten Windows Updates entrüstet feststellen, dass das TouchPad oder das Keyboard nur noch sporadisch funktioniert, manchmal klingt auch der Windows-Startsound etwas zerstückelt.

Das Problem liegt am Treiber Update, dass Lenovo über die Windowsupdates zur Verfügung stellt – Die Lösung: Den Lenovo treiber einfach nicht updaten. 😉

Dazu wählt man bei Windows Update die benutzerdefinierte Installation und wählt das häckchen bei: Synaptics Thinkpad UltraNav Pointing Devices ab. Dann noch Bestätigen, dass dieses update nicht mehr angezeigt werden soll und gut ist!

{img fileId="62" thumb="y" alt="" rel="box[g]"}
{img fileId="63" thumb="y" alt="" rel="box[g]"}

Die Erweiterung „Verknüpfung mit“ entfernen

Jedesmal, wenn Sie eine Verknüpfung erstellen, weist ihr Windows 95 den Namen "Verknüpfung mit datei.xyz" zu. Das Voranstellen des Prefixes "Verknüpfung mit" können Sie jedoch unterbinden.

-Öffnen Sie RegEdit (Start – Ausführen – regedit.exe)
-Öffnen Sie den Schlüssel „HKEY_Current_UserSoftwareMicrosoftWindowsCurrentVersionExplorer"
-Klicken Sie mit der rechten Maustaste auf den Schlüssel und wählen Sie "Neu" – "Binärwert"
-Geben Sie dem neuen Objekt den Namen "Link" (ohne Anführungszeichen)
-Doppelklicken auf den neuen Wert, damit das Menü "Binärwert bearbeiten" erscheint
-Geben Sie als Wert "00 00 00 00" (ohne Anführungszeichen) ein und bestätigen Sie mit "OK"
-Beenden Sie RegEdit
-Starten Sie Windows neu

HP Color LaserJet 2605: Weiter Drucken wenn toner „leer“

Beim HP Color LaserJet Drucker 2605 (und vermutlich auch bei anderen HP Druckern der "Einstiegsklasse" scheinen sich immer alle Toner gleichzeitig zu leeren. Dies weil der Chip in diesen Tonern einfach pro Seite bei jedem Toner 1 abzählt und nicht etwa nach realem Tonerverbrauch. Resultat: Wenn ein Toner "verbraucht" ist, so müssten alle (Farb-)Toner gleichzeitig gewechselt werden.

Netterweise hat HP aber eine (ziemlich schlecht dokumentierte) Funktion eingebaut um trotzdem weiter Drucken zu können:

Beim Drucker (auf der JetDirect Konfigurationsseite des Printservers ist dies nicht möglich!) muss man im Menü: Hauptmenu/System-Setup/Druckqualität/Material Ersetzen die Option: "Leer übergehen" aktivieren. So kann man dann weiter Drucken bis der Toner tatsächlich "leer" ist. 😉

Doppelte IP-Adressen finden

In einem Netzwerk kommt es manchmal vor, dass mehrere Teilnehmer dieselbe IP-Adresse verwenden; dies kann sehr ärgerlich sein.

Unter Linux und mithilfe von MAC-Datenbanken gibt es zum Glück eine Möglichkeit den "Täter" zu finden. 😉

Unter einer Linux Konsole einfach:

arping -b $IP

ausführen und sehen, welche MAC-Adressen auftauchen.

Zu welchem Gerät diese dann gehört kann man im Internet herausfinden, z.B. unter: [http://www.coffer.com/mac_find/]

Outlook Express: Standardspeicherpafad für Anlagen

Der Standardspeicherpfad für Anlagen wird manchmal von OE eigenwillig auf den "Eigenen Dateien" Ordner gesetzt, obwohl man seine Dateien immer woanders speichert und sich so immer mühsam wieder durch die Ordner klicken muss.

Wenn OE also wieder mal "vergessen" hat, wo die Anlagen gespeichert werden sollen, hilft folgender Eintrag in der registry:

# Start – Ausführen – Regedit
# Zum Schlüssel: HKEY_CURRENT_USERIdentities{GUID}SoftwareMicrosoftOutlook
Express5.0Save Attachment Path durchklicken
# Neuen Standardpfad Eintragen

Ab jetzt sollte sich OE den "neuen" Pfad wieder merken!

Übrigens: Es gibt noch einen etwas "unsaubereren", dafür aber auch einfachern Weg:

Beim nächsten mal Speichern einfach inter den Ordner eine Menge ""s anhängen, also z.B. für C:Downloads: C:Downloads\\\\\\\\\\\\\\\
\ etc.
Jetzt wird bei jedem Speichern einer der / abgezogen, aber die Datei immer unter C:Downloads gespeichert. -Und wenn sich die backslashes dann dem Ende nähern, einfach wieder neue Anfügen! 😉

Nagios: NRPE Fehlermeldung ‚Return code of 127 is out of bounds – plugin may be missing‘

Problem: Nagios läuft lokal super, versucht man dann aber per NRPE einen remote Host zu Monitoren erhält man die Fehlermeldung: "Return code of 127 is out of bounds – plugin may be missing". Skurillerweise klappt das ganze, wenn man check_nrpe lokal aufruft; die Meldung kommt nur in der Web-Oberfläche.

Ursache: Bei mir lag das Problem daran, dass sich das NRPE-Plugin in einen anderes Verzeichnis installiert hatte als die übrigen (lokalen) Plugins. So Lagen die lokalen Plugins unter: "/usr/local/nagios/libexec/", das NRPE Plugin, aber unter: "/usr/lib/nagios/plugins/check_nrpe". Da ich das NRPE Plugin immer über den korrekten Pfad aufgerufen hatte, funktionierte dort auch alles.

Lösung: Man kann nun entweder:

    1. Den zusätzlichen Pfad in der: "/etc/nagios/resource.cfg" anpassen, sowie auch die $USER$ Variable in der Konfiguration des überwachten Hosts.

2. Einen Symlink auf den Pfad des NRPE Plugins legen

3. Das NRPE Plugin in das normale Plugin Verzeichnis verschieben (und dann evtl. noch symlink auf die "alte" Destination).

Ich entschied mich für die dritte Lösung, da so alle Plugins zusammen in einem Verzeichnis sind:

mv -v /usr/lib/nagios/plugins/check_nrpe /usr/local/nagios/libexec/
ln -s /usr/local/nagios/libexec/check_nrpe /usr/lib/nagios/plugins/check_nrpe