Ну... это блог, что ещё ожидать от блога?

пятница, 4 июня 2010 г.

Файловая система Ext4 для Linux: часть 1



Так как меня заинтриговал вопрос о том что же из себя представляют жёсткие диски, то я решил что постараюсь разобраться в этом вопросе и попутно, составить что-то вроде конспекта своих изысканий на эту тему. В основном пришлось читать статьи Википедии на русском и английском языках, и что-то из того что там расписано в подробностях я записал в этой заметке. Вообще же, это вводная часть для последующих заметок на тему использования файловой системы Ext4fs надеюсь будут сформированы, и поэтому то эта заметка называется «Файловая система Ext4 для Linux: часть 1» а не как то иначе. Если кому то это всё не безынтересно, и вы при этом слабо представляете о чём вообще речь, то вам будет полезно прочитать эту первую часть, так как например терминология довольно запутана и без чёткого понимания того что за всем этим лежит т. е. технических обобщённых подробностей, разобраться в вопросах связанных с дискам и ФС довольно проблематично.

Что такое жёсткий диск

Диск состоит из вращающихся круглых пластин выполненных из того или иного материала. На поверхности этих пластин нанесено ферромагнитное покрытие способное намагничиваться и таким образом нести на себе информацию.

Жесткие диски записывают данные путём намагничивания ферромагнитного материала для представления либо 0 или 1 двоичного состояния. Типичный дизайн HDD состоит из шпинделя, который содержит один или несколько плоских круглых дисков называемых «пластина», на которой данные и записываются. Пластины изготовлены из немагнитных материалов, как правило, из алюминиевого сплава или стекла, и покрыты тонким слоем магнитного материала, как правило, 10-20 нм толщины, - для справки толщина обычного листа бумаги 0.07-0.18 мм (70 000 - 180000 нм), - с наружным слоем углерода для защиты. Старые модели дисков, использовали оксид железа(III), как магнитный материал, но в настоящее время используются диски на основе сплавов кобальта.

Головки чтения-записи

Пластины вращаются на очень больших скоростях. Информация записывается на пластине, тогда как она вращается проходя под устройствами называемыми «головки чтения-записи», которые действуют в непосредственной близости (несколько десятков нанометров в новых устройствах) над магнитной поверхностью. Головка чтения-записи используется для обнаружения и изменения намагниченности материала непосредственно под ней. Естественно, что пластины имеют 2 стороны, и следовательно, 2 поверхности на которых данные могут быть записаны, обычно есть 2 головки на пластину - одна на каждой стороне, но это не всегда так. (Иногда термин «поверхность» подменяет «головку»).

Дорожки

Дорожки это узкие концентрические круговые полосы на магнитной поверхности расположенной на пластине, которые фактически на самом деле содержат области с записанными магнитными данными, записанными на диске. Они образуют круг и поэтому они двумерны. По крайней мере, одна головка необходима для чтения одной дорожки. Вся информация хранимая на жестком диске запи
сывается на дорожки, а если более точно — в секторы на которые они поделены. Зачастую термины «дорожка» и «цилиндр» используются как эквивалентные.

Цилиндры

Цилиндр образуется из каждой дорожки под определённым порядковым номером на пластине, но не на одной пластине, а на всех из имеющихся пластин, он охватывает все эти дорожки по всей поверхнос
ти каждой из имеющихся пластин способных хранить данные. Таким образом, это 3 .х мерный объект. Любая дорожка, состоящая в одном цилиндре может быть записана или прочитана, тогда как при этом актуатор с расположенными на нём головками чтения-записи, остается неподвижным во время операции чтения. Один из способов которым изготовителям дисков удалось увеличить скорость чтения с устройства, является увеличение количества пластин которые можно читать в данный момент времени. Таким образом цилиндр это логическая структура образованная пластинами и дорожками на них. Зачастую термины «цилиндр» и «дорожка» используются как эквивалентные.

Секторы

Дорожки подразделяются на несколько разделов. Каждый раздел называется сектором. В старых устройствах, сектора это наименьшие единицы хранения данных на жестком диске. Обычно сектор будет занимать 512 байт информации. Некоторые производители жестких дисков и программного обеспечения, разработчики пытаются изменить объем данных, хранимых в секторах до 4096 байт, т. е. довести физический размер сектора до значения в 4096 байт которое ныне обычно используется для указания размера блока при форматировании диска в файловую систему вроде ext4. Также, планируется что начиная с января 2011 года, производители устройств хранения, будут использовать 4096 байтный сектор, в качестве нового стандарта на размер сектора. [1] Следует различать понятия просто сектора (образованного геометрическим сектором) и сектора дорожки, так как эти два понятия могут заменять друг друга лишь при применении относительно к старым устройствам (MFM и RLL) у которых сектора с меньшими поверхностями, расположенные ближе к шпинделю, содержали такое же количество информации как и сектора расположенные ближе к краям пластин, и были равнозначными в этом отношении. В отношении устройств (ATA/PATA) и более современных (SATA) это не так, в них каждый сектор дорожки, очерченный геометрическим сектором, расположенный ближе к краю пластины, может содержать большее количество записываемых секторов чем те что расположены ближе к шпинделю. Это значит что в отношении новых устройств речь уже идёт о количестве физических блоков на дорожку или сектор дорожки, нежели о количестве секторов на дорожку. (рис., А — дорожка, В — геометрический сектор, С — сектор дорожки, D — кластер).

Блоки

Ранее в различных областях информатики, термин «блок» использовался для обозначения наименьшей порции хранимых данных, но термин «сектор», как представляется, стал более распространенным. Одна весьма вероятная причина для этого, это факт того что термин «блок» неоднократно применялся к кускам данным разных размеров и в отношении различных типов потоков данных, а не ограничивался наименьшим доступным объемом данных на устройствах хранения. Например, программа dd для Unix позволяет установить размер блока, который будут использоваться во время выполнения операций, с помощью параметра bs=байт. Но это не меняет фактический размер физического сектора носителя, только размер блоков, которыми dd будет манипулировать. А в мире UNIX/Linux, термин «блок» используют для обозначения сектора или группы секторов. Например, утилита fdisk для Linux обычно отображает таблицу разделов диска с использованием 512-байтных блоков, и при этом также используется термин «сектор», чтобы помочь описать размер диска фразой - 63 секторов на дорожку. То есть «блок» и «сектор» в технической литературе могут подменять друг друга. Но «блок» в отношении ФС, это может быть группа секторов, например 4096 байтный блок может состоять из 512 байтных секторов. Очевидно что термин сектор для определения наименьшей единицы хранения данных целесообразнее заменить на термин физический или дисковый блок наряду с использованием термина - логический блок для определения физических блоков связанных вместе с помощью внутренних отношений в файловой системе. То есть блок - это наименьшая величина хранимых данных по отношению к дискам и также по отношении к файловым системам в логику которых диски облечены.

Адресация Цилиндр-Головка-Сектор (CHS) и Логическая Адресация Блоков (LBA)

CHS (Cylinder-Head-Sector) это способ адресации к данным, который был реализован для старых дисковых устройствах хранения данных. Сейчас преимущественно не используется. Для доступа к сектору при CHS адресации использовались три значения в виде кортежа — (цилиндр/дорожка, поверхность/головка, сектор). Управлением получением доступа к данным осуществлялось на стороне операционной системы или непосредственно в прикладной программе. При CHS адресации наибольший возможный размер дискового устройства ограничен величиной около 8 400 000 000 байт (8.4 GB), так как 16-байтная запись в таблице разделов в MBR или EBR может содержать CHS-кортеж который ограничен только до значений (1023, 254, 63), что даёт всего 1024 возможных дорожек/цилиндров, 255 головок и 63 секторов на дорожку (значения для цилиндров и головок отсчитываются от 0, а значения секторов от 1), что в итоге и ограничивает вместительность устройства высчитываемой по формуле:


((1024 * 63) * 255) * 512 = 8 422 686 720 байт (около 8.4 GB)


Для примера более не используемые гибкие диски формата 3.5 дюйма (1.44 MB floppy disk) содержали 80 цилиндров (отсчёт от 0 до 79), 2 головки (отсчёт от 0 до 1) и 18 секторов (отсчёт от 1 до 18). И поэтому, их емкость в секторах вычисляется так: всего секторов = (80 * 18) * 2 = 2880, а ёмкость в байтах при при 512 байтном секторе: ((80 * 18) * 2) * 512 = 1 474 560 байт.

LBA (Logical block addressing) является простой линейной схемой адресации. Это адресация используемая в современных дисковых устройствах. Термин LBA может означать или адрес блока или сам блок на который этот адрес ссылается. При такой схеме адресации, адреса физических блоков располагаются в индексе начиная с первого блока LBA = 0, второго LBA = 1, и так далее. Схема LBA заменила собой ранние схемы адресации, которые возлагали детали адресации устройства хранения на программное обеспечение операционной системы. Основной среди них была схема CHS, однако же CHS не подходила устройствам отличным от жестких дисков (например ленты и сетевые системы хранения) и, как правило, не использовалась на них.

Протокол же SCSI, частично реализованный в ATA устройствах, представлял LBA как абстракцию. Первое формальное определение стандарта ATA интерфейса позволяло 28 битную адресацию блоков, используя для этого LBA или CHS. Стандарт АТА-1 при LBA адресации использовавшей 28 бит ограничивал ёмкость дисков до 128 Гибибайт, предполагая сектор размером 512 байт. В 2002 году стандарт ATA-6 представил LBA адресацию использовавшей 48 бит, расширяя возможный размер дисков до 128 Пебибайт, предполагая сектор размером 512 байт.

Потом был переход рынка от ATAPI к SATA устройствам, и последние полностью вытеснили с рынка своих предтечей, и действующая спецификация на них это SATA Revision 3.0 (SATA 6 Gb/s) от 27 мая 2009 года. В отличии от старых устройств, современные стали более интеллектуальны и совершеннее в используемых технологиях хранения данных и коррекции ошибок. Это достигается за счёт их внутренних электронно-программных компонентов, которые и обеспечивают работу устройства скрывая реализацию от ОС и программ. Обычно такие компоненты устройства это: контроллер работающий с системой во вне и включающий в себя: канал чтения/записи, контроллер диска и контрольный процессор RISC (микроконтроллер); схема Flash ROM содержащая программы устройства; схема контроля мотора шпинделя и актуатора; микросхема ROM в качестве кеш буфера.

Современные устройства сами производят коррекцию ошибок с помощью ECC, отслеживают разрушенные блоки производя переназначения их адресов на блоки из специального резерва (только при не успешной записи), также поддерживают технологию S.M.A.R.T которая позволяет отслеживать эти и другие параметры устройства отвечающие за его исправность.

P. S. О хронологических этапах дискостроения можно прочитать в статье, на английском языке, «Timeline: 50 Years of Hard Drives»

Комментариев нет:

Отправить комментарий