Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: prezek 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?
-
Achjo, takovou dobu se s tím trápím a pak najdu řešení 5 minut po dotazu na fórum.
fsync(fileno(fileLog));
-
Ale stejně by mě ještě zajímalo, kdy zapisuje Linux data na disk automaticky.
-
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í..
-
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()
-
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)