mikrocontroller.net

Forum: PC Hard- und Software Schreibcache unter Ubuntu (Mate) 16.04 abstellen


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Dietmar S. (didi2)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie stelle ich den Schreibcache für USB-Laufwerke unter Ubuntu (Mate) 
16.04 ab?

Folgendes Problem: Bei externen USB-Sticks und SSDs die mit EXT3 
formatiert sind, werden noch Daten geschrieben, auch wenn ich das 
USB-Medium aushänge oder auf "Sicher entfernen" klicke. Mit einer 
Status-LED kein Problem, da sehe ich ja, dass sie noch blinkt. Aber 
einige Sticks und SSDs haben keine.

Ich hab versucht den Schreibcache in der hdparm.conf zu deaktivieren.
write_cache = off

Das hat aber anscheinend keine Wirkung auf USB-Laufwerke. Auch nicht 
wenn ich den Schreibcache für alle Laufwerke abstelle.

Ich bin auch der Meinung, dass man das woanders abstellt.

Unter Debian Stretch als reine Konsoleninstallation nutze ich z.B. 
pmount und deaktiviere den Schreibcache in der /usr/local/bin/automount. 
Bei meiner Desktop-Installation ist das aber anders gelöst und ich hab 
noch nicht herausgefunden wie.

Autor: Bernd K. (prof7bit)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
soviel ich weiß geht das nur in der /etc/fstab.

Ich hab Kubuntu (aber eben auch der *buntu Unterbau darunter)

Ich habe so ein Problem nur bei einer Handvoll Laufwerke, speziell sind 
das Laufwerke die von Geräten bereitgestellt werden um darüber 
Firmwareupdates durchzuführen, zum Beispiel STM32-Controller im 
Bootloadermodus wie zum Beispiel meine Modellbau-Funkfernsteuerung oder 
dergleichen, die erscheint beim Anstöpseln als zwei Laufwerke zum 
Datenaustausch dort MUSS man ZWINGEND den Schreibcache deaktivieren 
damit es sich verhält wie Windows sonst geht es überhaupt nicht.

Ich mache das dann so daß ich für derartige problematische Laufwerke je 
einen fstab-Eintrag anlege (zweckmäßigerweise über 
/dev/disk/by-label/WHATEVER so daß es egal ist welchen Gerätenamen das 
Laufwerk zufällig bekommt) und gebe dann dort die gewünschten 
mount-optionen an und auch ein festes Verzeichnis wo es hingemountet 
werden soll. Zumindest bei mir unter KDE bewirkt das daß der Automounter 
beim Anstöpseln zwar immer noch funktioniert wie gewohnt, er aber stets 
die Einstellungen aus der fstab verwendet.

Um den cache auszuschelten muss die option sync hinzugefügt werden.

Bei allen anderen unproblematischen Laufwerken ist mir das aber egal und 
ich verwende einfach ganz normal den "Laufwerk auswerfen" Button da 
schreibt er den Cache weg und anschließend zeigt er an daß er fertig ist 
und ich es entfernen kann.

: Bearbeitet durch User
Autor: Mutluit M. (mutluit)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Reicht folgendes nicht aus? :
sync ; umount /dev/sdX ; sleep 1 ; eject /dev/sdX

: Bearbeitet durch User
Autor: DPA (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eigentlich sollten umount und sync erst zurückkehren/sich beenden, wenn 
alles fertig geschrieben wurde. Bei einigen Dateisystementwicklern ist 
die Message aber wohl noch nicht angekommen (ZFS, btrfs,...). Es gibt 
schon ein paar Stellschrauben das Daten schneller zurückgeschrieben 
werden. Pro Device ist das nicht so viel:

https://www.kernel.org/doc/Documentation/ABI/testing/sysfs-class-bdi

Eventuell könnte man /sys/class/bdi/*/max_ratio auf ne niedrigere Zahl 
oder gar 0 setzen.

Und dann gibt es noch die allgemeinen Stellschrauben:
https://lonesysadmin.net/2013/12/22/better-linux-disk-caching-performance-vm-dirty_ratio/ 
btw. https://www.kernel.org/doc/Documentation/sysctl/vm.txt

Man könnte auch versuchen mit "mount -o sync ..."  dinge zu mounten. 
Eventuell kann man ja auch als sync remounten "mount -o remount,sync 
/existierender/mountpoint", aber das hab ich noch nicht getestet. 
Eventuell könnte man das dann auch in ein periodisch laufendes Skript 
packen oder so.

All das macht aber vermutlich vieles langsamer.

Autor: Dietmar S. (didi2)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bernd K. schrieb:
> soviel ich weiß geht das nur in der /etc/fstab.

Ich versuch's mal in der fstab, der Ansatz ist gut.

> ...ich verwende einfach ganz normal den "Laufwerk auswerfen" Button da
> schreibt er den Cache weg und anschließend zeigt er an daß er fertig ist
> und ich es entfernen kann.

Das tat es mit Scientific Linux 6.2 immer super. Aber in Ubuntu 16.04 
wird das Laufwerk angeblich sicher ausgeworfen und kann entnommen 
werden, obwohl der Schreibvorgang noch nicht fertig ist. Da frage ich 
mich wozu das "Sicher entfernen" im Kontextmenü dienen soll.


Mutluit M. schrieb:
> Reicht folgendes nicht aus?
> sync ; umount /dev/sdX ; sleep 1 ; eject /dev/sdX

Sicher könnte ich mir mein eigenes Auswurfscript schreiben. Das wird 
dann aber doch aufwändiger, da die externen Medien nicht immer den 
selben "Laufwerkbuchstaben" haben.

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dietmar S. schrieb:
> Ich hab versucht den Schreibcache in der hdparm.conf zu deaktivieren.
> write_cache = off

Das dürfte den Cache der Disk betreffen. Der ist aber nicht dein 
Problem. Sondern die Arbeitsweise des Betriebssystems.

Du wirst allerdings feststellen, dass es einen Grund dafür gibt, weshalb 
Windows im Umgang mit leicht entfernbaren Datenträgern grässlich langsam 
ist, wenn es viele kleine schreibende Transaktionen gibt. Windows geht 
nämlich davon aus, dass der Esel vor dem Bildschirm gerne mal den Stick 
mittendrin rauszieht. Linux normalerweise nicht.

Autor: Bernd K. (prof7bit)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wobei man dazu sagen muss die Default-Option für Wechseldatenträger (bei 
Ubuntu?) ist "flush", das sorgt dafür daß er zwar immer noch cached aber 
das Wegschreiben im Anschluss daran mehr oder weniger sofort beginnt, 
der Druck den Cache so schnell wie möglich sauber zu bekommen ist bei 
"flush" wesentlich höher, wenn er bei "flush" aufhört zu blinken ist der 
Cache definitiv sauber und man müsste es unbeschadet rausziehen können.

Das nutzt natürlich nichts wenn der Stick keine LED zum Blinken hat.

Du könntest in der Konsole ein sync absetzen, wenn das zurückkommt 
sollte der cache auf jeden Fall clean sein.

Autor: Dietmar S. (didi2)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bernd K. schrieb:
> Du könntest in der Konsole ein sync absetzen, wenn das zurückkommt
> sollte der cache auf jeden Fall clean sein.

Super, das funktioniert prima! Ein einfaches sync genügt mir vollkommen. 
War gerade schon dabei den fstab-Eintrag zu gestalten. Dann hätten aber 
alle Sticks und SSDs dasselbe Label oder dieselbe UUID haben müssen.

Mutluit M. schrieb:
> Reicht folgendes nicht aus?
> sync ; umount /dev/sdX ; sleep 1 ; eject /dev/sdX

Vorschlag war gut, hab gestern nur mal wieder zu kompliziert gedacht.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.