Представление диска

Одним из наиболее распространённых, но при этом непростых фундаментальных понятий в современных вычислениях является концепция представления диска, или, иными словами, чего-то, что выглядит как жёсткий диск. Это может звучать просто, и в целом так и есть, однако здесь есть свои тонкости.
Итак, что такое жёсткий диск? Казалось бы, всё просто. Обычно мы имеем в виду традиционное устройство на вращающихся пластинах типа Winchester, производившееся десятилетиями в стандартных форм-факторах 3,5 и 2,5 дюйма. Они содержат пластины, которые вращаются, головку считывания-записи, перемещающуюся вперёд и назад, и подключаются через разъёмы ATA или SCSI. Большинство из нас может взять жёсткий диск в руки и с уверенностью сказать, что это жёсткий диск. Это то, что мы называем физическим воплощением диска.
Однако компьютер видит происходящее совершенно иначе — он не воспринимает корпус диска или разъёмы. Компьютер смотрит сквозь свою электронику и «видит» диск цифровым образом. Это разительно отличается от того, как человек воспринимает физический диск. Для компьютера жёсткий диск проявляется как устройство ATA, SCSI или Fibre Channel на самом базовом физическом уровне и, как правило, абстрагируется на более высоком уровне как блочное устройство. Это то, что мы называем логическим представлением, а не физическим. В наших целях будем рассматривать все эти дисковые интерфейсы как блочные устройства. Между ними есть различия, но незначительные и не принципиальные для нашего обсуждения. Важно то, что существует стандартный интерфейс или набор близкородственных интерфейсов, воспринимаемых компьютером как жёсткий диск.
Ещё один способ осмыслить логическое представление диска: это всё, что выглядит для компьютера как жёсткий диск, то есть то, что компьютер может отформатировать под файловую систему. Файловые системы сами по себе не являются дисками, но требуют диска, на котором они размещаются.
Ключевым здесь является понятие интерфейса. Для компьютера «всё, что реализует интерфейс жёсткого диска», и есть настоящий жёсткий диск. Это одновременно простая и мощная концепция.
Именно благодаря использованию стандартного интерфейса стало возможным взять флэш-память, подключить её к дисковому контроллеру, который представляет её по стандартному протоколу (сегодня для этого распространены реализации SATA и SAS протоколов ATA и SCSI), и создать SSD-накопители, которые выглядят и ведут себя для компьютера точно так же, как традиционные Winchester-диски, хотя физически не имеют с ними ничего общего. Они могут иметь или не иметь знакомый физический форм-фактор, но у них определённо нет пластин и головки считывания-записи. Глядя на устройство традиционного жёсткого диска и современного SSD, мы бы не догадались, что у них одно назначение.
Эта концепция применима ко многим устройствам. Очевидно, что SD-карты и USB-флэшки работают по тому же принципу. Но что важно — именно так работают разделы поверх жёстких дисков. Система разбиения на разделы использует концепцию интерфейса представления диска с одной стороны, чтобы применяться к устройству, а с другой стороны представляет интерфейс представления диска всему, что хочет его использовать, — обычно файловой системе. Эта идея о чём-то, что использует интерфейс представления диска с обеих сторон, очень важна. Благодаря этому мы получаем унифицированный и универсальный строительный блок для создания сложных систем хранения!
Эту концепцию «диск на входе — диск на выходе» мы видим во многих случаях. Пожалуй, самый известный — это RAID. RAID-система берёт массив жёстких дисков, применяет один из ряда алгоритмов, заставляя диски работать как единое целое, а затем представляет их как единое представление диска следующей системе в «стеке». Именно эта инкапсуляция и даёт RAID его мощь: системы выше в стеке, смотрящие на RAID-массив, видят буквально один жёсткий диск. Они не видят массив дисков, они не знают, что находится ниже RAID. Они просто видят результирующий диск (или диски), которые представляет RAID-система.
Поскольку RAID-система принимает произвольное количество дисков и представляет их как стандартный диск, теоретически RAID можно выстраивать в столько уровней, сколько угодно. Конечно, на практике делать это в сколько-нибудь значительной мере крайне нецелесообразно. Но именно через эту концепцию становятся возможными вложенные RAID-массивы. Например, если у нас много физических жёстких дисков, разбитых на пары, и каждая пара объединена в массив RAID 1 — каждый результирующий массив представляется как один диск. Каждый из этих результирующих логических дисков можно объединить в другой RAID-массив, например RAID 0. Именно так строится RAID 10. Идя дальше, можно взять несколько массивов RAID 10, представить их все в ещё одну RAID-систему, которая объединит их в RAID 0, и получить RAID 100 — и так далее до бесконечности.
Аналогичным образом уровень логических томов использует ту же инкапсуляцию, что и RAID, для своей работы. Менеджеры логических томов, такие как LVM в Linux и Dynamic Disks в Windows, располагаются поверх логических дисков и предоставляют уровень, на котором можно выполнять мощные операции управления — например, гибко расширять устройства или включать снимки состояния — а затем представляют логические диски (то есть интерфейс представления диска) следующему уровню стека.
Благодаря единообразной природе представлений дисков стек может выстраиваться в любом порядке. Менеджер логических томов может располагаться поверх RAID, или RAID может располагаться поверх менеджера логических томов, и, разумеется, можно пропустить тот или иной уровень, или оба!
Концепция представлений дисков, или логических жёстких дисков, сильна своей простотой и открывает огромные возможности для настройки систем хранения под любые нужды.
Разумеется, существуют и другие применения концепции логического диска. Одно из наиболее популярных и наименее понятых — это SAN. SAN — не что иное, как устройство, которое берёт один или несколько физических дисков и представляет их как логические диски (это представление логического диска из SAN называется LUN) по сети. Буквально — это всё, чем является SAN. Большинство SAN-систем включают уровень RAID и, вероятно, уровень менеджера логических томов перед предоставлением финальных LUN-ов, или представлений дисков, в сеть, однако это не обязательно для того, чтобы устройство являлось SAN.
Это означает, конечно, что несколько LUN-ов SAN можно объединить в единый RAID или управлять ими через уровень логических томов. И, разумеется, это означает, что LUN SAN, физический жёсткий диск, RAID-массив, логический том, раздел... — все они могут быть отформатированы под файловую систему, поскольку все они представляют собой разные способы достижения одного и того же результата. Все они ведут себя одинаково. Все они используют интерфейс представления диска.
Чтобы привести реальный пример того, как все эти компоненты часто объединяются вместе, рассмотрим один из наиболее распространённых «стеков хранилища», встречающихся в корпоративном секторе. Разумеется, существует множество способов построить стек хранилища, так что не удивляйтесь, если ваш отличается. В основе стека практически всегда находятся физические жёсткие диски, которые могут включать твердотельные накопители. Они физически расположены внутри SAN. Перед выходом из SAN стек, как правило, включает фактический уровень хранения дисков, затем уровень RAID, объединяющий эти диски в единое целое. Затем — уровень логических томов для обеспечения таких функций, как расширение и снимки состояния. Затем следует физическая демаркационная точка между SAN и сервером, которая представляется как LUN. К LUN затем применяется менеджер логических томов на стороне сервера/операционной системы. А поверх этого LUN располагается файловая система — наш финальный шаг, поскольку файловая система уже не представляет интерфейс представления диска, а предоставляет файловый интерфейс.
Понимание концепции представления диска, или логических дисков, и того, как они позволяют компонентам взаимодействовать между собой для построения сложных подсистем хранения, является критически важным строительным блоком IT-знаний и широко применимо в огромном числе IT-задач.
