Status Filesystem

Hallo Experten,

zuerst: ich bin nicht der fitteste im Linux-Bereich. Meine Infos google ich mir meist zusammen.

Ok, mein Problem: wir hatten kürzlich einen SAN-Ausfall. Als Ergebnis haben alle Linux-Kisten, die am SAN hängen, ihre Filesysteme auf readonly gesetzt (was man ihnen grundsätzlich auch nicht verdenken kann). Das Fatale war, dass in unseren Monitoring-Tools davon nichts zu bemerken war und wir uns daher viel zu spät darum kümmern konnten.

Ich will jetzt ein Script schreiben, was mir den aktuellen State der FS zurückgibt, habe aber ein Verständnisproblem: Nach meinen Infos liest der ‚mount‘ Befehl ja nur die /etc/mtab. Die /proc/mounts soll aktueller sein und daher mit z.B.

egrep " ro,|,ro " /proc/mounts

die ro mounts zurückgeben. Aber das sind doch beides Dateien! Wie kann ein OS, bei dem sämtliche FS auf ro stehen, noch in eine Datei schreiben?

Wie würdet ihr das lösen?

Gruß
Stefan

Hallo Stefan,

Ich will jetzt ein Script schreiben, was mir den aktuellen
State der FS zurückgibt, habe aber ein Verständnisproblem:
Nach meinen Infos liest der ‚mount‘ Befehl ja nur die
/etc/mtab. Die /proc/mounts soll aktueller sein und daher mit
z.B.

egrep " ro,|,ro " /proc/mounts

die ro mounts zurückgeben.

Dein egrep gibt dir auch genau diese Infos wieder, insofern würde ich das auch benutzen.
Was den Ausdruck „aktueller“ betrifft, so finde ich ihn etwas unglücklich. Der eventuell vorhandene Unterschied zwischen /etc/mtab und /proc/mounts resultiert ja daraus, daß mtab von mount verwaltet wird, während /proc/mounts auch Kernel-Operationen „registriert“. Die man-Page meint dazu:
„It is possible that files /etc/mtab and /proc/mounts don’t match. The first file is based only on the mount command options, but the content of the second file also depends on the kernel and others settings (e.g. remote NFS server. In particular case the mount command may reports unreliable information about a NFS mount point and the /proc/mounts file usually contains more reliable information.)“

Aber das sind doch beides Dateien!

In Unix/Linux ist sowieso alles eine Datei :wink:

Wie kann ein OS, bei dem
sämtliche FS auf ro stehen, noch in eine Datei schreiben?

Das wird wohl daran liegen, daß /proc nur ein virtuelles Dateisystem ist, das im Hauptspeicher liegt und dynamisch generiert wird. Siehst Du dir /proc/mounts genau an, dann ist dies lediglich ein Softlink auf /proc/self, was wiederum ein Softlink auf /proc/ ist (dabei handelt es sich bei XXXX um eine Zahl, die bei jedem Zugriff hochgezählt wird (dynamische Erzeugung).
So ist es zumindest bei Debian organisiert, ob diese Link-Kette
/proc/mounts -> /proc/self -> /proc/
überall genau so ist, weiß ich nicht. Aber der virtuelle und dynamische Charakter von /proc sollte überall so sein.

Viele Grüße
Marvin

Moin Marvin,

Das wird wohl daran liegen, daß /proc nur ein virtuelles
Dateisystem ist, das im Hauptspeicher liegt und dynamisch
generiert wird.

*stirnklatsch* Ah! Jetzt verstehe ich es.
Super Erklärung, vielen Dank.

Dann kann ich ja weiter an meinem Monitoring-Script basteln. Blöderweise ist das Monitoring-System Windows basierend. Also darf ich eine Windows-Batch schreiben, die ein fernes Bash-Script aufruft, die Ausgabezeilen zählt und einen Errorlevel setzt. *seufz* Warum einfach, wenn es auch kompliziert geht…

Gruß
Stefan

/proc/$PID/ (was: Status Filesystem)

Siehst Du dir /proc/mounts genau an, dann ist
dies lediglich ein Softlink auf /proc/self, was wiederum ein
Softlink auf /proc/ ist (dabei handelt es sich bei XXXX
um eine Zahl, die bei jedem Zugriff hochgezählt wird
(dynamische Erzeugung).

Aeh… nein. /proc/mounts zeigt auf /proc/self/mounts welches via /proc/self -> /proc/$PID auf /proc/$PID/mounts zeigt. Mit den Zugriffen und der dynamischen Erzeugung hat das aber nix zu tun. Unter /proc/$PID werden die Informationen des jeweiligen Prozesses mit der $PID vom Kernel ausgegeben. /proc/self wird vom Kernel dann einfach nur auf das Verzeichnis des aktuell anfragenden Prozess umgebogen. Dass das hochgezaehlt wird liegt daran, dass die PIDs hochgezaehlt werden.

Wer sich jetzt fragt, warum es eigentlich dann pro Prozess eine /proc/$PID/mounts gibt… seit ungefaehr 7 Jahren kann Linux per-process mount name spaces und diese Dateien koennten unterschiedliche Inhalte haben. In freier Wildbahn hab ich sowas allerdings noch nie gesehen. Mehr Details in proc(5) und mount(2).

Mf
Gruss vom Frank.

Hallo Frank,

/proc/mounts zeigt auf /proc/self/mounts

Danke, Du hast völlig recht. Manchmal ist man blind, mein

ls -l /proc/mounts

gibt eindeutig das aus:

lrwxrwxrwx 1 root root 11 17. Okt 12:29 /proc/mounts -\> self/mounts

Ich hätte geschworen, daß es gestern noch anders aussah. Keine Ahnung, was ich für Tomaten auf den Augen hatte.
Aber ändert zum Glück nichts daran, daß der grep-Befehl von Stefan so funktioniert.

Viele Grüße
Marvin

Moin,

noch eine kleine Erweiterungsfrage:

Meine Scripte arbeiten soweit, allerdings läuten auch dann die Alarmglocken, wenn irgendwer eine CD ins Laufwerk einlegt.

Wie schaffe ich es, dass nur ro-Filesysteme auf Festplatten gemeldet werden? Noch auf „sda“ filtern?

Gruß
Stefan

Hallo Stefan,

Meine Scripte arbeiten soweit, allerdings läuten auch dann die
Alarmglocken, wenn irgendwer eine CD ins Laufwerk einlegt.
Wie schaffe ich es, dass nur ro-Filesysteme auf Festplatten
gemeldet werden? Noch auf „sda“ filtern?

Wäre eine Möglichkeit. Kommt aber ein wenig auf eure Situation an. Wenn Du auf sda filterst reagiert das Skript nicht auf eine eventuelle zweite Festplatte (sdb).
Du könntest auch das Filesystem abfragen, wenn ihr da halbwegs einheitliche habt, also z.B. nur ext3 oder ext4.
Relativ unwahrscheinlich, aber eventuell auch zu berücksichtigen: Wenn jemand einen schreibgeschützten USB-Stick einsteckt, würde es bei sdX auch klingeln.

Viele Grüße
Marvin

Meine Scripte arbeiten soweit, allerdings läuten auch dann die
Alarmglocken, wenn irgendwer eine CD ins Laufwerk einlegt.

Wieso geht da einfach so einer hin und legt Datenträger irgendwo ein? Naja, egal…

Wie schaffe ich es, dass nur ro-Filesysteme auf Festplatten
gemeldet werden? Noch auf „sda“ filtern?

Ich würde ja nach sowas wie ‚^.*.*$‘ suchen. Und grep statt egrep benutzen.

HTH,
Gruss vom Frank.

Hi,

Wieso geht da einfach so einer hin und legt Datenträger
irgendwo ein? Naja, egal…

Das passiert schon, wenn einer die VMWare-Tools aktualisiert. Auch da wird ein Datenträger ro gemountet. Und wenn keiner mehr dran denkt und plötzlich die roten Lichter angehen…

Ich würde ja nach sowas wie ‚^.*.*$‘
suchen. Und grep statt egrep benutzen.

Schick! Danke schön.

HTH,

Tut es. :wink:

Gruß
Stefan