Ключевые слова:freebsd, ufs, fs, (найти похожие документы)
Date: Wed, 07 Jul 2004 13:13:10 +0600
From: Yar Tikhiy <yar@comp.chem.msu.su.>
Newsgroups: ftn.ru.unix.bsd
Subject: Пояснение принципов работы Softupdates в FreeBSD
>> Softupdates,
>> очевидно, помогает только от несвоевременных перезагрузок (сбой
>> питания, задетый ногой reset, kernel panic и т.п.)
SAC> Действительно ли Softupdates помогает при _всех_ перезагрузках
SAC> по питанию, reset'у и т.п.?
Чтобы понять ответ на этот вопрос, надо а) представлять,
как работает softupdates и б) определиться, что значит
"помогает".
Ключевая идея softupdates состоит вот в чем: надо записывать
мета-данные на диск в такой последовательности, чтобы после
неожиданного сбоя все указатели в структурах на диске были
валидными. Значит, надо сперва выделить и инициализировать
дисковый объект, и только затем записать указатель на него;
и наоборот, надо сначала убрать любые указатели на объект, а
потом освободить его. Это относится к дисковым индексам (i-node),
блокам данных и т.п. Очевидно, что после сбоя могут оставаться
выделенные объекты, на которые нет ссылок, но такого рода дефекты
можно чинить на лету, просто освобождая эти объекты. В то же
время, файловая структура остается целостной.
Таким образом, softupdates зависит от двух условий. Во-первых,
блоки должны записываться на диск в той последовательности, как ОС
передает их контроллеру. Hо современные контроллеры и диски могут
сами переупорядочивать запись блоков для оптимизации перемещения
головок и т.п. (хотя tagged queuing позволяет ОС это отслеживать).
Во-вторых, предполагается, что сбой не может прервать посередине
операцию записи блока на диск. Умеют ли диски завершать текущую
запись блока при сбое питания, я не знаю (хотя приятно было бы на
это надеяться :-)
Если эти условия выполняются, то softupdates помогает ровно в
одном: не будет дефектов в файловой структуре -- ее можно
монтировать даже без fsck. Hо само ее состояние может
соответствовать любому моменту времени в прошлом.
Так что целостности данных никто не гарантирует. В частности,
структурированные файлы (базы данных и т.п.) с точки зрения
приложения, вероятно, будут битые.
SAC> Какие телодвижения нужно произвести, чтобы при перезагрузке при пропадании
SAC> питания гарантировать целостность файловой системы и минимизировать потери
SAC> данных? При этом предполагается, что запись на диск идет очень активно,
SAC> почти непрерывно.
Буду неоригинален: надо поставить блок бесперебойного питания.
--
Yar