Erik Micek <erik.micek(at)gmx.de> wrote:
> Bernd Walter wrote:
> > Ja - wenn was zu schreiben gibt, dann schreibt der auch.
> > Wenn nichts zu schreiben da ist, dann bleibt auch die Platte aus.
>
> Das dachte ich auch, war bei meiner FreeBSD Installation aber
> anders... ;-)
Nein, das ist überhaupt nicht anders. Plattenaktivität
passiert niemals ohne Grund. FreeBSD greift jedenfalls
nicht auf's Geratewohl auf irgendeinen Sektor zu, nur
weil es sich gerade langweilt.
Der springende Punkt ist wohl, daß jemandem, der mit einem
UNIX-System nicht gerade intim vertraut ist, gar nicht ge-
nau abschätzen kann, was »unter Deck« alles an Aktivitäten
passieren, die auch Plattenzugriffe erfordern. Ich vermu-
te, ich würde da auch leicht etwas übersehen, wenn ich das
ad-hoc aufzählen müßte.
Einfaches Beispiel: Unter UNIX sind Programme normalerwei-
se sogenannte »demand-paged« Binaries. Das heißt, wenn Du
ein Programm startest, werden erstmal nur die Pages in den
RAM gemappt, die gerade gebraucht werden. Wenn dann (eine
halbe Stunde später) aus irgendeinem Grund irgendwelche
Programmteile verwendet werden, die vorher noch nicht ge-
braucht wurde, werden die zugehörigen Pages des Binaries
nachträglich geladen, und -- bingo -- die Platte läuft an.
Bei dem Programm kann es sich um so etwas triviales wie
eine Shell handeln, oder irgendeinen Daemon.
Das ist das, was ich mit Pre-caching meinte: Einmal vorher
die Programm-Datei lesen (zum Beispiel mit cat oder dd nach
/dev/null) sorgt dafür, daß die Blöcke im Buffer-cache sind
und später nicht mehr von Platte geladen werden müssen.
Das setzt natürlich ausreichend RAM voraus (man muß daran
denken, daß sonst die Daten wieder von anderen, jüngeren
Operationen »verdrängt« werden können, denn der Buffer-
cache ist ein sehr dynamisches Tier).
Alternativ kann man sich ein ausreichend großes MFS anle-
gen und die benötigten Sachen hineinkopieren. Auch hier
braucht man wieder ausreichend RAM, aber die oben beschrie-
bene Gefahr der »Verdrängung« ist deutlich kleiner.
Und das war jetzt nur _ein_ Beispiel für mögliche Zugriffe,
an die man vielleicht nicht gleich denkt.
> Ok, gehen wir davon aus daß ich irgendein Prozeß
> übersehen habe, wie finde ich heraus welches Programm gerade
> schreibt bzw. anderweitig die Platte beschäftigt?
Zum Beispiel lsof (Ports) oder fstat. Datum und Uhrzeit
des letzten Schreibzugriffes auf ein Filesystem zeigt Dir
dumpfs (kann zuweilen nützlich sein).
Was genau Du für Maßnahmen ergreifen kannst, hängt von Dei-
nem konkreten Anwendungsfall und den Anforderungen ab.
Am besten wäre es freilich, wenn man alle Partitionen nur
read-only mountet. Damit wären allen (versuchten) Schreib-
zugriffen schonmal die Zähne gezogen, und man muß nur noch
an mögliche Lesezugriffe denken (siehe oben).
Wenn man unbedingt Daten schreiben muß, gibt es verschie-
dene Möglichkeiten. Beispielsweise könnte man sie erstmal
eine Zeitlang in einem MFS sammeln (oder auf einer Floppy!)
und in gewissen Intervallen dann auf die Platte sichern.
Solid-State-Medien bieten sich ebenfalls an, zum Beispiel
CompactFlash-Karten. Eine andere Möglichkeit wäre es, die
Daten per Netz zu sichern (etwa per NFS oder was auch im-
mer).
Wenn man gezwungen ist, eine Festplatte read-write zu moun-
ten, sollte man sie mit den Flags »sync,noatime« mounten.
Das drückt zwar etwas auf die Performance (was je nach An-
wendungsfall erträglich sein mag oder auch nicht), sorgt
aber dafür, daß sämtliche Schreibzugriffe sofort ausgeführt
werden und nicht um eine unvorhersehbare Zeitspanne verzö-
gert werden können.
Gruß
Olli
-- Oliver Fromme, secnetix GmbH & Co KG, Oettingenstr. 2, 80538 München Any opinions expressed in this message may be personal to the author and may not necessarily reflect the opinions of secnetix in any way. "All that we see or seem is just a dream within a dream" (E. A. Poe) To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org with "unsubscribe de-bsd-questions" in the body of the messageReceived on Mon 15 Jul 2002 - 21:28:39 CEST