MDAdm. Работа с RAID на Ubuntu
- Информация о материале
- Категория: Servers (ru)
- Опубликовано: 05.06.2013, 22:29
- Автор: Super User
- Просмотров: 3116
Рано или поздно при настройке серверов приходится столкнуться с такой вещью как RAID.
На брендовых серверах они зачастую полностью хардварные, но тем не менее очень часто приходится сталкиваться и с софтварным рейдом.
Построение RAID
Построим на сервере RAID1.
Сначала создадим одинаковые разделы на дисках sdb и sdc
#fdisk /dev/sdb
command (m for help): n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-16777215, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-16777215, default 16777215): +5G
Command (m for help): t
Hex code (type L to list codes): 83
Changed system type of partition 1 to 83
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
Аналогично сделаем и для диска sdc
Установим утилиту работы с RAID
# apt-get install mdadm
Теперь соберем RAID 1
# mdadm --create --verbose /dev/md0 --level=1 --raid-devices=2 /dev/sdb1 /dev/sdc1
После сборки состояние RAID можно просмотреть при помощи команды
# cat /proc/mdstat
В результате мы должны получить вывод что-то похожее на
personalities : [raid1]
md0 : active raid1 sdc1[1] sdb1[0]
5238720 blocks super 1.2 [2/2] [UU]
unused devices: <none>
Теперь можно на созданном RAID-разделе создавать файловую систему и подключать ее к системе.
# mkfs.ext4 /dev/md0
# mkdir /mnt/raid
# mount /dev/md0 /mnt/raid
Так же для дальнейшей проверки корректности работы рейда создадим на RAID-разделе файл:
# touch /mnt/raid/test.txt
Ошибка при работе с RAID
После того, как мы создали RAID он у нас определяется как устройство /dev/md0, однако после перезагрузки такого устройства в системе не будет, а вместо него появится /dev/md127. Тут можно или в дальнейшем использовать именно такое имя устройства, или, что обычно удобнее, насильно объяснить системе, что наш RAID-раздел именно /dev/md0 и ни как иначе. Для этого выполним команду:
# mdadm -Db /dev/md0 > /etc/mdadm/mdadm.conf
В результате выполнения этой команды в файле /etc/mdadm/mdadm.conf будет строка
ARRAY /dev/md0 metadata=1.2 name=ub-4:0 UUID=7da67e34:3d29e3a1:bdf36edd:6be26e60
После этого необходимо обновить образ initramfs:
# update-initramfs -u
Теперь после перезагрузки наш RAID-раздел будет определяться как /dev/md0.
Деградация и восстановление RAID
Посмотрим как можно провести деградацию рейда. Естественно, в реальной системе диск обычно вылетает сам и нет необходимости специально объявлять его сбойным, но мы воспользуемся возможности утилиты mdadm и объявим часть RAID — /dev/sdb1 сбойным.
# mdadm /dev/md0 --fail /dev/sdb1
Посмотрим теперь на состояние RAID
# cat /proc/mdstat
Мы должны увидеть, что /dev/sdb1 имеет некие проблемы и рейд деградирован:
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md0 : active raid1 sdb1[2](F) sdc1[1]
5238720 blocks super 1.2 [2/1] [_U]
unused devices: <none>
Теперь с помощью fdisk создадим на устройстве /dev/sdd раздел такого же размера, как и /dev/sdс1. После этого удалим /dev/sdb1 из RAID
# mdadm /dev/md0 --remove /dev/sdb1
И добавим новый раздел /dev/sdd1
# mdadm /dev/md0 --add /dev/sdd1
Если мы сразу же посмотрим на состояние RAID
# cat /proc/mdstat
То мы увидим, что RAID у нас опять состоит из двух нормальных дисков и в данный момент происходит его синхронизация:
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md0 : active raid1 sdd1[2] sdc1[1]
5238720 blocks super 1.2 [2/1] [_U]
[=>...................] recovery = 6.2% (329984/5238720) finish=1.2min speed=65996K/sec
unused devices: <none>
Если мы теперь примонтируем наш RAID
# mount /dev/md0 /mnt/raid/
То увидим, что файл, который мы до этого создавали на месте и ничего никуда не пропало.
# ls /mnt/raid/
lost+found test.txt