dyn-disks-truth

вся правда о динамических дисках

крис касперски, ака мыщъх, no-email

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

Динамические диски появились еще в NT 3.51 (по другим данным в NT 4.0), только там они назывались мультидисками (multidisk) и представляли собой обыкновенные программные RAID'ы широко распространенные в мире UNIX.

Информация о конфигурации мультидисков хранилась в реестре и крах системы приводил к потере всех данных. Тоже самое относилось к полной переустановке системы или попытке перенести жесткий диск на систему с другой NT. Эти недостатки нивелировали все достоинства мультидисков, существенного ограничивая область их применения.

Начиная с W2K, Microsoft слегка усовершенствовала менеджер мульидисокв и теперь информация о конфигурации хранится непосредственно на самом диске, откуда считывается в реестр при первом монтировании мультидиска, благодаря чему с одной стороны Microsoft смогла избежать переписывания старого (и уже отлаженного) кода, а с другой — при разрушении реестре, переустановки системы или подключении диска (массива дисков) к другой системе, их монтирование происходит автоматически.

Рисунок 1 в W2K+ информация о динамических дисках хранится на самих дисках в структурах PRIVHEAD и LDM

По маркетинговым соображениям мультдиски были переименованы в динамические диски (dynamic disk) и Microsoft развернула целую маркетинговую компанию по их продвижению на рынок. Причем, если при обновлении NT 4.0 до W2K, информация о существующих мультидисках нормально считывалась из реестра, то XP их в упор не видит, а потому попытка обновления NT 4.0, работающей с мультидисками,до XP или Server 2003/2008, ведет к необратимой потере данных, которые необходимо предварительно скопировать на другой носитель.

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

Динамические диски окружены огромным количеством сплетен, мифов и легенд, кочующих из одного издания в другое и приписывающих им чудодействующие возможностями, которыми не обладают и обладать не могут в принципе (cм. например: http://www.computerperformance.co.uk/Litmus/disk_dynamic.htm).

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

Заблуждение это происходит из-за неверной трактовки термина «free space», под которым технические писатели в Microsoft подразумевали «unallocated space», то есть свободное пространство, не принадлежащим никакому дисковому тому. Допустим, у нас есть два раздела, на которых свободно по 69 и 96 Гбайт соответственно. Можем ли мы увеличить размер первого раздела хотя бы на 10 Гбайт за счет второго? Ответ отрицательный! А вот если мы воткнем еще один винчестер, на котором нет никаких разделов (или же имеются неразмеченные разделы), то в этом (и только этом!) случае динамический диск, действительно, сможет увеличить свой размер, поглотив все неразмеченное пространство (или его часть).

В результате чего, один раздел (например, раздел F:) окажется расположен на двух (или более) физических дисках, но с точки зрения операционной системы будет трактоваться как _один_ том. Такая задача никакому PQMagic'у уже не по зубам, однако, следует помнить, что подобное увеличение размера динамического диска достается дорогой ценой. Во-первых, при отказе одного диска мы автоматически теряем второй (и все остальные), во-вторых, при попытке переноса динамического тома на другую машину нам придется тащить за собой сразу два (или более) дисков, что опять-таки не всегда приемлемо и в ряде случаев выгоднее использовать несколько стандартных томов, типа C:, D:, E,.. чем один динамический диск такого же размера, тем более, что NT позволяет монтировать раздел на любую пустую папку другого раздела, а при необходимости демонтировать его обратно.

Заблуждение второе — динамические диски поддерживают неограниченного количество томов на одном устройстве, а стандартные (они же базовые), всего 4е, поскольку, в таблице разделов имеется место только для 4х записей. Однако, еще со времен MS-DOS, таблица разделов поддерживает рекурсивные расширения, снимающие всякие ограничения на количество томов. В MS-DOS и 9x количество разделов не может превышать число возможных букв, но W2K и все последующие системы позволяют назначать дискам имена произвольной длины или монтировать их на папки соседних разделов, поэтому, при желании один диск можно разбить хоть на 666 томов. Вопрос — а зачем?!

Рисунок 2 пример обычного (базового) диска, разбитого на 8 разделов

Заблуждение третье — динамические диски работают быстрее/лучшее обычных. И с какой это такой радости?! Планировка запросов в динамических дисках выполнена просто ужасно и в случае если динамический диск занимает более одного физического, мы получаем конкретные тормоза. Если же динамический диск полностью умещается на одном физическом диске, то он работает абсолютно с той же скоростью, что и обычный.

простые (simple)практически ничем не отличаются от обычных, за исключением того, при переразбиении диска отпадает необходимость в перезагрузке. Simple-топа размещается на одном физическом диске и всегда непрерывны на всем своем протяжении. При увеличении размеров simple-томов за счет свободного пространства, находящихся на других дисках, они автоматически превращается в составные (spanned) разделы.

надежность:средняя

избыточность:отсутствует

производительность:средняя

составные (spanned)состоят из одного или нескольких simple-томов, находящихся на разных физических дисках, объединенных в единый логический том. Информация записывается последовательно, как в классическом линейном RAID-массиве.

надежность:низкая

избыточность:отсутствует

производительность:средняя

чередующиеся (stripped) внешне похожи на spanned, поскольку, как и последние, они объединяют несколько физических дисков в один логический том, но данные записываются вперемешку, т. е. первый сектор на первый жесткий диск, второй — на второй и т. д., в результате чего оба жестких диска работают параллельно и если они подключены к различным IDE-контроллерам, скорость обмена пропорционально возрастет, однако, если хотя бы один диск откажет, образуется «решето» из данных _совершенно_ непригодное для восстановления, в общем, все как в классическом RAID-массиве уровня 0.

надежность:очень низкая

избыточность:отсутствует

производительность:высокая

зеркальные (mirrored)два или более динамических диска, объединенных в один логический, причем запись дублируются на все диски (как в RAID уровня 1) и при выходе одного винчестера из строя, он может быть заменен без потери данных (а в случае поддержки hot-plug'а и без остановки сервера). Зеркалировать можно не только простые, но также составные и чередующие динамические диски. Платить за надежность приходится не только дисковым пространством, но и производительностью, поскольку, количество контроллеров не безгранично и зеркальные диски обычно приходится цеплять на уже задействованные контроллеры, к тому же, поиск секторов на современных винчестерах осуществляется методом «вилки» и занимает различное время, а, значит, при одновременном обмене с несколькими винчестерами, мы вынуждены дожидаться самого последнего из них, то есть паспортное время поиска из «среднего» приближается к «наихудшему».

надежность:очень высокая

избыточность:очень высокая

производительность:средняя или низкая

чередующиеся с контролем четности (stripped with party): соответствует массиву RAID уровня 5. Состоит из трех или более дисков (максимум — 32). Данные пишутся на все диски кроме последнего, где хранятся коды коррекции ошибок, с помощью которых можно восстановить любой другой отказавший диск. То есть, если мы имеем три диска, избыточность составит всего 30%, а в случае пяти дисков — 20%. Естественно RAID-5 оправдывает себя только на массивах, состоящих из большого количества дисков. Он не может динамически увеличивать свой размер за счет присоединения новых томов и к тому же поддерживается только серверными версиями Windows. Системные и загрузочный файлы не могут располагаться на RAID-5 дисках, то есть реально нам понадобиться как минимум четыре диска: один — системный, три – для RAID-5 массива.

надежность:очень высокая

избыточность:средняя или низкая

производительность:очень высокая

  1. Vista Home Base/Premium:
    1. не поддерживает динамических дисков вообще;
  2. W2K Home/Professional, XP Home/Professional/x86-64, Vista Business/Enterprise/Ultimate:
    1. поддерживает только простые, составные и чередующиеся динамические диски;
  3. Windows 2000 Server, Sever 2003, Server 2008:
    1. поддерживают все типы динамических дисков;
  4. динамические диски не поддерживаются на laptop'ах;

Рисунок 3 Windows 2000 Professional поддерживает только простые, составные и чередующие динамические диски

Ох уж эти американцы! Любят они выдумывать новые слова в ущерб уже существующим. Динамический диск представляет собой обыкновенный программный RAID, реализаций которых можно насчитать десятки. Microsoft продвигает не самое лучшее и к тому же далеко не бесплатное решение, обстреливая потребителей заумной терминологией и торговыми марками.

Представляет интерес сравнить достоинства и недостатки программных RAID-массивов с аппаратными.

  1. достоинства аппаратных RAID-массивов (по сравнению с программными):
    1. независимость от конкретной операционной системы (при условии, что она поддерживает данный RAID-контроллер);
    2. более высокая производительность и более умно выполненная система диагностики аварийный и предаварийных состояний;
    3. возможность замены диска без остановки системы;
  2. недостатки аппаратных RAID-массивов:
    1. если RAID-контроллер умрет или откажет материнская плата с интегрированным RAID-контроллером, то нам потребуется отыскать _точно_ такой же контроллер, иначе все данные превратятся в труху;
    2. контроллеры и интегрированные чипсеты зачастую содержат множество ошибок, но далеко не всякий контроллер позволяет обновлять свою прошивку (не говоря уже о том, что такая операция небезопасна и сопряжена с большим риском);
    3. низкая мобильность — при переносе массива дисков на другую машину, необходимо таскать контроллер (с драйверами), а в случае динамических дисков достаточно просто воткнуть их в W2K или другую NT-подобную систему;

Помимо этого, всем типам RAID-массивов присуща проблема восстановления данных. Большинство восстановительных утилит работают только с базовыми дисками, а восстановлением RAID'ов занимаются специалисты, располагающие не только глубокими техническими знаниями, но и соответствующим оборудованием.

Аппаратные RAID'ы оправдывают себя только в том случае, если нам требуется экстремальная производительность, или на одной машине используется несколько различных операционных систем, например, Server 2003/2008 и FreeBSD, которые, благодаря возможностям аппаратной виртуализации, могут работать _одновременно_ друг с другом безо всяких тормозных эмуляторов типа VM Ware.

В остальных случаях предпочтительнее использовать программные RAID'ы.

Первое. Преобразование базового диска в динамический — это _практически_ необратимая операция (исключение составляют Simple-разделы, которые можно превратить в обычные тома путем редактирования диска на сектором уровне см «высший пилотаж или делаем из динамического диска обычный», но составные, чередующие и уж тем более RAID-5 диски преобразовать обратно можно только путем копирования данных на внешний носитель, удаления динамических дисков с последующим созданием обычных разделов).

Второе. Преобразовав системный диск в динамический мы уже не сможем ни обновить, ни переустановить Windows, поскольку инсталлятор динамических дисков, увы, не понимает и навряд ли будет понимать в дальнейшем (Server 2008 beta 3 до сих пор не поддерживает такую операцию).

Третье. Linux и xBSD штатным образом не поддерживают динамических дисков и для работы с ними требуют установки программного обеспечения от сторонних производителей (например, «Paragon LDM/NTFS driver» – http://paragon-software.com/), но это еще полбеды. Некоторые типы динамических дисков поддерживаются только «продвинутыми» версиями Windows, и потому, обновляя Windows XP Home до Windows Vista Home Base/Premium, мы с удивлением обнаружим «пропажу» динамических дисков. А все потому, что Microsoft очень сильно хочет денег.

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

Пятое. Динамические диски имеют проблемы со службой кластеров (Cluster Service) и теневыми копиями (Shadow copy), и чтобы не накосячить требуется раскурить базу знаний (Knowledge Base), а, потом, извиняюсь за выражение, натянуть презерватив и потрахаться.

Шестое. «Серьезные» сервера традиционно оснащаются аппаратными RAID-контроллерами, а у «несерьезных» потребности в динамических дисках в общем-то не возникает и там они несут больше проблем чем решают.

Создавать динамические диски можно как средствами графической оболочки, так и из командной строки. В любом случае нам понадобиться 1 Мбайт свободного пространства в конце диска, где хранится LDM-база с информацией о конфигурации. Если же ее там нет, то… увы! Штатный дефрагментатор в общем случае дефраментирует файлы «на месте», минимизируя их перемещения и в таком случае, вооружившись дисковым редактором, можно попробовать определить, что за файлы находятся в последнем мегабайте и переместить их на другой раздел (однако, если это системные файлы или кусок реестра, то остается использовать только продвинутые дефрагментаторы от сторонних производителей, например O&O Disk Defrag).

В остальном же создание динамических дисков не представляет никаких проблем. Запускаем «Computer Management», входим в «Disk Management», щелкаем правой клавишей мыши по базовому диску, который мы хотим преобразовать в динамический и выбираем в контекстом меню пункт «Convert to Dynamic Disk» и ответив на ряд тупых запросов на подтверждение получаем Simple-том, щелкнув по которому, мы можем либо расширить его размер за счет _невыделенного_ свободного пространства других дисков («Extend Volume»), либо зазеркалить том («Add Mirror»), причем последний пункт работает только в серверных версиях и только если на зеркальном диске достаточно места (создать зеркало на том же самом физическом диске невозможно, да и ненужно).

Рисунок 4 обновление базового диска до динамического через графическую оболочку

Simple-том не может быть преобразован в RAID-5 и потому для создания RAID-5 нам нужно по меньшей мере три пустых динамических дисков на которых не создано никаких томов. Щелкам мышью по любому из них, говорим «New Volume», в появившемся диалоговом окне выбираем RAID-5 (работает только на серверных версиях Windows), отвечаем на пару несложных запросов (типа какие диски добавлять в массив, как его форматировать) и все!

Утилита командой строки DISKPART позволяет делать тоже самое, только без мыши. Просто набираем в консоли diskpart.exe, пишем «help» и курим, втыкая на экран. В частности, чтобы создать simple-том, находясь внутри diskpart.exe необходимо написать: «create volume simple [size=n] [disk=n]». Описывать остальные команды никакого смысла нет, так как они уже разжеваны в справке.

Рисунок 5 управление динамическими дисками из командой строки

Для удаленного управления динамическими дисками можно воспользоваться либо терминальной службой, запуская diskpart.exe, либо в «Computer Management» выбрать Action  Connect to another computer. При этом в качестве клиента может выступать любая ось из линейки NT, начиная от W2K и выше. Они преспокойно создают зеркальные и RAID-5 тома на сервере. А вот даже подключившись сервером к рабочей станции, создать на ней зеркальный том мы сможем, так же как и RAID-5.

Simple-том, полученный путем обновления базового диска до динамического, можно вернуть обратно, запустив редактор диска и поменяв тип раздела с 42h на 07h. После перезагрузки, Менеджер Диска потеряет динамический диск, отметив его красным крестиком, но это не страшно — и его можно смело удалить. А вот восстановленный базовый диск рекомендуется почекать утилитой chkdsk.

Рисунок 6 после ручного преобразования Simple-диска в базовый, система теряем динамический том (Missing Dynamic Offline), однако, это так и должно быть и его можно смело удалять

Подробнее об этом можно прочитать в статье «ConvertingDynamicDisksBacktoBasicDisks» (http://thelazyadmin.com/blogs/thelazyadmin/archive/2007/01/17/Converting-Dynamic-Disks-Back-to-Basic-Disks.aspx) однако, следует помнить, что во всех остальных случаях (включая расширение Simple-диска до Spanned/Stripped она уже не работает, приводя к серьезным разрушениям данных, восстановить которые по силам только профессионалам.