<<
>>

Стабильное хранилище данных

Как видим, дисковые устройства иногда допускают ошибки. Рабочие секторы могут внезапно превратиться в сбойные. Могут неожиданно выйти из строя и целые диски. Защитой от внезапного сбоя на нескольких секторах или от выхода из строя всего диска выступают RAID-массивы.
Но и они не защищают от ошибок записи, основанных прежде всего на неверных данных. Они также не защищают от сбоев при записи, повреждающих исходные данные без замены их новыми данными.

Для некоторых приложений очень важно, чтобы данные никогда не терялись или не повреждались, даже при ошибках диска или центрального процессора. В идеале диск должен просто работать без ошибок весь срок своей эксплуатации. К сожалению, это невозможно. Но вполне возможно создание дисковой подсистемы, обладающей следующим свойством: при записи на эту подсистему либо производится верная запись на диск, либо не производится вообще никакой записи и данные остаются неприкосновенными. Такая система называется стабильным хранилищем данных (stable storage) и реализуется программным способом (Lampson and Sturgis, 1979).

Задача заключается в том, чтобы любой ценой сохранить целостность диска. Далее будет рассмотрен упрощенный вариант исходного замысла.

Перед описанием алгоритма важно располагать четкой моделью возможных ошибок. Эта модель предполагает, что при записи блока на диск (в один или несколько секторов) запись может быть либо верной, либо неверной и возникшая ошибка может быть выявлена при последующем чтении путем проверки значения полей ECC. В принципе, гарантированно выявить ошибку не представляется возможным, поскольку при использовании, скажем, 16-байтного поля ECC, защищающего 512-байтный сектор, мы имеем дело с 24096 возможными значениями данных и только с 2144 значениями поля ECC[29].

Таким образом, если данные блока искажаются в процессе записи, а данные ECC не искажаются, существуют миллиарды и миллиарды неверных комбинаций, которые дают один и тот же код ЕСС. Если возникнет одна из них, ошибка не будет обнаружена. В общем, вероятность того, что случайные данные будут иметь верный 16-байтный код ЕСС, равна примерно 2-144, то есть достаточно мала для того, чтобы назвать ее нулевой, хотя на самом деле это и не так.

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

Модель допускает и сбои в работе центрального процессора, при которых он просто останавливает свою работу. Останавливаются также все проводимые в момент сбоя операции записи на диск, что приводит к определяемым впоследствии неверным данным в одном из секторов и неверному значению поля ЕСС. При всех этих условиях можно создать стопроцентно надежное стабильное хранилище данных в том смысле, что либо запись будет вестись корректно, либо старые данные будут оставаться на своем месте. Разумеется, речь не идет о защищенности от природных катаклизмов вроде внезапного землетрясения, после которого компьютер свалится в стометровую трещину и упадет в кипящую магму. Восстановить данные программным способом после такого происшествия будет затруднительно.

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

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

Если он записался неправильно, то проводится повторная запись и чтение до п раз, пока все не получится. После п последовательных отказов блоку переназначается запасной сектор и операция повторяется до достижения успеха независимо от того, сколько запасных секторов придется перепробовать. Когда запись на диск 1 увенчается успехом, соответствующий блок будет записан и считан на диск 2, если нужно будет, то и несколько раз, пока все также не завершится успешно. Если не произойдет сбоев в работе центрального процессора, то по завершении стабильной записи блок будет правильно записан на оба накопителя и проверен на обоих.

2. Стабильная операция чтения. При этой операции первоначально производится чтение блока с диска 1. Если операция выдаст неверный код ЕСС, чтение будет повторяться до п раз. Если все попытки выдадут неверные коды ЕСС, соответствующий блок будет считан с диска 2. Учитывая то, что после успешной стабильной записи остаются две хорошие копии блока, и предполагая, что вероятность одновременного спонтанного выхода из строя одного и того же блока на обоих накопителях в определенный период времени пренебрежимо мала, стабильное чтение всегда проходит успешно.

3. Операция восстановления после аварии. После аварии программа восстановления сканирует оба диска, сравнивая соответствующие блоки. Если пара блоков исправна и содержит одинаковые данные, то с ними ничего не делается. Если у одного из

них имеется ошибка кода ECC, то плохой блок переписывается с использованием соответствующего исправного блока. Если в паре исправны оба блока, но их данные различаются, то блок с диска 1 записывается на диск 2.

В отсутствие отказов центрального процессора такая схема демонстрирует неизменную работоспособность, поскольку в результате операции стабильной записи всегда получаются две исправные копии каждого блока и предполагается, что спонтанные ошибки никогда не возникают сразу на двух блоках. А что будет при отказе центрального процессора в ходе стабильной записи? Все зависит от того, когда именно произошел отказ.

На рис. 5.23 показаны пять возможных вариантов.

Рис. 5.23. Анализ влияния сбоев на стабильную запись

На рис. 5.23, а сбой центрального процессора происходит перед записью обеих копий блока. При восстановлении ни одна из копий не будет изменена, и будут продолжать существовать старые данные, что вполне допустимо.

На рис. 5.23, б сбой центрального процессора происходит во время записи на диск 1, приводя к разрушению содержимого блока. Но программа восстановления обнаруживает эту ошибку и восстанавливает блок на диске 1 с диска 2. Последствия сбоя ликвидируются, и полностью восстанавливается старое состояние.

На рис. 5.23, в сбой центрального процессора происходит после записи на диск 1, но перед записью на диск 2. Здесь система проходит точку невозврата: программа восстановления копирует блок с диска 1 на диск 2. Запись завершается успешно.

Ситуация на рис. 5.23, г похожа на ситуацию на рис. 5.23, б: в процессе восстановления неповрежденный блок записывается на место поврежденного. И в конечном счете в обоих блоках содержатся новые данные.

И наконец, на рис. 5.23, д программа восстановления видит, что оба блока имеют одинаковые значения, поэтому ей не нужно вносить изменения, и здесь, как и в других случаях, запись завершается успешно.

Эту схему можно оптимизировать и улучшать различными способами. Начнем с того, что попарное сравнение всех блоков после сбоя вполне осуществимая, но весьма затратная операция. Гораздо лучше будет отслеживать, какой именно блок подвергался операции стабильной записи, тогда при восстановлении нужно будет проверить только один этот блок. У некоторых компьютеров есть небольшой объем энергонезависимой

памяти в виде специальной КМОП-микросхемы, запитанной от литиевой батарейки. Такие батарейки работают в течение нескольких лет, возможно, в течение всего срока эксплуатации компьютера.

В отличие от оперативной памяти, данные которой теряются после сбоя, энергонезависимая память своих данных не теряет[30]. В ней обычно хранятся время и дата (изменяемые специальной микросхемой), благодаря чему компьютеры всегда знают, который час, даже после отключения питания.

Предположим, что для нужд операционной системы доступны несколько байтов энергонезависимой памяти. Тогда операция стабильного чтения может еще до начала записи поместить в энергонезависимую память номер блока, который предназначен для обновления. После успешного завершения стабильной записи номер блока в энергонезависимой памяти переписывается недопустимым номером блока со значением, к примеру, 1. При этих условиях после сбоя программа восстановления может проверить энергонезависимую память и узнать, проводилась ли операция стабильной записи во время сбоя, и если проводилась, какой блок записывался, когда произошел сбой. После этого две копии блоков могут быть проверены на правильность и согласованность.

Если энергонезависимая память недоступна, она может быть сымитирована следующим образом: в начале стабильной записи значение какого-нибудь фиксированного блока на диске 1 перезаписывается номером блока, подлежащего обновлению с помощью операции стабильной записи. Затем данные фиксированного блока считываются для проверки правильности. После получения правильного значения этого блока записывается и проверяется соответствующий блок на диске 2. Когда стабильная запись благополучно завершается, в оба фиксированных блока записывается недопустимый номер блока и правильность записи опять проверяется. В этом случае после сбоя нетрудно определить, проводилась во время сбоя стабильная запись или нет. Разумеется, эта технология требует для записи стабильного блока проведения восьми дополнительных дисковых операций, поэтому она должна использоваться с большой оглядкой.

Следует сделать еще одно, последнее замечание. Мы исходили из предположения, что за день в паре блоков может произойти только одно спонтанное превращение рабочего блока в сбойный. Но при довольно большом количестве дней может стать сбойным еще один блок. Следовательно, с целью устранения любых повреждений полное сканирование обоих дисков должно проводиться не реже одного раза в день. Таким образом, каждое утро оба диска неизменно имеют идентичное состояние. Даже если оба составляющих пару блока в течение нескольких дней станут сбойными, все ошибки будут благополучно устранены.

5.5.

<< | >>
Источник: Э. ТАНЕНБАУМ Х. БОС. СОВРЕМЕННЫЕ ОПЕРАЦИОННЫЕ СИСТЕМ Ы 4-е ИЗДАНИЕ. 2015

Еще по теме Стабильное хранилище данных:

  1. V. 2. МОДЕЛЬ ПАРЦИАЛЬНОГО ХРАНИЛИЩА ПАМЯТИ ЧЕЛОВЕКА
  2. V. 2. 5. Структура парциального хранилища памяти.
  3. ВЛИЯНИЕ ТРЕТИХ СТРОК НА СТАБИЛЬНОСТЬ СЕМЬИ
  4. ФЕНОМЕН СТАБИЛЬНОСТИ МИРА
  5. ВЫЧИСЛЕНИЕ СРОКА СТАБИЛЬНОСТИ БРАКА
  6. Работа стабильная
  7. ВЛИЯНИЕ ПЕРВЫХ СТРОК НА СТАБИЛЬНОСТЬ СЕМЬИ
  8. Тест для оценки стабильности брака
  9. ВЛИЯНИЕ ВТОРЫХ СТРОК НА СТАБИЛЬНОСТЬ СЕМЬИ
  10. ВЛИЯНИЕ ПЕРВОГО СТОЛБЦА НА СТАБИЛЬНОСТЬ СЕМЬИ
  11. ВЛИЯНИЕ ВТОРОГО СТОЛБЦА НА СТАБИЛЬНОСТЬ СЕМЬИ
  12. 7.2.2. Руководитель как гарант стабильности редакционного коллектива
  13. Лица, производящие обыск, должны учитывать, что при изготовлении тайников и различных хранилищ преступники в некоторых случаях учитывают целый ряд факторов психологического характера.