Каждая операционная система использует собственные файловые системы для хранения данных. Для Windows это NTFS, в macOS применяется APFS, а большинство Linux дистрибутивов полагаются на Ext4. Несмотря на то, что все эти файловые системы отличаются друг от друга на фундаментальном уровне, у них есть и нечто общее – все они являются журналируемыми файловыми системами.
Давайте немного поговорим о журналировании и том, как оно влияет на повседневную работу.
Что такое журналирование?
Обновление файловой системы для отображения изменений в файлах и директориях обычно требует проведения множества операций записи. Поэтому при незапланированном прерывании одной из операций записи (в случае отказа питания или системного сбоя), структуры данных могут остаться в недопустимом, промежуточном состоянии.
К примеру, удаление файла в файловой системе Unix включает в себя три шага:
- Удаление его записи в директории
- Освобождение индексного дескриптора в пул свободных дескрипторов
- Возврат всех дисковых блоков в пул свободных дисковых блоков
В случае возникновения сбоя во время одной из этих операций, операционной системе потребуется обнаружить и устранить ошибки при помощи специальной утилиты. Процесс проверки может занять довольно продолжительное время, в особенности если у вас большой объем данных. С другой стороны, иногда файловая система может быть повреждена крайне значительно, из-за чего ОС загружается только в однопользовательском режиме, предлагая устранить проблемы самостоятельно.
Для того чтобы предотвратить эти проблемы журналируемые файловые системы выделяют специальную область – журнал, в который записываются все изменения, перед тем как применять их к файлам и директориям. В случае возникновения сбоя, утилита восстановления просто производит чтение из журнала файловой системы и воспроизводит все изменения, пока ФС вновь не станет согласованной.
Некоторые файловые системы позволяют увеличивать, уменьшать и перераспределять журнал, как обычный файл, в тоже время другие выделяют журнал в специальную область или скрытый файл, чтобы исключить возможность его перемещения или изменения размера, пока файловая система используется.
Заключение
Журналирование в файловых системах служит для предотвращения потери данных в случае возникновения сбоев или непредвиденного выключения. Все команды изменения, прежде чем быть исполнены заносятся в журнал, что помогает избежать повреждения данных и вместе с тем долгой проверки файлов.
Не забудьте подписаться и поставить лайк. Впереди будет еще много крутых статей.