Linux Kernel (Ядро линукса) (часть 3)


Ext3 — журналируемая файловая система

Идея, лежащая в основе ведения журнала в Ext3, состоит в том, что каждое изменение в файловой системе, вносимое на высоком уровне, выполняется за два шага. Вначале копии всех блоков, подлежащих записи, сохраняются в журнале; затем, когда операция записи в журнал завершится (иными словами, данные зафиксированы в журнале), блоки сохраняются в файловой системе. После завершения операции записи в файловую систему (данные зафиксированы в файловой системе) копии блоков в журнале уничтожаются.

При восстановлении после сбоя программа e2fsck различает следующие два случая:
- Сбой системы произошел до фиксирования в журнале. Либо копии блоков, содержащих изменения высокого уровня, отсутствуют в журнале, либо они неполны. В обоих случаях e2fsck игнорирует их.
- Сбой системы произошел после фиксирования в журнале. Копии блоков корректны, и e2fsck записывает их в файловую систему.

В первом случае изменения, которые должны быть внесены в файловую систему, теряются, но ее состояние остается непротиворечивым. Во втором случае e2fsck вносит необходимые изменения, тем самым исправляя противоречивость, возникшую в результате незавершенной операции пересылки данных.
Не следует ожидать от журналируемой файловой системы слишком многого. Она гарантирует непротиворечивость только на уровне системных вызовов. Например, сбой операционной системы, возникший во время копирования большого файла с помощью системных вызовов write о, прервет операцию копирования, и копия окажется короче оригинала.

Более того, журналируемые файловые системы обычно не копируют все блоки в журнал. На самом деле, каждая файловая система состоит из блоков двух типов: содержащих метаданные и содержащих обычные данные. В файловых системах Ext2 и Ext3 существует шесть видов метаданных: суперблоки, дескрипторы групп блоков, индексные дескрипторы, блоки косвенной адресации (косвенные блоки), блоки с битовыми картами блоков данных и блоки с битовыми картами индексных дескрипторов. Другие файловые системы применяют собственные типы метаданных.

Некоторые журналируемые файловые системы, такие как SGI XFS и IBM JFS, ограничиваются тем, что записывают в журнал только операции, затрагивающие метаданные. Конечно, записи метаданных в журнал достаточно для восстановления структур файловой системы, хранящихся на диске. Однако, поскольку операции над блоками, содержащие данные файлов, в журнале не регистрируются, ничто не мешает сбою повредить содержимое файлов.

Файловую систему Ext3 можно сконфигурировать так, чтобы она записывала в журнал операции, затрагивающие как метаданные файловой системы, так и блоки с данными файлов. Поскольку регистрация в журнале каждой операции записи ведет к значительному снижению производительности, Ext3 позволяет системному администратору решать, что будет заноситься в журнал. В частности, она предлагает три режима ведения журнала:
- Журналирование — все изменения данных и метаданных файловой системы записываются в журнал. Этот режим минимизирует вероятность потери изменений в файле, но требует много дополнительных обращений к
диску. Например, когда создается новый файл, все его блоки с данными должны быть продублированы в журнале. Это самый безопасный и самый медленный режим ведения журнала в Ext3.
- Упорядоченный— в журнал записываются только изменения в метаданных файловой системы. Однако файловая система Ext3 группирует метаданные и соответствующие блоки данных так, что обычные данные записываются на диск раньше метаданных. Таким образом, вероятность порчи данных в файлах снижается. Например, каждая операция записи, увеличивающая длину файла, гарантированно защищена журналом. Этот режим ведения журнала устанавливается в Ext2 по умолчанию.
- Запись на диск — в журнал записываются только изменения в метаданных файловой системы. Так поступают другие файловые системы с журналом, и это самый быстрый режим.

Режим ведения журнала в файловой системе Ext3 задается опцией команды mount. Например, чтобы смонтировать файловую систему, которая хранится в разделе /dev/sda2, на точке монтирования /jdisk с режимом ведения журнала Запись на диск”, системный администратор может ввести следующую команду:
# mount -t ext3 -о data=writeback /dev/sda2 /jdisk

Предыдущая страница | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 | Следующая страница




Возможно, Вас также заинтересует:

ОС Knoppix - это Linux без про...

ВведениеЕсли вы цените свое время, умеете считать деньги и знаете стоимость информации, то эта книга...

Linux Kernel (Ядро линукса) (ч...

Спин-блокировкаСпин-блокировка необходима в многопроцессорной системе, потому что могут возникнуть...

Linux Kernel (Ядро линукса) (ч...

Копирование при записи В системах Unix первых поколений создание процесса было реализовано довольно...

Linux Kernel (Ядро линукса) (ч...

Буферы блоков и головы буферовУ каждого буфера есть дескриптор голова буфера, имеющий тип buffer...