Архитектура и проектирование стека хранения Linux
Copyright © 2023 Packt Publishing
![]() |
Данный документ предоставляется по лицензии Creative Commons Attribution 4.0 License, за исключением разделов со специальными оговорками. |
Первая публикация на английском языке: Июль 2023
Ссылка на продукт: 280623
Все права защищены. Никакая часть этой книги не может быть воспроизведена, сохранена в поисковой системе или передана в любой форме или любыми средствами без предварительного письменного разрешения издателя, за исключением случаев кратких цитат, встроенных в критические статьи и обзоры.
При подготовке этой книги были предприняты все усилия чтобы гарантировать точность представленной информации. Тем не менее, информация, содержащаяся в этой книге, продаётся без гарантии в явном или неявном виде. Ни авторы, ни Packt Publishing, ни их дилеры и дистрибьюторы не будут нести ответственность за любые убытки, вызванные или предположительно вызванные прямо или косвенно этой книгой.
Packt Publishing пыталась предоставить информацию о товарных знаках обо всех компаниях и продуктов, упомянутых в данной книге для надлежащего использования капиталов. Тем не менее, Packt Publishing не может гарантировать точность этой информации.
Опубликовано Packt Publishing Ltd.
Livery Place
35 Livery Street
Birmingham B3 2PB, UK
ISBN 978-1-83763-996-0
2023-09-03
- Автор
- Мухаммад Умэр
- Управляющий группой продуктов
- Паван Рамчандани
- Управляющий издания продукта
- Прачи Савант
- Старший редактор
- Рансил Ребелло
- Технический редактор
- Арджун Варма
- Литературный редактор
- Safis Editing
- Координатор проекта
- Ашвин Харва
- Корректор
- Safis Editing
- Составитель указателя
- Пратик Широдкар
- Технолог
- Элишон Мендонка
- Координатор маркетинга
- Мэрилу Де Мелло
Амми, Абу, Хаммаду, Шарджилю и Амне, которые пережили трудные времена из-за меня и научили меня значению жертвенности, терпения, упорного труда и настойчивости. Вы всегда были рядом со мной в достойные дни, а были ещё ближе в мои дурные дни.
Мои рецензенты - Боудьяян Чакрабарти (Боб), Сэм Ю и Анкит Рай — помогли мне глубже погрузиться в технические аспекты функций QRadar. Отдельное спасибо Бобу, который прошёл через все трудности в этом путешествии.
А также Ахаду, который в нашу жизнь привносит радость и нечто удивительное.
Эту книгу со всей своей любовью я посвящаю все вам.
Я твёрдо верю в силу обнародования. Данная книга это олицетворение максимума моих усилий, направленных на то, чтобы приняться за сложные темы, упростить их и представить наиболее широкой аудитории.
Мухаммад Умэр является системным инженером и инструктором с более чем шестилетним опытом работы с системами на базе Linux, проектированием и архитектурой высокой доступности (HA, high availability), настройкой операционных систем и лежащего в их основе оборудования для оптимальной производительности и анализа причин неработоспособности. Ему доставляет удовольствие быть в курсе последних событий из мира технологий и он является RHCA (Red Hat Certified Architect, сертифицированным архитектором Red Hat). Умэр - заядлый энтузиаст Linux, особое внимание уделяющий технологиям хранения данных. Именно эта страсть побудила его написать книгу на данную тему, опираясь на свой обширный опыт в данной области.
Я хочу выразить признательность тем людям, с которыми я работал на протяжении многих лет. Каждый из них так или иначе научил чему- то меня. Также я благодарен замечательной команде Packt за их поддержку на протяжении всего этого пути.
Прадип Рой Кандру это программист ядра Linux и он обладает большим опытом работы на различных уровнях Ядра. Работая как на технических должностях, так и на должностях разработчиков, его опорой была широкая база навыков и способность работы с разнообразными проектами. В академическом плане он занял 43-е место во Всеиндийском тесте на инженерные способности и обладает степенью магистра в области интернет- технологий, полученную на Факультете вычислительных наук Индийского института науки (IISc, Indian Institute of Science), Бангалор, Индия. Помимо рецензирования прочих технических книг, в качестве автора он работает над собственной будущей технической книгой. Он работал в компаниях IBM, India Software Labs, Veritas и Depik Technologies. Его текущий интерес включает обзоры eBPF.
- Введение
- Часть 1. Окунаемся в Виртуальную файловую систему
- Глава 1. Откуда всё начинается - Виртуальная файловая система
- Глава 2. Поясняем структуры данных VFS
- Глава 3. Изучаем реальные файловые системы под VFS
- Технические требования
- Галерея файловых систем Linux
- Дневник файловой системы- понятие ведения журнала
- Занятный вариант файловых систем CoW
- Расширенная файловая система
- Сетевая файловая система
- FUSE - уникальный метод создания файловых систем
- Выводы
- Часть 2. Навигация по блочному уровню
- Глава 4. Разбираемся с Блочным уровнем, Блочными устройствами и Структурами данных
- Технические требования
- Раскрываем роль блочного уровня
- Определение блочных устройств
- Определение характеристик блочных устройств
- Взглянем на представление блочных устройств
- Взглянем на структуры данных блочного уровня
- Функция register_blkdev (регистрация блочного устройства)
- Структура block_device (представление блочных устройств)
- Структура gendisk (представление физических дисков)
- Структура buffer_head (представление блоков в памяти)
- Структура bio (представление активного ввода/ вывода блоков)
- Структура bio_vec (представление вектора ввода/ вывода)
- Запросы и очереди запросов (представление отложенных запросов ввода/ вывода)
- Путешествие запроса ввода/ вывода по блочному уровню
- Выводы
- Глава 5. Разбираемся с Блочным уровнем, Множественной очередью и Сопоставлением устройств
- Глава 6. Разбираемся с обработкой ввода/ вывода и планированием на блочном уровне
- Часть 3. Спускаемся на Физический уровень
- Часть 4. Анализ производительности хранилища и устранение неисправностей
- Глава 9. Анализ производительности физического хранилища
- Глава 10. Анализ файловых систем и блочного уровня
- Глава 11. Тонкая настройка стека ввода/ вывода
- Указатель
Основное преимущество операционных систем с открытым исходным кодом, таких как Linux, состоит в том, что кто угодно способен погрузиться и сорвать покровы с того, как они устроены под капотом. Даже несмотря на астрономические достижения в разработке программного обеспечения ядро Linux остаётся одним из самых сложных фрагментов кода. Разработчики, программисты и потенциальные хакеры ядра постоянно погружаются в код ядра и предпринимают попытки новых функциональных возможностей. Любители и энтузиасты вроде меня пытаются разобраться и разгадать тайны.
В качестве такого энтузиаста я потратил немало времени на изучение тонкостей стека хранения Linux. От простых жёстких дисков до сложных сетевых систем хранения данных, Linux лежит в основе многих сложнейших в мире технологий хранения данных. За последние несколько лет мне довелось поработать над Linux и рядом технологий хранения данных, что пробудило во мне интерес к данной области. Эта книга является результатом такого исследования. Я попробовал разделить все уровни стека хранения Linux дабы как все они работают в унисон. Моя цель состоит в том, чтобы поделиться тем что я узнал с теми, кто разделяет моё увлечение этим вопросом.
Данная книга являет собой глубокий и концептуальный обзор стека хранения данных Linux. Она охватывает все основные составляющие стека и включает углублённый и подробный анализ собственно подсистемы хранения и её архитектуры, слоя виртуальной файловой системы, разнообразных файловых систем и отличий в их реализации, блочного уровня, множественности очередей и инфраструктур {подсистемы ядра} Соответствия устройств (device mapper), планирования и физических уровней. В ней также рассматриваются различные вопросы, относящиеся к анализу производительности, тонкой настройке и устранению неполадок.
Я уверен что всякий желающий расширить своё понимание Linux и его среды хранения найдёт информативной и полезной данную книгу.
Основная целевая аудитория данной книги это администраторы, инженеры систем и хранилищ Linux, профессионалы Linux, сообщество Linux в целом и все, кто желает расширить своё понимание Linux. При работе в любой среде крайне важно обладать глубоким пониманием той технологии, с которой вы работаете. Я полагаю, что данная книга снабдит вас лучшим пониманием внутреннего устройства Linux, предоставит необходимые знания и повысит ваш общий интерес к данной теме.
Глава 1. Откуда всё начинается - Виртуальная файловая система предоставляет некое введение в VFS (virtual filesystem, виртуальную файловую систему) ядра Linux. Данная глава пояснит ключевую роль VFS в общем стеке ввода/ вывода и даёт чёткое концептуальное понимание VFS, ибо именно она выступает отправной точкой запроса на ввод, вывод в Linux.
Глава 2. Поясняем структуры данных VFS знакомит с различными применяемыми в VFS в ядре структурами данных. Будут пояснено применение таких структур ядра, как индексные дескрипторы (inode), записи каталогов и файловые объекты для хранения метаданных файлов, каталогов и открытых файлов. Кроме того, также будет рассмотрен метод, при помощи которого структура суперблока позволяет ядру записывать характеристики файловой системы. Наконец, будет разъяснён механизм кэширования страниц в ядре.
Глава 3. Изучаем реальные файловые системы под VFS вводит понятие файловой системы в Linux. Будет объяснена одна из наиболее популярных файловых систем на основе блоков в Linux, расширенная файловая система. Кроме того, подробно будут обсуждаться важные понятия файловой системы, такие как ведение журналов и копирование- записью. Данная глава также окунётся в имеющиеся отличия между файловым и блочным вводом/ выводом и изучит сетевую файловую систему. Наконец, будет введено понятие файловых систем пространства пользователя.
Глава 4. Разбираемся с Блочным уровнем, Блочными устройствами и Структурами данных представляет введение в блочный уровень ядра. Данная глава поясняет собственно понятие блочных устройств и того в чём они отличаются от символьных устройств, а также охватывает самые основные структуры данных на таком блочном уровне.
Глава 5. Разбираемся с Блочным уровнем, Множественной очередью и Сопоставлением устройств вводит инфраструктуру Соответствия устройств (device mapper, dm) и механизм очередей блочного ввода/ вывода со множеством очередей в современных устройствах хранения. Далее поясняется собственно роль подсистемы Соответствия устройств при создании основы таких функциональных возможностей как LVM.
Глава 6. Разбираемся с обработкой ввода/ вывода и планированием на блочном уровне обсуждает различные механизмы обработки ввода/ вывода и планировщики ввода/ вывода в самом ядре. В плане того как они обрабатываются на блочном уровне, обсуждаются такие операции как слияние, сращивание и подключение. Также подробно поясняются поддерживаемые в ядре Linux различные планировщики ввода/ вывода, причём совместно с отличиями в их логике работы.
Глава 7. Подсистема SCSI сосредоточена на подсистеме SCSI в Linux и её многоуровневой архитектуре. Данная глава даст разъяснения многоуровневой архитектуры SCSI, механизма адресации устройств SCSI и основных структур данных на самом уровне SCSI.
Глава 8. Иллюстрация структуры физического носителя поясняет отличия в доступных в наши дни различных носителях хранения. Сопоставляются традиционные механические приводы, твердотельные устройства и новый интерфейс NVMe.
Глава 9. Анализ производительности физического хранилища охватывает анализ производительности и характеристики подсистемы хранения. Эта глава представляет различные метрики, которые могут применяться для доступа к значению производительности физического хранилища. Далее обсуждаются различные инструменты и механизмы, которые могут применяться для замеров производительности хранилища.
Глава 10. Анализ файловых систем и блочного уровня сосредотачивается на тех методиках, которые могут применяться для анализа значения производительности блочного уровня и файловых систем. Данная глава объяснит различные типы ввода/ вывода файловой системы, а также те стороны, которые оказывают воздействие на запрос ввода/ вывода некого приложения. Затем для выявления потенциальных узких мест на каждом из уровней рассматриваются разнообразные инструменты и механизмы отслеживания, например, коллекция компилятора Berkeley Packet Filter.
Глава 11. Тонкая настройка стека ввода/ вывода обсуждает некоторые рекомендуемые практические приёмы для настройки под потребности приложения лежащий в основе уровень хранения. Обсуждаются различные варианты, которые могут применяться для настройки производительности на каждом из имеющихся уровней.
Основная цель данной книги состоит в том, чтобы разобраться с внутренним устройством работы ядра Linux и его основных подсистем. Следовательно, для получения максимальной выгоды от этой книги вам следует хорошо разбираться с понятием операционных систем в целом и Linux в особенности. Прежде всего, важно подходить к этим вопросам с терпением, любопытством и желанием обучения.
Обсуждаемые в данной книге программные/ аппаратные средства | Требования операционной системы |
---|---|
|
Linux |
Необходимые команды по установке конкретных пакетов включены в раздел технических требований каждой из глав.
В богатстве каталога книг и видео, у нас имеются пакеты кода, доступные здесь. Сверяйтесь с ними!
Дополнительно мы предоставляем файл PDF, который снабжён цветными изображениями применяемых в данной книге снимков экранов/ схем. Вы можете выгрузит его здесь.
Существует ряд текстовых соглашений, применяемых в этой книге.
CodeInText
: Кодовые слова в тексте, имена таблиц базы данных, имена папок, имена файлов, расширения файлов,
имена путей, модели URL-адресов, ввод пользователя, и регулировки Twitter обозначены таким текстом. Например: "Когда мы смотрим на устройства
sd*
в /dev
, обратите внимание, что для блочных устройств значение типа файла
отображается как b
".
Блок кода устанавливается следующим образом:
struct block_device {
sector_t bd_start_sect;
sector_t bd_nr_sectors;
struct disk_stats __percpu *bd_stats;
unsigned long bd_stamp;
bool bd_read_only;
dev_t bd_dev;
atomic_t bd_openers;
struct inode * bd_inode;
[……..]
Когда мы желаем обратить ваше внимание на определённую часть блока кода, соответствующие строка или элементы устанавливаются жирными:
struct block_device {
sector_t bd_start_sect;
sector_t bd_nr_sectors;
struct disk_stats __percpu *bd_stats;
unsigned long bd_stamp;
bool bd_read_only;
dev_t bd_dev;
atomic_t bd_openers;
struct inode * bd_inode;
[……..]
Весь ввод в командной строке записываются следующим образом:
[root@linuxbox ~]# find / -inum 67118958 -exec ls -l {} \;
-rw-r--r-- 1 root root 220 Jun 15 22:30 /etc/hosts
[root@linuxbox ~]#
Новые термины и важные слова отображаются жирным шрифтом. Слова, которые вы видите на экране, например, в меню или блоках диалогов появляются в тексте следующим образом: "В случае каталога значение поля type в inode устанавливается как directory".
![]() | Замечание |
---|---|
Предостережения или важные замечания появляются в блоках подобных этому. |
![]() | Совет |
---|---|
Советы и ловкие приёмы возникают таким образом. |
Мы всегда приветствуем обратную связь с читателями.
Общие замечания: просто пошлите электронное письмо на адрес feedback@packtpub.com с упоминанием заголовка книги в теме вашего сообщения. Если у вас имеются вопросы относительно любых сторон данной книги, пожалуйста, пошлите электронное письмо на адрес questions@packtpub.com.
Хотя мы и предприняли все меры чтобы обеспечить точность нашего содержимого, ошибки всё- таки возможны.Если вы обнаружили ошибку в нашей книге, мы будем признательны если вы сообщите об этом нам. Пожалуйста посетите www.packtpub.com/submit-errata, кликните по ссылке Submit Errata, и заполните полученную форму.
Пиратство: Если вы столкнётесь с какой-либо незаконной копией наших работ в любой форме в Интернете, пожалуйста, предоставьте нам сразу адрес местонахождения или имя веб-сайта, чтобы мы могли принять меры. Пожалуйста, обратитесь по адресу copyright@packtpub.com со ссылкой на такие материалы. {Прим. пер.: Согласно закону об авторском праве РФ, авторские права на перевод принадлежат авторам этого перевода. Данным переводом, по нашему мнению, мы служим популяризации основных стратегических направлений развития тем Packt. В случае наличия конструктивных предложений, готовы к тесному сотрудничеству.}
Когда вы заинтересованы в том чтобы стать автором: Если имеется некая тема, в которой вы обладаете опытом и вы заинтересованы либо в написании или содействии в книге, посетите, пожалуйста: http://authors.packtpub.com.
Когда вы прочтёте Architecture and Design of Linux Storage Stack, мы будем рады узнать ваше мнение! Кликните здесь чтобы сразу перейти на страницу обзора данной книги в Amazon и поделиться своим мнением.
Ваш отзыв важен для нас и всего технического сообщества и поможет нам убедиться, что мы предоставляем содержимое отличного качества.
Благодарим Вас за покупку этой книги!
Вы бы хотели читать её на ходу, однако вам невозможно носить везде свои печатные книги?
Что если ваша покупка eBook не совместима с используемым вами устройством?
Не беспокойтесь, теперь совместно с каждой книгой Packt вы бесплатно получаете PDF- версию этой книги без DRM.
Читайте где угодно, в любом месте, на любом устройстве. Находите, копируйте и вставляйте код из ваших любимых технических книг прямо в своё приложение.
На этом не заканчиваются все привилегии, вы можете ежедневно получать доступ к скидкам, информационным бюллетеням и отличному бесплатному содержанию в своём почтовом ящике.
Для получения таких преимуществ следуйте этим простым шагам:
-
Отсканируйте этот QR код или посетите эту ссылку
-
Предоставьте доказательство вашей покупки
-
Это всё! Мы отправим вам бесплатный PDF и прочие преимущества непосредственно в письме вам.