Может ли ext4 обнаружить поврежденное содержимое файла?
Может ли файловая система ext4 обнаруживать повреждение содержимого файлов? Если да, то он включен по умолчанию и как я могу проверить поврежденные данные?
Я прочитал, что ext4 поддерживает контрольные суммы для метаданных файла и его журнала, но мне не удалось найти информацию о контрольных суммах для фактического содержимого файла.
Для ясности: я хочу знать, изменился ли файл с момента последней операции записи.
Ответы
Ответ 1
"Могла ли файловая система ext4 обнаруживать повреждение содержимого файлов?"
Не в том смысле, которого вы ожидаете. Он выполняет ведение журнала, создавая логическую копию {before vs after}, чтобы обеспечить завершение io.
CRC/контрольная сумма - это тест для модификации из известного состояния, и хотя CRC или контрольная сумма могут не сравниться с оригиналом, это не означает, что файл затем "поврежден" (он же недействителен) - это только говорит он был изменен. Строго говоря, одной формой "коррупции" было бы изменить "магическое число" в начале файла, например, изменить% PDF на% xYz -, что сделало бы контент непригодным для использования в любой программе.
"... чтобы узнать, изменился ли файл с момента последней операции записи".
Системы, которые отслеживают mtime(), будут делать это равномерно, поэтому каждая запись будет изменять mtime(), делая ваш запрос невозможным.
Единственный способ, с помощью которого mtime() не отражал бы последнюю запись io, было бы деградацией мультимедиа.
Ответ 2
Нет, ext4
не может и не может обнаружить повреждение содержимого файла.
Известные файловые системы, реализующие обнаружение искажения данных с использованием тёмных данных и, следовательно, способные исправлять их, когда доступно достаточное резервирование, являются ZFS
и btrfs
.
Они делают это, вычисляя и сохраняя CRC
для каждого записанного блока данных и проверяя CRC
или каждый прочитанный блок данных. Если CRC не соответствует данным, последний не предоставляется вызывающему абоненту, и либо RAID
допускает использование альтернативного блока, либо сообщается об ошибке I/O
.
Процесс чтения никогда не будет получать поврежденные данные, либо это правильно, либо чтение не выполняется.