Sync namountované SD karty

prezek

  • ***
  • 229
    • Zobrazit profil
Sync namountované SD karty
« kdy: 11. 11. 2013, 12:12:02 »
Pomocí Linuxu se snažím logovat data na SD kartu, ale neukládají se mi pořádně soubory.
Po vytvoření souboru a zapsání dat do souboru zavolám funkci fflush, zkontroluju pomocí ls -l, že soubor existuje a má odpovídající velikost. Pak odpojím napájení, nastartuju znova systém, a něky tam ten nový soubor je a někdy není. Vím, že by šlo mountovat kartu s parametrem sync, a pak by se měly soubory ukládat na disk synchronně se zápisem do souboru, ale to by prý snižovalo životnost karty. Můžete mi někdo poradit, jak vyvolat synchronizaci požadovaného souboru a kdy probíhá automatická synchronizace?
« Poslední změna: 11. 11. 2013, 13:56:00 od Petr Krčmář »


prezek

  • ***
  • 229
    • Zobrazit profil
Re:Synchronzace namountovaného disku
« Odpověď #1 kdy: 11. 11. 2013, 12:23:13 »
Achjo, takovou dobu se s tím trápím a pak najdu řešení 5 minut po dotazu na fórum.
Kód: [Vybrat]
fsync(fileno(fileLog));

prezek

  • ***
  • 229
    • Zobrazit profil
Re:Synchronzace namountovaného disku
« Odpověď #2 kdy: 11. 11. 2013, 12:25:01 »
Ale stejně by mě ještě zajímalo, kdy zapisuje Linux data na disk automaticky.

libcha

Re:Synchronzace namountovaného disku
« Odpověď #3 kdy: 11. 11. 2013, 12:41:25 »
Nevím jak je to s SD kartami, ale některé flashdisky umí i takové věci, jako že zapíšeš, flushneš, syncneš, z pohledu kernelu už je fakt zapsáno ale ve skutečnosti není, protože vnitřní logika disku to má v nějaké své keši. Jediným moudrým řešením je imho chvíli počkat před odpojením napájení..

Re:Sync namountované SD karty
« Odpověď #4 kdy: 11. 11. 2013, 14:39:39 »
Ahoj,

k zápisu dat z bufferu na disk dojde za těchto okolností:
  • po dosažení hodnoty vm.dirty_background_bytes (standardně 10% RAM) − zápis probíhá na pozadí samostatným vláknem kernelu
  • po dosažení hodnoty vm.dirty_bytes (standardně 20% RAM) − zápis probíhá blokováním dalších volání write() (známý efekt zamrznutí kopírování na flashdisk po dosažení určitého procenta)
  • po uplynutí vm.dirty_expire_centisecs (standardně 30 sekund) − zápis probíhá (vcelku nečekaně) na popředí blokováním volání write()


prezek

  • ***
  • 229
    • Zobrazit profil
Re:Sync namountované SD karty
« Odpověď #5 kdy: 11. 11. 2013, 14:49:45 »
Ondřej Caletka:
děkuju. Takže nejpozději 30 s po tom, co provedu fflush, tak by se měla data zapsat na kartu. Chápu to správně?
(cat /proc/sys/vm/dirty_expire_centisecs mi vrací 3000)