Введение
Общая дисковая файловая система для компьютерных кластеров Linux
В вычислительной технике глобальная файловая система 2 или GFS2 — это общая дисковая файловая система для компьютерных кластеров Linux. GFS2 обеспечивает всем узлам кластера прямой и одновременный доступ к одному и тому же общему блочному хранилищу, в отличие от распределённых файловых систем, которые распределяют данные по всему кластеру. GFS2 также может использоваться как локальная файловая система на отдельном компьютере. GFS2 не имеет режима работы в отключенном состоянии и не предполагает разделение на роли клиента и сервера. Все узлы в кластере GFS2 функционируют как равноправные. Использование GFS2 в кластере требует аппаратного обеспечения, обеспечивающего доступ к общему хранилищу, и менеджера блокировок для управления доступом к этому хранилищу. Менеджер блокировок работает как отдельный модуль, поэтому GFS2 может использовать распределённый менеджер блокировок (DLM) для кластерных конфигураций и менеджер блокировок "nolock" для локальных файловых систем. Более ранние версии GFS также поддерживают GULM — серверный менеджер блокировок, реализующий резервирование посредством переключения на резервный узел. GFS и GFS2 являются свободным программным обеспечением, распространяемым на условиях лицензии GNU General Public License.
Оборудование
Конструкция GFS и GFS2 ориентирована на среды, подобные SAN. Хотя их можно использовать как файловую систему для одного узла, для полноценной работы требуется SAN. Это может быть реализовано с помощью iSCSI, FibreChannel, AoE или любого другого устройства, которое может быть представлено в Linux как блочное устройство, совместно используемое несколькими узлами, например, устройство DRBD. DLM требует IP-сеть для обмена данными. Обычно это Ethernet, но существуют и другие возможные решения. В зависимости от выбранной SAN, возможно объединение этих сетей, однако стандартной практикой является использование отдельных сетей для DLM и хранения данных. GFS требует наличия механизма блокировки (fencing) того или иного типа. Это требование к кластерной инфраструктуре, а не к GFS/GFS2 как таковым, но оно необходимо для всех многоузловых кластеров. Обычно используются силовые коммутаторы и контроллеры удаленного доступа (например, DRAC, IPMI или ILO). Также могут применяться механизмы блокировки, основанные на виртуализации и гипервизорах. Блокировка гарантирует, что узел, который кластер считает вышедшим из строя, не сможет внезапно возобновить работу, пока другой узел восстанавливает журнал для этого узла. Кроме того, после завершения восстановления узел может быть автоматически перезапущен.
Содержание дневника
GFS и GFS2 – файловые системы с журналированием, при этом GFS2 поддерживает набор режимов журналирования, аналогичный ext3. В режиме data=writeback в журнал записываются только метаданные. Это единственный режим, поддерживаемый GFS, однако возможно включить журналирование для отдельных файлов данных, но только если они имеют нулевой размер. Журналируемые файлы в GFS имеют ряд ограничений, таких как отсутствие поддержки системных вызовов mmap или sendfile, а также используют отличный от обычных файлов формат хранения на диске. Существует также атрибут "inherit journal", который при установке для каталога приводит к тому, что все файлы (и подкаталоги), созданные в этом каталоге, получают флаг журналирования (или наследуемого журналирования, соответственно). Это может использоваться вместо опции монтирования data=journal, поддерживаемой ext3 (которую GFS/GFS2 не поддерживает). GFS2 также поддерживает режим data=ordered, который аналогичен data=writeback, за исключением того, что измененные данные синхронизируются с диском перед завершением каждой операции сброса журнала. Это гарантирует, что блоки, добавленные в индексный дескриптор (inode), будут синхронизированы с диском до обновления метаданных для отражения нового размера, что предотвращает появление неинициализированных блоков в файле в случае сбоя узла. Режим журналирования по умолчанию – data=ordered, что соответствует настройкам по умолчанию в ext3. GFS2 пока не поддерживает режим data=journal, но, в отличие от GFS, использует один и тот же формат хранения на диске как для обычных, так и для журналируемых файлов, а также поддерживает атрибуты журналирования и наследуемого журналирования. GFS2 также снимает ограничения на изменение атрибута журналирования файла в любое время, пока файл не открыт (аналогично ext3). Для повышения производительности каждый узел в GFS и GFS2 имеет свой собственный журнал. В GFS журналы представляют собой дисковые экстенты, а в GFS2 – обычные файлы. Количество узлов, которые могут одновременно монтировать файловую систему, ограничено количеством доступных журналов.
no support for the mmap or sendfile system calls, they also use a different on disk format from regular files. There is also an "inherit journal" attribute which when set on a directory causes all files (and sub directories) created within that directory to have the journal (or inherit journal, respectively) flag set. This can be used instead of the data=journal mount option which ext3 supports (and GFS/GFS2 does not). GFS2 also supports data=ordered mode which is similar to data=writeback except that dirty data is synced before each journal flush is completed. This ensures that blocks which have been added to an inode will have their content synced back to disk before the metadata is updated to record the new size and thus prevents uninitialised blocks appearing in a file under node failure conditions. The default journaling mode is data=ordered, to match ext3's default. , GFS2 does not yet support data=journal mode, but it does (unlike GFS) use the same on disk format for both regular and journaled files, and it also supports the same journaled and inherit journal attributes. GFS2 also relaxes the restrictions on when a file may have its journaled attribute changed to any time that the file is not open (also the same as ext3). For performance reasons, each node in GFS and GFS2 has its own journal. In GFS the journals are disk extents, in GFS2 the journals are just regular files. The number of nodes which may mount the filesystem at any one time is limited by the number of available journals.