Некоторое время назад была некоторая дискуссия о том, что ext4 может оставить пустые файлы после нечистого размонтирования, что довольно хорошо описано в этой статье . По сути, из-за отложенного размещения записи могут храниться в кэше записи гораздо дольше, чем интервал фиксации по умолчанию для журнала ext (5 секунд).
Похоже, что проблемы были исправлены в патче, который в определенных ситуациях вынуждает распределять блоки, тем самым вынуждая данные на диск не более 5 секунд по умолчанию.
Мне интересно, что происходит, когда приложение перезаписывает существующие части файла без усечения или добавления самого файла. Будет ли это записано на диск в течение 5 секунд?
Это похоже на ситуацию, отличную от добавления к файлу: при добавлении размер файла изменяется, что является изменением метаданных; следовательно, фиксация журнала будет необходима в течение 5 секунд, и из-за данных = заказанные данные должны будут быть записаны до этого из-за соображений безопасности (в противном случае части удаленных файлов других пользователей могут отображаться для владельца добавленной файл).
При простой перезаписи данных файла нет причин, по которым запись данных должна происходить до фиксации журнала метаданных, поскольку старые данные принадлежат тому же пользователю, что и новые. Так происходит ли запись перед фиксацией или она может быть отложена дольше интервала фиксации журнала? Если да, то как долго?
Обновление: я знаю, что все это не имеет значения, когда вы делаете правильные вещи, то есть используете fsync (). (Это было основной причиной всех дискуссий о ext4 и потере данных - проблема касалась только приложений, не fsync () или не в нужные моменты.) Я не пишу свое собственное приложение, я спрашиваю, потому что я Я не знаю, все ли мои приложения работают правильно, и я хочу знать приблизительные сроки таких «опасных» записей. Причина для того, чтобы спросить, заключается в том, что мой графический драйвер регулярно вызывает панику в ядре, и я хочу знать, нужно ли мне беспокоиться о том, что данные записываются больше, чем за последние 5 секунд.
источник
sync
(или, что то же самое, когда срабатывает таймер интервала фиксации). В тот момент, когдаsync
завершается, нет абсолютно никаких грязных данных, метаданных или страниц журнала. Любые изменения в файловой системе во время синхронной передачи данных блокируются до ее завершения.commit=...
иsync
НЕ эквивалентны? Или Тыцо подразумевал, что даже сsync
ним он не фиксирует нераспределенные страницы? Я не могу себе представить, что это так, поскольку это будет нарушать спецификации POSIX. Возможно, вы могли бы использовать предоставленный мною скрипт bash для большей безопасности данных: PКаким бы ни был ответ на ваш вопрос, это не имеет значения.
Гарантировано подвергается поведение файловой системы ext4 является то , что «данные будут записаны на диске после успешного
sync
/fsync
вызова». Итак, если у вас есть приложение, которое заставляет вас задать этот вопрос, вы должны вставить вызовы синхронизации в критические точки, где необходимо обеспечить целостность данных. Если вы беспокоитесь о той же проблеме, то можете вызватьsync
утилиту командной строки, прежде чем предпринимать опасные действия, которые могут привести к нечистому завершению работы.источник