Jakiś czas temu dyskutowano o tym, że ext4 potencjalnie pozostawia puste pliki po nieczystym odmontowaniu, podsumowane całkiem dobrze w tym artykule . Zasadniczo, z powodu opóźnionego przydziału, zapisy mogą być przechowywane w pamięci podręcznej zapisu przez znacznie dłuższy czas niż domyślny interwał zatwierdzania dziennika rozszerzenia (5 sekund).
Wydaje się, że problemy zostały naprawione w łatce, która wymusza blokowanie przydziału w określonych sytuacjach, tym samym zmuszając dane do dysku domyślnie po maksymalnie 5 sekundach.
Zastanawiam się, co się stanie, gdy aplikacja zastąpi istniejące części pliku, bez obcinania lub dołączania samego pliku. Czy to również zostanie zmuszone do dysku w ciągu 5 sekund?
Wydaje się, że jest to inna sytuacja niż dołączanie do pliku: podczas dołączania zmienia się rozmiar pliku, co jest zmianą metadanych; dlatego zatwierdzenie dziennika będzie konieczne w ciągu 5 sekund, a ze względu na dane = zamówione, dane będą musiały zostać wcześniej zapisane ze względów bezpieczeństwa (w przeciwnym razie części usuniętych plików innych użytkowników mogą pojawić się dla właściciela dołączonego plik).
Po prostu nadpisując dane pliku, nie ma powodu, dla którego zapis danych powinien nastąpić przed zatwierdzeniem dziennika metadanych, ponieważ stare dane należą do tego samego użytkownika co nowy. Czy więc zapis ma miejsce przed zatwierdzeniem, czy może być opóźniony dłużej niż interwał zatwierdzenia dziennika? Jeśli tak, to jak długo?
Aktualizacja: Wiem, że wszystko to jest nieistotne, gdy robisz właściwą rzecz, to znaczy używając fsync (). (To był główny powód całej dyskusji na temat ext4 i utraty danych - problem dotyczył tylko aplikacji, które nie były fsync () lub nie we właściwych momentach.) Nie piszę własnej aplikacji, pytam, ponieważ ja nie wiem, czy wszystkie moje aplikacje działają poprawnie, i chcę znać przybliżone ramy czasowe dla takich „niebezpiecznych” zapisów. Powodem pytania jest to, że mój sterownik grafiki regularnie powoduje panikę jądra i chcę wiedzieć, czy muszę się martwić o więcej niż ostatnie 5 sekund zapisu danych.