Sinds de introductie van ext4 hebben sommige apps/users last van file corruptie na een crash. Het is geen bug in het FS en niet alleen met ext4 heeft men er last van.
Een temp file schrijven, fsync en rename wordt vaak voorgesteld, maar dat heeft ook nadelen. Meta-data, inclusief file owner, gaat dan mogelijk verloren en je hebt permissie nodig om een temp file te schrijven. Sommigen vinden het file owner issue geen punt.
Hoe doen anderen dit en wat vinden anderen hier van?
Welke code wordt gebruikt om dit wel goed te doen?
De non-atomic variant is iets als (pseudo):
Een temp file schrijven, fsync en rename wordt vaak voorgesteld, maar dat heeft ook nadelen. Meta-data, inclusief file owner, gaat dan mogelijk verloren en je hebt permissie nodig om een temp file te schrijven. Sommigen vinden het file owner issue geen punt.
Hoe doen anderen dit en wat vinden anderen hier van?
Welke code wordt gebruikt om dit wel goed te doen?
De non-atomic variant is iets als (pseudo):
C++:
1
2
3
4
5
6
7
| int safe_save(const char* fname, const void* s, size_t cb_s) { int fd = open(fname); write(fd, s, cb_s); // fsync(fd); close(fd); } |
[ Voor 16% gewijzigd door Olaf van der Spek op 29-12-2010 18:33 ]