Один из дисков в моем 3-дисковом массиве raid5 начинает показывать ошибки чтения и предупреждения SMART. Недостаточно, чтобы его выгнали из массива (как неисправный), но это влияет на производительность и, вероятно, выйдет из строя (хуже). Я явно хочу заменить этот привод.
Теперь вопрос в том, запустил ли я это: (sdc - сломанный диск, а sdd - новый):
mdadm /dev/md0 -a /dev/sdd1 -f /dev/sdc1 -r /dev/sdc1
Будет ли Linux сначала отмечать sdc1 как неисправный и никогда больше не читать с него, а затем синхронизировать sdd1 с sda1 и sdb1 (два других диска в массиве)?
Если это так, то я уязвим для случая, когда есть нечитаемый блок (даже один!) На sda1 или sdb1, и это приведет к сбою перестройки.
Что я хотеть необходимо синхронизировать sdd1 как копию sdc1, прежде чем отмечать sdc1 как неисправный. Тогда я не буду в ситуации, когда у меня нет избыточности (хотя одна полоса избыточности находится на диске, что очень хорошо может давать ошибки чтения).
Есть ли способ сделать это в Интернете? В автономном режиме я могу:
Проблема с этим методом заключается в том, что на последнем этапе, если есть несоответствие, я хочу, чтобы новый диск был перезаписанным, а не с четностью (независимо от того, какой диск используется для этой полосы).
Итак, «перестройте sdd1 как новый sdc1, получая данные от sda1 и sdb1, но если они не работают, скопируйте то, что находится на sdc1».
Я бы посоветовал вам поиграть в песочница.
Поскольку mdadm может работать с файлами изображений, а не только с файлами устройств, такими как
т.е. /dev/sda or /dev/mapper/vg00/lv_home
- почему бы вам не протестировать вашу миграцию
в течение секунды программного обеспечения на вашей машине:?)
Я делаю это под debian / lenny и bash:
# cat /etc/debian_version && uname -r && bash --version
5.0.2
2.6.26-2-amd64
GNU bash, version 3.2.39(1)-release (x86_64-pc-linux-gnu)
Copyright (C) 2007 Free Software Foundation, Inc.
От имени пользователя root создайте такие образы дисков размером 4x128 МБ (вам необходимо 512 МБ свободного дискового пространства на /)
sudo su
mkdir -p ~/raidtest/{root,home} && cd ~/raidtest
for i in sd{a,b,c,d} ; do
dd if=/dev/zero bs=128 count=1M of=$i
done
Посмотрим, что произошло:
# ls -hon --time-style=+
total 512M
drwxr-xr-x 2 0 4,0K home
drwxr-xr-x 2 0 4,0K root
-rw-r--r-- 1 0 128M sda
-rw-r--r-- 1 0 128M sdb
-rw-r--r-- 1 0 128M sdc
-rw-r--r-- 1 0 128M sdd
разбиение файлов
Я создаю 3 раздела (20 МБ, 40 МБ и 56 МБ) для подкачки, / и / home на sda через устройство loop:
# losetup /dev/loop0 sda
# ! echo "n
p
1
+20M
t
fd
n
p
2
+40M
t
2
fd
n
p
3
t
3
fd
w" | fdisk /dev/loop0
Хорошо, смотрите, что случилось:
# fdisk -l /dev/loop0
Disk /dev/loop0: 134 MB, 134217728 bytes
255 heads, 63 sectors/track, 16 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0xe90aaf21
Device Boot Start End Blocks Id System
/dev/loop0p1 1 3 24066 fd Linux raid autodetect
/dev/loop0p2 4 9 48195 fd Linux raid autodetect
/dev/loop0p3 10 16 56227+ fd Linux raid autodetect
Скопируйте эту схему разделов в цикл {1,2,3} ^ = sd {b, c, d}
# losetup /dev/loop1 sdb
# sfdisk -d /dev/loop0 | sfdisk /dev/loop1
# losetup /dev/loop2 sdc
# sfdisk -d /dev/loop0 | sfdisk /dev/loop2
# losetup /dev/loop3 sda
# sfdisk -d /dev/loop0 | sfdisk /dev/loop3
По желанию: Если вы установили parted, запустите partprobe на устройствах, чтобы обновить таблицу ядер.
# partprobe /dev/loop0
# partprobe /dev/loop1
# partprobe /dev/loop2
# partprobe /dev/loop3
Использовать kpartx создать устройства для каждого раздела под /dev/mapper/
aptitude install kpartx dmsetup
# kpartx -av /dev/loop0
add map loop0p1 (254:3): 0 48132 linear /dev/loop0 63
add map loop0p2 (254:4): 0 96390 linear /dev/loop0 48195
add map loop0p3 (254:5): 0 112455 linear /dev/loop0 144585
# kpartx -av /dev/loop1
add map loop1p1 (254:6): 0 48132 linear /dev/loop1 63
add map loop1p2 (254:7): 0 96390 linear /dev/loop1 48195
add map loop1p3 (254:8): 0 112455 linear /dev/loop1 144585
# kpartx -av /dev/loop2
add map loop2p1 (254:9): 0 48132 linear /dev/loop2 63
add map loop2p2 (254:10): 0 96390 linear /dev/loop2 48195
add map loop2p3 (254:11): 0 112455 linear /dev/loop2 144585
# kpartx -av /dev/loop3
add map loop3p1 (254:12): 0 48132 linear /dev/loop3 63
add map loop3p2 (254:13): 0 96390 linear /dev/loop3 48195
add map loop3p3 (254:14): 0 112455 linear /dev/loop3 144585
создайте свой raid5 и смотрите статус
Мы по-прежнему рут! На своей рабочей станции я не использую raid, только LVM, поэтому мне нужно загрузить модуль ядра и установить пакет мдадм.
# modprobe raid5
# aptitude install mdadm
# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
unused devices: <none>
Для этого теста я использую md {10,11,12}. Следите за тем, чтобы они не использовались в вашей системе (это было бы ненормально)!
Используются --force и -x 0, потому что в противном случае mdadm помещает один раздел как запасной:
## the 20MB Partition
# mdadm --create --force -l 5 -n3 -x 0 /dev/md10 /dev/mapper/loop0p1 /dev/mapper/loop1p1 /dev/mapper/loop2p1
mdadm: array /dev/md10 started.
## the 40MB Partition
# mdadm --create --force -l 5 -n3 /dev/md11-x 0 /dev/mapper/loop0p2 /dev/mapper/loop1p2 /dev/mapper/loop2p2
mdadm: array /dev/md11 started.
## the 56MB Partition
# mdadm --create --force -l 5 -n3 /dev/md12-x 0 /dev/mapper/loop0p3 /dev/mapper/loop1p3 /dev/mapper/loop2p3
mdadm: array /dev/md12 started.
Как это выглядит сейчас:
# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md12 : active raid5 dm-11[2] dm-8[1] dm-5[0]
112256 blocks level 5, 64k chunk, algorithm 2 [3/3] [UUU]
md11 : active raid5 dm-10[2] dm-7[1] dm-4[0]
96256 blocks level 5, 64k chunk, algorithm 2 [3/3] [UUU]
md10 : active raid5 dm-9[2] dm-6[1] dm-3[0]
48000 blocks level 5, 64k chunk, algorithm 2 [3/3] [UUU]
unused devices: <none>
Информация
выход не отлично. mdstat показывает только dm-3 .. dm-11
, значит /dev/mapper/loop*
но ls -lsa /dev/disk/by-id
показывает текущее отображение.
Мой вывод на md10 начинается с dm-9 (то есть / dev / mapper / loop0p1) из-за тестов, которые я провел при написании этой статьи, и мой LVM использует dm- {0,1,2}.
Вы также можете использовать mdadm --examine --scan
или более подробную информацию через mdadm -Q --detail /dev/md10 /dev/md11 /dev/md12
От имени root тихо создавать файловые системы и делать свопинг
# mkswap /dev/md10 > /dev/null 2>&1
# mke2fs -m0 -Lroot /dev/md11 -F > /dev/null 2>&1
# mke2fs -m0 -Lhome /dev/md12 -F > /dev/null 2>&1
Установите свои новые raiddevices:
# swapon /dev/md10
# mount /dev/md11 root/
# mount /dev/md12 home/
Взгляните на структуру, и если / dev / md10 является допустимым разделом подкачки:
(моя рабочая станция также использует / dev / mapper / vg00-swap, поэтому приоритет выше)
# \tree
.
|-- home
| `-- lost+found
|-- root
| `-- lost+found
|-- sda
|-- sdb
|-- sdc
`-- sdd
# cat /proc/swaps
Filename Type Size Used Priority
/dev/mapper/vg00-swap partition 9764856 53688 -1
/dev/md10 partition 47992 0 -2
Теперь у вас работает raid5 и вы можете протестировать миграцию.
Думаю, здесь есть отличные ответы - внимательно проверьте их на своей системе!
После завершения тестов выключите MDS и удалите /dev/loop*
# mdadm --stop /dev/md10
# mdadm --stop /dev/md11
# mdadm --stop /dev/md12
# kpartx -dv /dev/loop0
# kpartx -dv /dev/loop1
# kpartx -dv /dev/loop2
# kpartx -dv /dev/loop3
sudo su
cd ~/raidtest
# connecting the files to /dev/loop*
losetup /dev/loop0 sda
losetup /dev/loop1 sdb
losetup /dev/loop2 sdc
losetup /dev/loop3 sdd
# access to the partions in /dev/loop*
kpartx -av /dev/loop0
kpartx -av /dev/loop1
kpartx -av /dev/loop2
kpartx -av /dev/loop3
# start the raid again
mdadm --assemble /dev/md10 /dev/mapper/loop0p1 /dev/mapper/loop1p1 /dev/mapper/loop2p1
mdadm --assemble /dev/md11 /dev/mapper/loop0p2 /dev/mapper/loop1p2 /dev/mapper/loop2p2
mdadm --assemble /dev/md12 /dev/mapper/loop0p3 /dev/mapper/loop1p3 /dev/mapper/loop2p3
# show active raids
cat /proc/mdstat
Ваши тесты прошли нормально?
Хорошо, тогда вам нужно скопировать раздел из /dev/sda
к /dev/sdd
как мы это делали в песочнице с нашими файлами:
sfdisk -d /dev/sda | sfdisk /dev/sdd
Теперь вы можете добавить /dev/sdd
в ваш рейд
Информация
Если это не удается из-за различных поставщиков / моделей жестких дисков, вам придется поиграть с -uS (sectors), -uB (blocks), -uC (cylinders) or -uM (megabytes)
- проконсультируйтесь man sfdisk
!
Некоторые из моих реальных raidcombos, где P-ATA <-> P-ATA, но даже SCSCI <-> P-ATA работают нормально, если только размер новых устройств не равен или больше, чем у других жестких дисков.
Softwareraid настолько гибок!
Если у вас есть /etc/mdadm/mdadm.conf
пожалуйста, посмотрите и обновите его! mdadm может помочь вам отобразить правильный синтаксис:
mdadm --detail --scan
Удачи!
По отдельности эти команды не будут делать то, что вы хотите.
mdadm /dev/md0 -a /dev/sdd1 cat /proc/mdstat; #(you should now have a spare drive in raid5) mdadm /dev/md0 -f /dev/sdc1 cat /proc/mdstat; #(you should now see a rebuild occuring to sdd1)
Проверка фактической команды действительно вызывает перестройку.
Увы, я не верю, что ты можешь делать то, что хочешь прямо сейчас.
В стороне я часто ссылаюсь на linux raid викии поэкспериментируйте с тем, что я там вижу, используя файлы обратной связи.
dd if=/dev/zero of=loopbackfile.0 bs=1024k count=100 losetup /dev/loop0 loopbackfile.0
Это дает вам 100-мегабайтный файл, который доступен как / dev / loop0. Создайте еще пару из них, и вы можете использовать mdadm (например, "mdadm --create / dev / md0 --level = 5 --raid-devices = 3 / dev / loop0 / dev / loop1 / dev / loop2), не влияя на реальные диски или данные.
Заметка Я раньше говорил, что
mdadm /dev/md0 -a /dev/sdd1 mdadm --grow /dev/md0 --raid-disks=4
вырастет ваш массив до raid6. Это неправда. Это просто добавит четвертый диск к вашему массиву, что не поставит вас в положение лучше, чем вы находитесь сейчас.
Рискуя заявить очевидное, разве не следует сделать резервную копию? А лучше два.
Мой опыт восстановления RAID5 показывает, что существует значительная вероятность отказа по какой-либо причине.
Если вас беспокоит состояние sda1 или sdb1, загрузитесь с компакт-диска восстановления и проверьте диски в автономном режиме.
Я не уверен, но я считаю, что с помощью рейда Linux можно будет переключиться с RAID5 на RAID6.
Если это возможно, вы можете добавить запасное устройство и, если возможно, переключить его на RAID6, чтобы четность была восстановлена на новом диске в дополнение к старому. После завершения синхронизации извлеките отказавший диск и снова переключитесь на RAID5.
Я настоятельно рекомендую вам сделать резервную копию, если у вас ее нет. Вопрос, который вам нужно решить, заключается не в том, можете ли вы позволить себе сделать резервную копию, вопрос в том, сможете ли вы позволить себе потерю ваших данных, потерю вашего времени или тысячи, которые вы можете потратить на диск. служба восстановления.