Основная цель, которая преследуется при создании журналируемых файловых
систем, насколько я понял, состоит в том, чтобы обеспечить быстрое
восстановление системы после сбоев (например, после потери питания). Дело
в том, что если произойдет такой сбой, то часть информации о расположении
файлов теряется, поскольку не все изменения сразу записываются на диск.
После этого программа fsck
вынуждена просматривать весь диск блок
за блоком (пользуясь битовыми матрицами занятых блоков и индексных
дескрипторов) с целью восстановления потерянных связей. При увеличении
размера дисков вдвое, вдвое увеличивается и время, необходимое для
просмотра всего диска. А при тех объемах, которых достигают современные
диски, особенно на серверах, время, необходимое для того, чтобы
просмотреть весь диск, стало недопустимо велико: оно стало достигать часов
и даже суток. А сервер в это время не отзывается! Кроме того, нет
гарантии, что все связи удастся восстановить.
В журналируемых файловых системах для решения этой проблемы применяют технику транзакций, развитую в теории баз данных. Суть этой техники в том, что действие не считается завершенным, пока все изменения не сохранены на диске. А чтобы сбои, происходящие в течение времени, необходимого для завершения всех операций, не приводили к необратимым последствиям, все действия и все изменяемые данные протоколируются. Если сбой все-таки произойдет, то по этому протоколу можно вернуть систему в безошибочное состояние.
Главное отличие в технике транзакций, применяемой в базах данных, от аналогичной техники, применяемой в журналируемых файловых системах, состоит в том, что в базах данных сохраняются в протоколе как сами изменяемые данные, так и вся управляющая информация, в то время как понятие транзакции в файловых системах подразумевает сохранение только мета-данных: индексных дескрипторов изменяемого файла, битовых карт распределения свободных блоков и свободных индексных дескрипторов. Дело в том, что если сохранять все изменяемые данные, то теряется смысл кеширования записи на диск и уменьшается скорость дисковых операций. Мета-данные же, во-первых, меньше по размеру, а, во- вторых, сохраняются в специально выделенной области диска, что позволяет избежать чрезмерных затрат времени на ведение протокола.
Файловые системы ext3fs
и JFS являются журналируемыми. Надо
отметить, что ext3fs
не является совершенно новой разработкой, а
является просто надстройкой над ext2fs
, обеспечивающей ведение
журнала и организацию транзакций. Файловые системы XFS и JFS являются
открытыми версиями коммерческих файловых систем.