xg-scale
diff raid.tex @ 4:253d66dd74bb
Добавлено подробное описание управления памятью домена и выделением устройств домену
author | Igor Chubin <igor@chub.in> |
---|---|
date | Sun Jul 06 23:27:46 2008 +0300 (2008-07-06) |
parents | |
children |
line diff
1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/raid.tex Sun Jul 06 23:27:46 2008 +0300 1.3 @@ -0,0 +1,446 @@ 1.4 +\section{Программный RAID в Linux} 1.5 + 1.6 +Здесь рассматриваются вопросы создания и обслуживания программного RAID-массива в операционной системе Linux. 1.7 + 1.8 +\subsection{mdadm} 1.9 +Управление программным RAID-массивом в Linux 1.10 +выполняется с помощью программы \textbf{mdadm}. 1.11 + 1.12 +У программы \textbf{mdadm} есть несколько режимов работы. 1.13 + 1.14 +\begin{itemize} 1.15 +\item \textbf{Assemble (сборка)} — Собрать компоненты ранее созданного массива в массив. Компоненты можно указывать явно, но можно и не указывать — тогда выполняется их поиск по суперблокам. 1.16 +\item \textbf{Build (построение)} — Собрать массив из компонентов, у которых нет суперблоков. Не выполняются никакие проверки, создание и сборка массива в принципе ничем не отличаются. 1.17 +\item \textbf{Create (создание)} — Созать новый массив на основе указанных устройств. Использовать суперблоки размещённые на каждом устройстве. 1.18 +\item \textbf{Monitor (наблюдение)} — Следить на изменением состояния устройств. Для RAID0 этот режим не имеет смысла. 1.19 +\item \textbf{Grow (расширение или уменьшение)} — Расширение или уменьшение массива, включаются или удаляются новые диски. 1.20 +\item \textbf{Incremental Assembly (инкрементальная сборка)} — Добавление диска в массив. 1.21 +\item \textbf{Manage (управление)} — Разнообразные операции по управлению массивом, такие как замена диска и пометка как сбойного. 1.22 +\item \textbf{Misc (разное)} — Действия, которые не относятся ни к одному из перечисленных выше режимов работы. 1.23 +\item \textbf{Auto-detect (автоообнаружение)} — Активация автоматически обнаруживаемых массивов в ядре Linux. 1.24 +\end{itemize} 1.25 + 1.26 +Формат вызова: 1.27 + 1.28 +\begin{verbatim} 1.29 + mdadm [mode] [array] [options] 1.30 +\end{verbatim} 1.31 + 1.32 +Режимы: 1.33 +\begin{itemize} 1.34 +\item \texttt{-A}, \texttt{--assemble} — режим сборки 1.35 +\item \texttt{-B}, \texttt{--build} — режим построения 1.36 +\item \texttt{-C}, \texttt{--create} — режим создания 1.37 +\item \texttt{-F}, \texttt{--follow}, \texttt{--monitor} — режим наблюдения 1.38 +\item \texttt{-G}, \texttt{--grow} — режим расширения 1.39 +\item \texttt{-I}, \texttt{--incremental} — режим инкрементальной сборки 1.40 +\end{itemize} 1.41 + 1.42 +\subsection{Настройка программного RAID-массива} 1.43 +Рассмотрим как выполнить настройку RAID-массива 5 уровня 1.44 +на трёх дисковых разделах. 1.45 +Мы будем использовать разделы: 1.46 +\begin{verbatim} 1.47 + /dev/hde1 1.48 + /dev/hdf2 1.49 + /dev/hdg1 1.50 +\end{verbatim} 1.51 + 1.52 +В том случае если разделы иные, 1.53 +не забудьте использовать соответствующие имена файлов. 1.54 + 1.55 +\subsubsection{Создание разделов} 1.56 +Нужно определить на каких физических разделах 1.57 +будет создаваться RAID-массив. 1.58 +Если разделы уже есть, нужно найти свободные (\textit{fdisk -l}). 1.59 +Если разделов ещё нет, но есть неразмеченное место, 1.60 +их можно создать с помощью программ \textit{fdisk} или \textit{cfdisk}. 1.61 + 1.62 +Просмотреть какие есть разделы: 1.63 + 1.64 +\begin{verbatim} 1.65 + %# fdisk -l 1.66 +\end{verbatim} 1.67 + 1.68 +\begin{verbatim} 1.69 + Disk /dev/hda: 12.0 GB, 12072517632 bytes 1.70 + 255 heads, 63 sectors/track, 1467 cylinders 1.71 + Units = cylinders of 16065 * 512 = 8225280 bytes 1.72 +\end{verbatim} 1.73 + 1.74 +\begin{verbatim} 1.75 + Device Boot Start End Blocks Id System 1.76 + /dev/hda1 * 1 13 104391 83 Linux 1.77 + /dev/hda2 14 144 1052257+ 83 Linux 1.78 + /dev/hda3 145 209 522112+ 82 Linux swap 1.79 + /dev/hda4 210 1467 10104885 5 Extended 1.80 + /dev/hda5 210 655 3582463+ 83 Linux 1.81 + ... 1.82 + ... 1.83 + /dev/hda15 1455 1467 104391 83 Linux 1.84 +\end{verbatim} 1.85 + 1.86 +Просмотреть, какие разделы куда смонтированы, 1.87 +и сколько свободного места есть на них (размеры в килобайтах): 1.88 + 1.89 +\begin{verbatim} 1.90 + %# df -k 1.91 + Filesystem 1K-blocks Used Available Use% Mounted on 1.92 + /dev/hda2 1035692 163916 819164 17% / 1.93 + /dev/hda1 101086 8357 87510 9% /boot 1.94 + /dev/hda15 101086 4127 91740 5% /data1 1.95 + ... 1.96 + ... 1.97 + ... 1.98 + /dev/hda7 5336664 464228 4601344 10% /var 1.99 +\end{verbatim} 1.100 + 1.101 +\subsubsection{Размонтирование} 1.102 +Если вы будете использовать созданные ранее разделы, 1.103 +обязательно размонтируйте их. RAID-массив нельзя создавать 1.104 +поверх разделов, на которых находятся смонтированные файловые системы. 1.105 + 1.106 +\begin{verbatim} 1.107 + %# umount /dev/hde1 1.108 + %# umount /dev/hdf2 1.109 + %# umount /dev/hdg1 1.110 +\end{verbatim} 1.111 + 1.112 +\subsubsection{Изменение типа разделов} 1.113 +Желательно (но не обязательно) изменить тип разделов, которые будут 1.114 +входить в RAID-массив и установить его равным FD (Linux RAID autodetect). 1.115 +Изменить тип раздела можно с помощью fdisk. 1.116 + 1.117 +Рассмотрим как это делать на примере раздела \texttt{/dev/hde1}. 1.118 +\begin{verbatim} 1.119 + %# fdisk /dev/hde 1.120 + The number of cylinders for this disk is set to 8355. 1.121 + There is nothing wrong with that, but this is larger than 1024, 1.122 + and could in certain setups cause problems with: 1.123 + 1) software that runs at boot time (e.g., old versions of LILO) 1.124 + 2) booting and partitioning software from other OSs 1.125 + (e.g., DOS FDISK, OS/2 FDISK) 1.126 + 1.127 + Command (m for help): 1.128 + 1.129 + Use FDISK Help 1.130 + 1.131 + Now use the fdisk m command to get some help: 1.132 + 1.133 + Command (m for help): m 1.134 + ... 1.135 + ... 1.136 + p print the partition table 1.137 + q quit without saving changes 1.138 + s create a new empty Sun disklabel 1.139 + t change a partition's system id 1.140 + ... 1.141 + ... 1.142 + Command (m for help): 1.143 + 1.144 + Set The ID Type To FD 1.145 + 1.146 + Partition /dev/hde1 is the first partition on disk /dev/hde. 1.147 + Modify its type using the t command, and specify the partition number 1.148 + and type code. 1.149 + You also should use the L command to get a full listing 1.150 + of ID types in case you forget. 1.151 + 1.152 + Command (m for help): t 1.153 + Partition number (1-5): 1 1.154 + Hex code (type L to list codes): L 1.155 + 1.156 + ... 1.157 + ... 1.158 + ... 1.159 + 16 Hidden FAT16 61 SpeedStor f2 DOS secondary 1.160 + 17 Hidden HPFS/NTF 63 GNU HURD or Sys fd Linux raid auto 1.161 + 18 AST SmartSleep 64 Novell Netware fe LANstep 1.162 + 1b Hidden Win95 FA 65 Novell Netware ff BBT 1.163 + Hex code (type L to list codes): fd 1.164 + Changed system type of partition 1 to fd (Linux raid autodetect) 1.165 + 1.166 + Command (m for help): 1.167 + 1.168 + 1.169 + Make Sure The Change Occurred 1.170 + 1.171 + Use the p command to get the new proposed partition table: 1.172 + 1.173 + Command (m for help): p 1.174 + 1.175 + Disk /dev/hde: 4311 MB, 4311982080 bytes 1.176 + 16 heads, 63 sectors/track, 8355 cylinders 1.177 + Units = cylinders of 1008 * 512 = 516096 bytes 1.178 + 1.179 + Device Boot Start End Blocks Id System 1.180 + /dev/hde1 1 4088 2060320+ fd Linux raid autodetect 1.181 + /dev/hde2 4089 5713 819000 83 Linux 1.182 + /dev/hde4 6608 8355 880992 5 Extended 1.183 + /dev/hde5 6608 7500 450040+ 83 Linux 1.184 + /dev/hde6 7501 8355 430888+ 83 Linux 1.185 + 1.186 + Command (m for help): 1.187 + 1.188 + 1.189 + Save The Changes 1.190 + 1.191 + Use the w command to permanently save the changes to disk /dev/hde: 1.192 + 1.193 + Command (m for help): w 1.194 + The partition table has been altered! 1.195 + 1.196 + Calling ioctl() to re-read partition table. 1.197 + 1.198 + WARNING: Re-reading the partition table failed with error 16: Device or resource busy. 1.199 + The kernel still uses the old table. 1.200 + The new table will be used at the next reboot. 1.201 + Syncing disks. 1.202 +\end{verbatim} 1.203 + 1.204 +Аналогичным образом нужно изменить тип раздела 1.205 +для всех остальных разделов, входящих в RAID-массив. 1.206 + 1.207 +\subsubsection{Создание RAID-массива} 1.208 +Создание RAID-массива выполняется с помощью программы \textbf{mdadm} (ключ \verb|--create|). 1.209 +Мы воспользуемся опцией \verb|--level|, для того чтобы создать RAID-массив 5 уровня. 1.210 +С помощью ключа \verb|--raid-devices| укажем устройства, поверх которых будет собираться 1.211 +RAID-массив. 1.212 +\begin{verbatim} 1.213 + %# mdadm --create --verbose /dev/md0 --level=5 \ 1.214 + --raid-devices=3 /dev/hde1 /dev/hdf2 /dev/hdg1 1.215 + 1.216 + mdadm: layout defaults to left-symmetric 1.217 + mdadm: chunk size defaults to 64K 1.218 + mdadm: /dev/hde1 appears to contain an ext2fs file system 1.219 + size=48160K mtime=Sat Jan 27 23:11:39 2007 1.220 + mdadm: /dev/hdf2 appears to contain an ext2fs file system 1.221 + size=48160K mtime=Sat Jan 27 23:11:39 2007 1.222 + mdadm: /dev/hdg1 appears to contain an ext2fs file system 1.223 + size=48160K mtime=Sat Jan 27 23:11:39 2007 1.224 + mdadm: size set to 48064K 1.225 + Continue creating array? y 1.226 + mdadm: array /dev/md0 started. 1.227 +\end{verbatim} 1.228 + 1.229 +Если вы хотите сразу создать массив, где диска не хватает (degraded) 1.230 +просто укажите слово \texttt{missing} вместо имени устройства. 1.231 +Для RAID5 это может быть только один диск; для RAID6 — не более двух; 1.232 +для RAID1 — сколько угодно, но должен быть как минимум один рабочий. 1.233 + 1.234 +\subsubsection{Проверка правильности сборки} 1.235 +Убедиться, что RAID-массив проинициализирован корректно 1.236 +можно просмотрев файл \texttt{/proc/mdstat}. 1.237 +В этом файле отражается текущее состояние RAID-массива. 1.238 +\begin{verbatim} 1.239 + %# cat /proc/mdstat 1.240 + Personalities : [raid5] 1.241 + read_ahead 1024 sectors 1.242 + md0 : active raid5 hdg1[2] hde1[1] hdf2[0] 1.243 + 4120448 blocks level 5, 32k chunk, algorithm 3 [3/3] [UUU] 1.244 + 1.245 + unused devices: <none> 1.246 +\end{verbatim} 1.247 + 1.248 +Обратите внимание на то, как называется новый RAID-массив. 1.249 +В нашем случае он называется \texttt{/dev/md0}. 1.250 +Мы будем обращаться к массиву по этому имени. 1.251 + 1.252 +\subsubsection{Создание файловой системы поверх RAID-массива} 1.253 +Новый RAID-раздел нужно отформатировать, т.е. создать на нём файловую систему. 1.254 +Сделать это можно при помощи программы из семейства \textbf{mkfs}. 1.255 +Если мы будем создавать файловую систему ext3, воспользуемся программой \textbf{mkfs.ext3}: 1.256 +\begin{verbatim} 1.257 + %# mkfs.ext3 /dev/md0 1.258 + mke2fs 1.39 (29-May-2006) 1.259 + Filesystem label= 1.260 + OS type: Linux 1.261 + Block size=1024 (log=0) 1.262 + Fragment size=1024 (log=0) 1.263 + 36144 inodes, 144192 blocks 1.264 + 7209 blocks (5.00%) reserved for the super user 1.265 + First data block=1 1.266 + Maximum filesystem blocks=67371008 1.267 + 18 block groups 1.268 + 8192 blocks per group, 8192 fragments per group 1.269 + 2008 inodes per group 1.270 + Superblock backups stored on blocks: 1.271 + 8193, 24577, 40961, 57345, 73729 1.272 + 1.273 + Writing inode tables: done 1.274 + Creating journal (4096 blocks): done 1.275 + Writing superblocks and filesystem accounting information: done 1.276 + 1.277 + This filesystem will be automatically checked every 33 mounts or 1.278 + 180 days, whichever comes first. Use tune2fs -c or -i to override. 1.279 +\end{verbatim} 1.280 + 1.281 +\subsubsection{Создание конфигурационного файла mdadm.conf} 1.282 +Система сама не запоминает какие RAID-массивы ей нужно создать 1.283 +и какие компоненты в них входят. 1.284 +Эта информация находится в файле \texttt{mdadm.conf}. 1.285 + 1.286 +Строки, которые следует добавить в этот файл, 1.287 +можно получить при помощи команды 1.288 +\begin{verbatim} 1.289 + mdadm --detail --scan --verbose 1.290 +\end{verbatim} 1.291 + 1.292 +Вот пример её использования: 1.293 + 1.294 +\begin{verbatim} 1.295 + %# mdadm --detail --scan --verbose 1.296 + ARRAY /dev/md0 level=raid5 num-devices=4 1.297 + UUID=77b695c4:32e5dd46:63dd7d16:17696e09 1.298 + devices=/dev/hde1,/dev/hdf2,/dev/hdg1 1.299 +\end{verbatim} 1.300 + 1.301 +Если файла \texttt{mdadm.conf} ещё нет, можно его создать: 1.302 +\begin{verbatim} 1.303 + %# mdadm --detail --scan --verbose > /etc/mdadm.conf 1.304 +\end{verbatim} 1.305 + 1.306 +\subsubsection{Создание точки монтирования для RAID-массива} 1.307 +Поскольку мы создали новую файловую систему, вероятно, 1.308 +нам понадобится и новая точка монтирования. 1.309 +Назовём её \texttt{/raid}. 1.310 +\begin{verbatim} 1.311 + %# mkdir /raid 1.312 +\end{verbatim} 1.313 + 1.314 +\subsubsection{Изменение /etc/fstab} 1.315 +Для того чтобы файловая система, созданная на новом RAID-массиве автоматически монтировалась 1.316 +при загрузке, добавим соотвествующую запись в файл \texttt{/etc/fstab} 1.317 +хранящий список автоматически монтируемых при загрузке файловых систем. 1.318 +\begin{verbatim} 1.319 + /dev/md0 /raid ext3 defaults 1 2 1.320 +\end{verbatim} 1.321 + 1.322 +Если мы объединяли в RAID-массив разделы, которые использовались раньше, 1.323 +нужно отключить их монтирование: удалить или закомментировать соответствующие строки 1.324 +в файле \texttt{/etc/fstab}. 1.325 +Закомментировать строку можно символом \texttt{\#}. 1.326 +\begin{verbatim} 1.327 + #/dev/hde1 /data1 ext3 defaults 1 2 1.328 + #/dev/hdf2 /data2 ext3 defaults 1 2 1.329 + #/dev/hdg1 /data3 ext3 defaults 1 2 1.330 +\end{verbatim} 1.331 + 1.332 +\subsubsection{Монтирование файловой системы нового RAID-массива} 1.333 +Для того чтобы получить доступ к файловой системе, расположенной на новом RAID-массиве, 1.334 +её нужно смонтировать. Монтирование выполняется с помощью команды \textbf{mount}. 1.335 + 1.336 +Если новая файловая система добавлена в файл \texttt{/etc/fstab}, 1.337 +можно смонтировать её командой \textbf{mount} \texttt{-a} 1.338 +(смонтируются все файловые системы, которые должны монтироваться при загрузке, но сейчас не смонтированы). 1.339 +\begin{verbatim} 1.340 + %# mount -a 1.341 +\end{verbatim} 1.342 +Можно смонтировать только нужный нам раздел (при условии, что он указан в \texttt{/etc/fstsb}). 1.343 +\begin{verbatim} 1.344 + %# mount /raid 1.345 +\end{verbatim} 1.346 +Если раздел в \texttt{/etc/fstab} не указан, то при монтировании мы должны задавать как минимум два параметра: 1.347 +точка монтирования и монтируемое устройство: 1.348 +\begin{verbatim} 1.349 + %# mount /dev/md0 /raid 1.350 +\end{verbatim} 1.351 + 1.352 +\subsubsection{Проверка состояния RAID-массива} 1.353 +Информация о состоянии RAID-массива находится в файле \texttt{/proc/mdstat}. 1.354 +\begin{verbatim} 1.355 + %# raidstart /dev/md0 1.356 + %# cat /proc/mdstat 1.357 + Personalities : [raid5] 1.358 + read_ahead 1024 sectors 1.359 + md0 : active raid5 hdg1[2] hde1[1] hdf2[0] 1.360 + 4120448 blocks level 5, 32k chunk, algorithm 3 [3/3] [UUU] 1.361 + 1.362 + unused devices: <none> 1.363 +\end{verbatim} 1.364 + 1.365 +\subsection{Дальнейшая работа с массивом} 1.366 +\subsubsection{Пометка диска как сбойного} 1.367 +Диск в массиве можно условно сделать сбойным, ключ \verb|--fail| (\texttt{-f}): 1.368 +\begin{verbatim} 1.369 + %# mdadm /dev/md0 --fail /dev/hde1 1.370 + %# mdadm /dev/md0 -f /dev/hde1 1.371 +\end{verbatim} 1.372 + 1.373 +\subsubsection{Удаление сбойного диска} 1.374 +Сбойный диск можно удалить с помощью ключа \verb|{--remove| (\texttt{-r}): 1.375 +\begin{verbatim} 1.376 + %# mdadm /dev/md0 --remove /dev/hde1 1.377 + %# mdadm /dev/md0 -r /dev/hde1 1.378 +\end{verbatim} 1.379 + 1.380 +\subsubsection{Добавление нового диска} 1.381 +Добавить новый диск в массив можно с помощью ключей \verb|--add| (\texttt{-a}) 1.382 +и \verb|--re-add|: 1.383 +\begin{verbatim} 1.384 + %# mdadm /dev/md0 --add /dev/hde1 1.385 + %# mdadm /dev/md0 -a /dev/hde1 1.386 +\end{verbatim} 1.387 + 1.388 +\subsubsection{Сборка существующего массива} 1.389 +Собрать существующий массив можно с помощью \textbf{mdadm} \texttt{--assemble}. 1.390 +Как дополнительный аргумент указывается, 1.391 +нужно ли выполнять сканирование устройств, и если нет, то 1.392 +какие устройства нужно собирать. 1.393 +\begin{verbatim} 1.394 + %# mdadm --assemble /dev/md0 /dev/hde1 /dev/hdf2 /dev/hdg1 1.395 + %# mdadm --assemble --scan 1.396 +\end{verbatim} 1.397 + 1.398 +\subsubsection{Расширение массива} 1.399 +Расширить массив можно с помощью ключа \texttt{--grow} (\texttt{-G}). 1.400 +Сначала добавляется диск, а потом массив расширяется: 1.401 +\begin{verbatim} 1.402 + %# mdadm /dev/md0 --add /dev/hdh2 1.403 +\end{verbatim} 1.404 + 1.405 +Проверяем, что диск (раздел) добавился: 1.406 + 1.407 +\begin{verbatim} 1.408 + %# mdadm --detail /dev/hdh2 1.409 + %# cat /proc/mdstat 1.410 +\end{verbatim} 1.411 + 1.412 +Если раздел действительно добавился, 1.413 +мы можем расширить массив: 1.414 + 1.415 +\begin{verbatim} 1.416 + %# mdadm -G /dev/md0 --raid-devices=4 1.417 +\end{verbatim} 1.418 + 1.419 +Убедитесь, что массив расширился: 1.420 + 1.421 +\begin{verbatim} 1.422 + %# cat /proc/mdstat 1.423 +\end{verbatim} 1.424 + 1.425 +Нужно обновить обновить конфигурационный файл с учётом сделанных 1.426 +изменений: 1.427 + 1.428 +\begin{verbatim} 1.429 + %# mdadm --detail --scan >> /etc/mdadm/mdadm.conf 1.430 + %# vi /etc/mdadm/mdadm.conf 1.431 +\end{verbatim} 1.432 + 1.433 +\subsection{Дополнительная информация} 1.434 +\begin{itemize} 1.435 +\item \htmladdnormallinkfoot{Программный RAID в Linux}{http://xgu.ru/wiki/raid} (рус.) 1.436 +\item \htmladdnormallinkfoot{man mdadm}{http://linux.die.net/man/8/mdadm} (англ.) 1.437 +\item \htmladdnormallinkfoot{man mdadm.conf}{http://linux.die.net/man/5/mdadm.conf} (англ.) 1.438 +\item \htmladdnormallinkfoot{Linux Software RAID}{http://www.linuxhomenetworking.com/wiki/index.php/Quick\_HOWTO\_:\_Ch26\_:\_Linux\_Software\_RAID} (англ.) 1.439 +\item \htmladdnormallinkfoot{HOWTO Gentoo Install on Software RAID}{http://gentoo-wiki.com/HOWTO\_Gentoo\_Install\_on\_Software\_RAID} (англ.) 1.440 +\item \htmladdnormallinkfoot{HOWTO Migrate To RAID}{http://gentoo-wiki.com/HOWTO\_Migrate\_To\_RAID} (англ.) 1.441 +\item \htmladdnormallinkfoot{Remote Conversion to Linux Software RAID-1 for Crazy Sysadmins HOWTO}{http://togami.com/~warren/guides/remoteraidcrazies/} (англ.) 1.442 +\item \htmladdnormallinkfoot{Migrating To RAID1 Mirror on Sarge}{http://www.debian-administration.org/articles/238} (англ.) 1.443 +\end{itemize} 1.444 + 1.445 +Производительность программных RAID-массивов: 1.446 +\begin{itemize} 1.447 +\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/} (англ.) 1.448 +\end{itemize} 1.449 +