xg-scale

view raid.tex @ 0:4730a0d07d88

Исходники курса после первого прочтения.
Правки (которых должно быть много),
ещё пока не вносились.
author Igor Chubin <igor@chub.in>
date Tue Jul 01 16:16:44 2008 +0300 (2008-07-01)
parents
children
line source
1 \section{Программный RAID в Linux}
3 Здесь рассматриваются вопросы создания и обслуживания программного RAID-массива в операционной системе Linux.
5 \subsection{mdadm}
6 Управление программным RAID-массивом в Linux
7 выполняется с помощью программы \textbf{mdadm}.
9 У программы \textbf{mdadm} есть несколько режимов работы.
11 \begin{itemize}
12 \item \textbf{Assemble (сборка)} — Собрать компоненты ранее созданного массива в массив. Компоненты можно указывать явно, но можно и не указывать — тогда выполняется их поиск по суперблокам.
13 \item \textbf{Build (построение)} — Собрать массив из компонентов, у которых нет суперблоков. Не выполняются никакие проверки, создание и сборка массива в принципе ничем не отличаются.
14 \item \textbf{Create (создание)} — Созать новый массив на основе указанных устройств. Использовать суперблоки размещённые на каждом устройстве.
15 \item \textbf{Monitor (наблюдение)} — Следить на изменением состояния устройств. Для RAID0 этот режим не имеет смысла.
16 \item \textbf{Grow (расширение или уменьшение)} — Расширение или уменьшение массива, включаются или удаляются новые диски.
17 \item \textbf{Incremental Assembly (инкрементальная сборка)} — Добавление диска в массив.
18 \item \textbf{Manage (управление)} — Разнообразные операции по управлению массивом, такие как замена диска и пометка как сбойного.
19 \item \textbf{Misc (разное)} — Действия, которые не относятся ни к одному из перечисленных выше режимов работы.
20 \item \textbf{Auto-detect (автоообнаружение)} — Активация автоматически обнаруживаемых массивов в ядре Linux.
21 \end{itemize}
23 Формат вызова:
25 \begin{verbatim}
26 mdadm [mode] [array] [options]
27 \end{verbatim}
29 Режимы:
30 \begin{itemize}
31 \item \texttt{-A}, \texttt{--assemble} — режим сборки
32 \item \texttt{-B}, \texttt{--build} — режим построения
33 \item \texttt{-C}, \texttt{--create} — режим создания
34 \item \texttt{-F}, \texttt{--follow}, \texttt{--monitor} — режим наблюдения
35 \item \texttt{-G}, \texttt{--grow} — режим расширения
36 \item \texttt{-I}, \texttt{--incremental} — режим инкрементальной сборки
37 \end{itemize}
39 \subsection{Настройка программного RAID-массива}
40 Рассмотрим как выполнить настройку RAID-массива 5 уровня
41 на трёх дисковых разделах.
42 Мы будем использовать разделы:
43 \begin{verbatim}
44 /dev/hde1
45 /dev/hdf2
46 /dev/hdg1
47 \end{verbatim}
49 В том случае если разделы иные,
50 не забудьте использовать соответствующие имена файлов.
52 \subsubsection{Создание разделов}
53 Нужно определить на каких физических разделах
54 будет создаваться RAID-массив.
55 Если разделы уже есть, нужно найти свободные (\textit{fdisk -l}).
56 Если разделов ещё нет, но есть неразмеченное место,
57 их можно создать с помощью программ \textit{fdisk} или \textit{cfdisk}.
59 Просмотреть какие есть разделы:
61 \begin{verbatim}
62 %# fdisk -l
63 \end{verbatim}
65 \begin{verbatim}
66 Disk /dev/hda: 12.0 GB, 12072517632 bytes
67 255 heads, 63 sectors/track, 1467 cylinders
68 Units = cylinders of 16065 * 512 = 8225280 bytes
69 \end{verbatim}
71 \begin{verbatim}
72 Device Boot Start End Blocks Id System
73 /dev/hda1 * 1 13 104391 83 Linux
74 /dev/hda2 14 144 1052257+ 83 Linux
75 /dev/hda3 145 209 522112+ 82 Linux swap
76 /dev/hda4 210 1467 10104885 5 Extended
77 /dev/hda5 210 655 3582463+ 83 Linux
78 ...
79 ...
80 /dev/hda15 1455 1467 104391 83 Linux
81 \end{verbatim}
83 Просмотреть, какие разделы куда смонтированы,
84 и сколько свободного места есть на них (размеры в килобайтах):
86 \begin{verbatim}
87 %# df -k
88 Filesystem 1K-blocks Used Available Use% Mounted on
89 /dev/hda2 1035692 163916 819164 17% /
90 /dev/hda1 101086 8357 87510 9% /boot
91 /dev/hda15 101086 4127 91740 5% /data1
92 ...
93 ...
94 ...
95 /dev/hda7 5336664 464228 4601344 10% /var
96 \end{verbatim}
98 \subsubsection{Размонтирование}
99 Если вы будете использовать созданные ранее разделы,
100 обязательно размонтируйте их. RAID-массив нельзя создавать
101 поверх разделов, на которых находятся смонтированные файловые системы.
103 \begin{verbatim}
104 %# umount /dev/hde1
105 %# umount /dev/hdf2
106 %# umount /dev/hdg1
107 \end{verbatim}
109 \subsubsection{Изменение типа разделов}
110 Желательно (но не обязательно) изменить тип разделов, которые будут
111 входить в RAID-массив и установить его равным FD (Linux RAID autodetect).
112 Изменить тип раздела можно с помощью fdisk.
114 Рассмотрим как это делать на примере раздела \texttt{/dev/hde1}.
115 \begin{verbatim}
116 %# fdisk /dev/hde
117 The number of cylinders for this disk is set to 8355.
118 There is nothing wrong with that, but this is larger than 1024,
119 and could in certain setups cause problems with:
120 1) software that runs at boot time (e.g., old versions of LILO)
121 2) booting and partitioning software from other OSs
122 (e.g., DOS FDISK, OS/2 FDISK)
124 Command (m for help):
126 Use FDISK Help
128 Now use the fdisk m command to get some help:
130 Command (m for help): m
131 ...
132 ...
133 p print the partition table
134 q quit without saving changes
135 s create a new empty Sun disklabel
136 t change a partition's system id
137 ...
138 ...
139 Command (m for help):
141 Set The ID Type To FD
143 Partition /dev/hde1 is the first partition on disk /dev/hde.
144 Modify its type using the t command, and specify the partition number
145 and type code.
146 You also should use the L command to get a full listing
147 of ID types in case you forget.
149 Command (m for help): t
150 Partition number (1-5): 1
151 Hex code (type L to list codes): L
153 ...
154 ...
155 ...
156 16 Hidden FAT16 61 SpeedStor f2 DOS secondary
157 17 Hidden HPFS/NTF 63 GNU HURD or Sys fd Linux raid auto
158 18 AST SmartSleep 64 Novell Netware fe LANstep
159 1b Hidden Win95 FA 65 Novell Netware ff BBT
160 Hex code (type L to list codes): fd
161 Changed system type of partition 1 to fd (Linux raid autodetect)
163 Command (m for help):
166 Make Sure The Change Occurred
168 Use the p command to get the new proposed partition table:
170 Command (m for help): p
172 Disk /dev/hde: 4311 MB, 4311982080 bytes
173 16 heads, 63 sectors/track, 8355 cylinders
174 Units = cylinders of 1008 * 512 = 516096 bytes
176 Device Boot Start End Blocks Id System
177 /dev/hde1 1 4088 2060320+ fd Linux raid autodetect
178 /dev/hde2 4089 5713 819000 83 Linux
179 /dev/hde4 6608 8355 880992 5 Extended
180 /dev/hde5 6608 7500 450040+ 83 Linux
181 /dev/hde6 7501 8355 430888+ 83 Linux
183 Command (m for help):
186 Save The Changes
188 Use the w command to permanently save the changes to disk /dev/hde:
190 Command (m for help): w
191 The partition table has been altered!
193 Calling ioctl() to re-read partition table.
195 WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
196 The kernel still uses the old table.
197 The new table will be used at the next reboot.
198 Syncing disks.
199 \end{verbatim}
201 Аналогичным образом нужно изменить тип раздела
202 для всех остальных разделов, входящих в RAID-массив.
204 \subsubsection{Создание RAID-массива}
205 Создание RAID-массива выполняется с помощью программы \textbf{mdadm} (ключ \verb|--create|).
206 Мы воспользуемся опцией \verb|--level|, для того чтобы создать RAID-массив 5 уровня.
207 С помощью ключа \verb|--raid-devices| укажем устройства, поверх которых будет собираться
208 RAID-массив.
209 \begin{verbatim}
210 %# mdadm --create --verbose /dev/md0 --level=5 \
211 --raid-devices=3 /dev/hde1 /dev/hdf2 /dev/hdg1
213 mdadm: layout defaults to left-symmetric
214 mdadm: chunk size defaults to 64K
215 mdadm: /dev/hde1 appears to contain an ext2fs file system
216 size=48160K mtime=Sat Jan 27 23:11:39 2007
217 mdadm: /dev/hdf2 appears to contain an ext2fs file system
218 size=48160K mtime=Sat Jan 27 23:11:39 2007
219 mdadm: /dev/hdg1 appears to contain an ext2fs file system
220 size=48160K mtime=Sat Jan 27 23:11:39 2007
221 mdadm: size set to 48064K
222 Continue creating array? y
223 mdadm: array /dev/md0 started.
224 \end{verbatim}
226 Если вы хотите сразу создать массив, где диска не хватает (degraded)
227 просто укажите слово \texttt{missing} вместо имени устройства.
228 Для RAID5 это может быть только один диск; для RAID6 — не более двух;
229 для RAID1 — сколько угодно, но должен быть как минимум один рабочий.
231 \subsubsection{Проверка правильности сборки}
232 Убедиться, что RAID-массив проинициализирован корректно
233 можно просмотрев файл \texttt{/proc/mdstat}.
234 В этом файле отражается текущее состояние RAID-массива.
235 \begin{verbatim}
236 %# cat /proc/mdstat
237 Personalities : [raid5]
238 read_ahead 1024 sectors
239 md0 : active raid5 hdg1[2] hde1[1] hdf2[0]
240 4120448 blocks level 5, 32k chunk, algorithm 3 [3/3] [UUU]
242 unused devices: <none>
243 \end{verbatim}
245 Обратите внимание на то, как называется новый RAID-массив.
246 В нашем случае он называется \texttt{/dev/md0}.
247 Мы будем обращаться к массиву по этому имени.
249 \subsubsection{Создание файловой системы поверх RAID-массива}
250 Новый RAID-раздел нужно отформатировать, т.е. создать на нём файловую систему.
251 Сделать это можно при помощи программы из семейства \textbf{mkfs}.
252 Если мы будем создавать файловую систему ext3, воспользуемся программой \textbf{mkfs.ext3}:
253 \begin{verbatim}
254 %# mkfs.ext3 /dev/md0
255 mke2fs 1.39 (29-May-2006)
256 Filesystem label=
257 OS type: Linux
258 Block size=1024 (log=0)
259 Fragment size=1024 (log=0)
260 36144 inodes, 144192 blocks
261 7209 blocks (5.00%) reserved for the super user
262 First data block=1
263 Maximum filesystem blocks=67371008
264 18 block groups
265 8192 blocks per group, 8192 fragments per group
266 2008 inodes per group
267 Superblock backups stored on blocks:
268 8193, 24577, 40961, 57345, 73729
270 Writing inode tables: done
271 Creating journal (4096 blocks): done
272 Writing superblocks and filesystem accounting information: done
274 This filesystem will be automatically checked every 33 mounts or
275 180 days, whichever comes first. Use tune2fs -c or -i to override.
276 \end{verbatim}
278 \subsubsection{Создание конфигурационного файла mdadm.conf}
279 Система сама не запоминает какие RAID-массивы ей нужно создать
280 и какие компоненты в них входят.
281 Эта информация находится в файле \texttt{mdadm.conf}.
283 Строки, которые следует добавить в этот файл,
284 можно получить при помощи команды
285 \begin{verbatim}
286 mdadm --detail --scan --verbose
287 \end{verbatim}
289 Вот пример её использования:
291 \begin{verbatim}
292 %# mdadm --detail --scan --verbose
293 ARRAY /dev/md0 level=raid5 num-devices=4
294 UUID=77b695c4:32e5dd46:63dd7d16:17696e09
295 devices=/dev/hde1,/dev/hdf2,/dev/hdg1
296 \end{verbatim}
298 Если файла \texttt{mdadm.conf} ещё нет, можно его создать:
299 \begin{verbatim}
300 %# mdadm --detail --scan --verbose > /etc/mdadm.conf
301 \end{verbatim}
303 \subsubsection{Создание точки монтирования для RAID-массива}
304 Поскольку мы создали новую файловую систему, вероятно,
305 нам понадобится и новая точка монтирования.
306 Назовём её \texttt{/raid}.
307 \begin{verbatim}
308 %# mkdir /raid
309 \end{verbatim}
311 \subsubsection{Изменение /etc/fstab}
312 Для того чтобы файловая система, созданная на новом RAID-массиве автоматически монтировалась
313 при загрузке, добавим соотвествующую запись в файл \texttt{/etc/fstab}
314 хранящий список автоматически монтируемых при загрузке файловых систем.
315 \begin{verbatim}
316 /dev/md0 /raid ext3 defaults 1 2
317 \end{verbatim}
319 Если мы объединяли в RAID-массив разделы, которые использовались раньше,
320 нужно отключить их монтирование: удалить или закомментировать соответствующие строки
321 в файле \texttt{/etc/fstab}.
322 Закомментировать строку можно символом \texttt{\#}.
323 \begin{verbatim}
324 #/dev/hde1 /data1 ext3 defaults 1 2
325 #/dev/hdf2 /data2 ext3 defaults 1 2
326 #/dev/hdg1 /data3 ext3 defaults 1 2
327 \end{verbatim}
329 \subsubsection{Монтирование файловой системы нового RAID-массива}
330 Для того чтобы получить доступ к файловой системе, расположенной на новом RAID-массиве,
331 её нужно смонтировать. Монтирование выполняется с помощью команды \textbf{mount}.
333 Если новая файловая система добавлена в файл \texttt{/etc/fstab},
334 можно смонтировать её командой \textbf{mount} \texttt{-a}
335 (смонтируются все файловые системы, которые должны монтироваться при загрузке, но сейчас не смонтированы).
336 \begin{verbatim}
337 %# mount -a
338 \end{verbatim}
339 Можно смонтировать только нужный нам раздел (при условии, что он указан в \texttt{/etc/fstsb}).
340 \begin{verbatim}
341 %# mount /raid
342 \end{verbatim}
343 Если раздел в \texttt{/etc/fstab} не указан, то при монтировании мы должны задавать как минимум два параметра:
344 точка монтирования и монтируемое устройство:
345 \begin{verbatim}
346 %# mount /dev/md0 /raid
347 \end{verbatim}
349 \subsubsection{Проверка состояния RAID-массива}
350 Информация о состоянии RAID-массива находится в файле \texttt{/proc/mdstat}.
351 \begin{verbatim}
352 %# raidstart /dev/md0
353 %# cat /proc/mdstat
354 Personalities : [raid5]
355 read_ahead 1024 sectors
356 md0 : active raid5 hdg1[2] hde1[1] hdf2[0]
357 4120448 blocks level 5, 32k chunk, algorithm 3 [3/3] [UUU]
359 unused devices: <none>
360 \end{verbatim}
362 \subsection{Дальнейшая работа с массивом}
363 \subsubsection{Пометка диска как сбойного}
364 Диск в массиве можно условно сделать сбойным, ключ \verb|--fail| (\texttt{-f}):
365 \begin{verbatim}
366 %# mdadm /dev/md0 --fail /dev/hde1
367 %# mdadm /dev/md0 -f /dev/hde1
368 \end{verbatim}
370 \subsubsection{Удаление сбойного диска}
371 Сбойный диск можно удалить с помощью ключа \verb|{--remove| (\texttt{-r}):
372 \begin{verbatim}
373 %# mdadm /dev/md0 --remove /dev/hde1
374 %# mdadm /dev/md0 -r /dev/hde1
375 \end{verbatim}
377 \subsubsection{Добавление нового диска}
378 Добавить новый диск в массив можно с помощью ключей \verb|--add| (\texttt{-a})
379 и \verb|--re-add|:
380 \begin{verbatim}
381 %# mdadm /dev/md0 --add /dev/hde1
382 %# mdadm /dev/md0 -a /dev/hde1
383 \end{verbatim}
385 \subsubsection{Сборка существующего массива}
386 Собрать существующий массив можно с помощью \textbf{mdadm} \texttt{--assemble}.
387 Как дополнительный аргумент указывается,
388 нужно ли выполнять сканирование устройств, и если нет, то
389 какие устройства нужно собирать.
390 \begin{verbatim}
391 %# mdadm --assemble /dev/md0 /dev/hde1 /dev/hdf2 /dev/hdg1
392 %# mdadm --assemble --scan
393 \end{verbatim}
395 \subsubsection{Расширение массива}
396 Расширить массив можно с помощью ключа \texttt{--grow} (\texttt{-G}).
397 Сначала добавляется диск, а потом массив расширяется:
398 \begin{verbatim}
399 %# mdadm /dev/md0 --add /dev/hdh2
400 \end{verbatim}
402 Проверяем, что диск (раздел) добавился:
404 \begin{verbatim}
405 %# mdadm --detail /dev/hdh2
406 %# cat /proc/mdstat
407 \end{verbatim}
409 Если раздел действительно добавился,
410 мы можем расширить массив:
412 \begin{verbatim}
413 %# mdadm -G /dev/md0 --raid-devices=4
414 \end{verbatim}
416 Убедитесь, что массив расширился:
418 \begin{verbatim}
419 %# cat /proc/mdstat
420 \end{verbatim}
422 Нужно обновить обновить конфигурационный файл с учётом сделанных
423 изменений:
425 \begin{verbatim}
426 %# mdadm --detail --scan >> /etc/mdadm/mdadm.conf
427 %# vi /etc/mdadm/mdadm.conf
428 \end{verbatim}
430 \subsection{Дополнительная информация}
431 \begin{itemize}
432 \item \htmladdnormallinkfoot{Программный RAID в Linux}{http://xgu.ru/wiki/raid} (рус.)
433 \item \htmladdnormallinkfoot{man mdadm}{http://linux.die.net/man/8/mdadm} (англ.)
434 \item \htmladdnormallinkfoot{man mdadm.conf}{http://linux.die.net/man/5/mdadm.conf} (англ.)
435 \item \htmladdnormallinkfoot{Linux Software RAID}{http://www.linuxhomenetworking.com/wiki/index.php/Quick\_HOWTO\_:\_Ch26\_:\_Linux\_Software\_RAID} (англ.)
436 \item \htmladdnormallinkfoot{HOWTO Gentoo Install on Software RAID}{http://gentoo-wiki.com/HOWTO\_Gentoo\_Install\_on\_Software\_RAID} (англ.)
437 \item \htmladdnormallinkfoot{HOWTO Migrate To RAID}{http://gentoo-wiki.com/HOWTO\_Migrate\_To\_RAID} (англ.)
438 \item \htmladdnormallinkfoot{Remote Conversion to Linux Software RAID-1 for Crazy Sysadmins HOWTO}{http://togami.com/~warren/guides/remoteraidcrazies/} (англ.)
439 \item \htmladdnormallinkfoot{Migrating To RAID1 Mirror on Sarge}{http://www.debian-administration.org/articles/238} (англ.)
440 \end{itemize}
442 Производительность программных RAID-массивов:
443 \begin{itemize}
444 \item Adventures With Linux RAID: \htmladdnormallinkfoot{Part 1}{http://opennfo.wordpress.com/2007/09/02/adventures-with-linux-raid-part-1/}, \htmladdnormallinkfoot{Part 2}{http://opennfo.wordpress.com/2007/09/08/adventures-with-linux-raid-part-2/} (англ.)
445 \end{itemize}