Журнализированные файловые системы и сбой питания
Я слышал, что даже журнальные файловые системы, такие как EXT3/EXT4, могут быть повреждены во время сбоя питания, например, из Википедии [1]:
In the event of a system crash or power failure,
such file systems are quicker to bring back online and
less likely to become corrupted.
Может ли кто-нибудь предоставить более подробную информацию, приводя примеры, которые, когда
- коррупция может произойти
- коррупция предотвращается журнализируемыми файловыми системами
3 ответа
Повреждение может также произойти на большинстве современных дисков из-за переупорядочения на диске.
Современные диски обычно переупорядочивают запросы, которые используются для повышения производительности (переупорядочивая записи, чтобы сделать весь список запросов менее наглядным), это называется Tagged Command Queuing.
Возможно, запись в журнал на диске задерживается, потому что в настоящее время более эффективно с позиции заголовка записывать в другом порядке, чем тот, который операционная система запрашивала в качестве фактического порядка, то есть блоки могут быть зафиксированы до того, как журнал будет.
Чтобы решить эту проблему, нужно заставить операционную систему явно ждать фиксации журнала, прежде чем совершать какие-либо записи. Это известно как барьер. Большинство файловых систем не используют это по умолчанию и явно требуют включения с опцией монтирования.
mount -o barrier=1 /dev/sda /mntpnt
Большим недостатком барьеров является то, что они имеют тенденцию замедлять ввод-вывод, иногда резко (около 30%), поэтому по умолчанию они не включены. В дополнение к этому, все становится хорошо, когда вы начинаете добавлять логические слои поверх стандартных дисков, таких как LVM или Raid. LVM (относительно недавно) добавил барьерную поддержку для большинства конфигураций LV, и mdadm, кажется, имел ее некоторое время.
Большинство журнализированных файловых систем (ext3/4, ntfs) защищают только метаданные транзакционно. Если происходит сбой питания, пользовательские данные могут оказаться несовместимыми, но метаданные в порядке.
Zfs и я думаю, что xfs защищают как метаданные, так и пользовательские данные, используя транзакции и журналы.
Барьер - это способ избежать повреждения при перебоях в питании, но эта функция безопасности сопровождается падением производительности. Лучшее из двух миров (производительность / барьер = выкл. Практически без риска повреждения) стоит немного дороже: используйте устройства с энергонезависимым кэшем записи с резервным питанием от батареи.