forked from mizabrik/acos-notes
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathblock.tex
More file actions
118 lines (97 loc) · 9.58 KB
/
block.tex
File metadata and controls
118 lines (97 loc) · 9.58 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
\documentclass[main]{subfiles}
\begin{document}
\chapter{Блочные устройства}
Блочные устройства --- это устройства, данные с которых получаются
фиксированными объёмами. К ним относятся HDD, SSD, CD-ROM, DVD-ROM,Blu-ray,
NVRAM (энергонезависимая память) и т. д.
Блочные устройства хороши тем, что на них можно завести файловую систему.
Там есть свои отдельные блоки с определённой геометрией (блок на HDD задаётся
цилиндром, сектором и поверхностью).
Однако, на блочных устройствах появляется проблема износа ячеек и скорости
доступа. Обе проблемы можно уменьшить представляя множество устройств как
одно, добавляя избыточность и параллелизм (RAID или LVM). Скорость можно
увеличить с помощью кэширования.
\section{RAID}
Redundant Array of Independent Discs --- механизм, который позволяет
использовать множество дисков, как один. Есть много вариантов организации:
\begin{description}
\item[RAID 0 (striping)] Данные записываются разными кусками на все диски
параллельно, что повышает скорость, но если один диск выйдет из строя ---
каждый третий блок будет потерян.
\item[RAID 1 (mirroring)] Одни и те же данные записываются на каждый диск.
Это даёт большую надёжность (ведь информация сохраняется в полном объёме,
пока хоть один диск исправен), но и полную избыточность данных.
Скорость записи сохраняется как для одного диска, но скорость чтения
может повыситься.
\item[RAID 2] Диски делятся на две группы: одни для данных, а другие ---
для коррекции ошибок по кодам Хемминга. Очень дорог, а потому практически
не используется.
\item[RAID 3] Из $n$ дисков $n - 1$ представляют RAID 0, а один диск
содержит XOR всех остальных дисков. Это даёт скорость сравнимую с RAID 0
и позовляет сохранить данные при одного диска. Однако, нагрузка на
контрольный диск сильно возрастает и он становится узким местом.
\item[RAID 5] Похож на RAID 3, но каждый диск содержит контрольную сумму
определённых секторов, что равномерно разносит нагрузку контрольного диска.
\end{description}
RAID может быть организован программно или аппаратно. Аппаратная реализация
отличается скоростью, но влечёт проблемы при поломке железа.
\section{LVM}
LVM позволяет объединять несколько блочных устройств в одно, но сохраняет
возможность их свободного добавления и удаления. Все данные, в отличии
от RAIDа, представлены последовательно.
Ключевое понятие --- logical volume, которые могут входить в volume group.
VG коллекционирует конкретные физические устройства, а logical volume
задаёт отображение на реальные устройства (кажется, лектор меня обманывает).
\chapter{Загрузка ОС}
Первый этап --- PXE загрузчик. Его код размещается в оперативной памяти.
Второе --- syslinux (специфичен для Linux), загружается через
PXE и просто загружает что-то с какого-то блочного устройства.
Третье --- блочное устройство типа HDD. Содержит загрузчик в определённом
месте, в зависимости от талблицы разделов.
\section{Таблица разделов на жёстком диске}
Раздел --- это виртуальная сущность. Изначально жёсткий диск не разделён
ни на какие разделы, а вот ОС удобно интерпретировать разные части диска как
разделы. Раздел нужен из тех соображений, что на одном диске можно создать
несколько файловых систем. Также, можно изолировать несколько систем на одном
ПК, установив их на разные разделы.
Таблиц разделов много, мы будем использовать разделы, используемые в Intel-архитектуре.
Тут важна не архитектура процессора, а BIOS, который работает с очень ограниченным
набором разделов. Сейчас используетются две таблицы:
MBR (master boot record) и более современная GPT.
\subsection{MBR}
LBA --- линейный способ именования блоков на диске,
вне зависимости от цилиндров и поверхностей. MBR использует более старый
вариант, где указываются 3 числа: номер цилиндра, поверхности и сектора.
MBR находится в первых 512 байтах по адресу 0, 0, 0. Там находится первичный
загрузчик и сама таблица разделов, которая вмещает не более четырёх записей.
Каждый раздел имеет некий тип (их довольно много), загрузочная метка, которая
помечает раздел, содержащий ос (предполагается, что она одна).
Существуют также extended partition, который содержит собственную таблицу
разделов (их уже называют логическими), что снимает ограничение на их число.
"В лоб" можно установить только 4 ОС, но это можно обойти, оставив загрузчики
всех ОС на отдельных разделах.
Для работы с разделами в UNIX существует довольно много утилит:
fdisk, cfdisk, sfdisk, которые изменяют MBR. Но, иногда бывает, что
в MBR лежат некоторые данные, мешающие их работе. Тогда таблицу
разделов следует затереть с помощью dd if=/dev/zero of =/dev/sdX
\subsection{GPT}
GPT --- таблица довольно новая, а потому у она может неподдерживаться ПО.
Начало диска всё так же занимает MBR (помеченная защищённой), далее
идёт сама таблица (первичная запись), которая дублируется в конце диска
(вторичная запись). Таблица вмещает 128 записей о разделах.
GPT использует LBA.
Кажется, в GPT нет загрузочной записи, и загрузочным обычно считается
первый раздел, который содержит ФС семейства FAT (как утверждает лектор,
обычно FAT32), где находится информация, которая
позволяет UEFI загружать ОС. Есть поддержка подписи раздела, что позовляет
избежать подмены загрузчика.
Это одна из типичных атак. На зловред помечает некоторые байты на файловой
системе "сбойными", затирает стандартный загрузчик в MBR и подменяет своим,
а свой код помещает в те самые блоки. Тогда код злоумышленника будет загружен
ещё \emph{до кода операционной системы}, что даёт ему огромный контроль над ПК.
\section{UEFI}
Unified Extended Firmware Interface --- современная замена BIOS.
Выделяется уже упомянутый выше EFI System Partition, куда помещаются
загрузчики ОС, опционально --- драйвера и приложения, написанные для
UEFI (например, EFI shell).
\end{document}