Man вики
(Новая страница: «=Задача= * Необходимо создать надежную отказоустойчивую дисковую систему. При выходе из ст...»)
 
Метки: Визуальный редактор apiedit
 
(не показано 19 промежуточных версий 5 участников)
Строка 1: Строка 1:
  +
'''<u>Актуально до версии Proxmox 3.1 включительно!</u>'''
  +
*[[RAID Proxmox 4.X]]
  +
 
=Задача=
 
=Задача=
 
* Необходимо создать надежную отказоустойчивую дисковую систему. При выходе из строя любого жесткого диска, система должна продолжить работу
 
* Необходимо создать надежную отказоустойчивую дисковую систему. При выходе из строя любого жесткого диска, система должна продолжить работу
Строка 21: Строка 24:
 
Мы должны увидить нечто подобное:
 
Мы должны увидить нечто подобное:
   
<code>'''/dev/sda1 504M 34M 445M 8% /boot'''</code>
+
<code>'''/dev/sda1 504M 34M 445M 8% /boot'''</code>
   
 
Если раздел boot находится не на /dev/sda1, необходимо отключить компьютер и поменять местами sata кабеля подключенные к жестким дискам.
 
Если раздел boot находится не на /dev/sda1, необходимо отключить компьютер и поменять местами sata кабеля подключенные к жестким дискам.
Строка 27: Строка 30:
 
Скопируем структуру разделов с первого диска на второй
 
Скопируем структуру разделов с первого диска на второй
 
sfdisk -d /dev/sda | sfdisk /dev/sdb --force
 
sfdisk -d /dev/sda | sfdisk /dev/sdb --force
Сменим тип разделов на fd (Linux raid autodetect)
+
Сменим тип разделов на fd (Linux raid autodetect)
 
sfdisk -c /dev/sdb 1 fd --force
 
sfdisk -c /dev/sdb 1 fd --force
 
sfdisk -c /dev/sdb 2 fd --force
 
sfdisk -c /dev/sdb 2 fd --force
Строка 41: Строка 44:
   
 
Далее необходимо убедится, что на дисках не осталось суперблоков. Эти блоки являются метками, которые проставляются в конец диска если он являлся частью рейд массива ранее. Часто они не удаляются в процессе форматирования жесткого диска при установке PROXMOX и их нужно затереть вручную!
 
Далее необходимо убедится, что на дисках не осталось суперблоков. Эти блоки являются метками, которые проставляются в конец диска если он являлся частью рейд массива ранее. Часто они не удаляются в процессе форматирования жесткого диска при установке PROXMOX и их нужно затереть вручную!
  +
* Проверяем, нет ли суперблоков
+
Проверяем, нет ли суперблоков
 
mdadm --misc --examine /dev/sda
 
mdadm --misc --examine /dev/sda
 
mdadm --misc --examine /dev/sdb
 
mdadm --misc --examine /dev/sdb
  +
  +
При разбитии диска sda(sdb) создаются разделы границы которых отмеченные суперблоками их не трогаем, увидим похожее на это:
  +
MBR Magic : aa55
  +
Partition[0] : 1046528 sectors at 2048 (type 83)
  +
Partition[1] : 975724544 sectors at 1048576 (type 8e)
  +
Проверяем, нет ли суперблоков в разделах
 
mdadm --misc --examine /dev/sdb1
 
mdadm --misc --examine /dev/sdb1
 
mdadm --misc --examine /dev/sdb2
 
mdadm --misc --examine /dev/sdb2
 
Если все в порядке и суперблоков нет, то увидим нечто подобное:
 
Если все в порядке и суперблоков нет, то увидим нечто подобное:
mdadm: No md superblock detected on /dev/sdb
+
mdadm: No md superblock detected on /dev/sdb1
 
Если есть, то перед продолжением настройки их необходимо удалить! [[Удаление суперблоков]]
 
Если есть, то перед продолжением настройки их необходимо удалить! [[Удаление суперблоков]]
   
Строка 64: Строка 74:
 
==Предварительная настройка RAID в режиме деградации==
 
==Предварительная настройка RAID в режиме деградации==
 
mdadm --create /dev/md0 --level=1 --raid-devices=2 missing /dev/sdb1
 
mdadm --create /dev/md0 --level=1 --raid-devices=2 missing /dev/sdb1
  +
выполняем раздельно
 
mdadm --create /dev/md1 --level=1 --raid-devices=2 missing /dev/sdb2
 
mdadm --create /dev/md1 --level=1 --raid-devices=2 missing /dev/sdb2
 
Если все впорядке и массивы создались, сохраним параметры массива в конфигурационном файле:
 
Если все впорядке и массивы создались, сохраним параметры массива в конфигурационном файле:
Строка 104: Строка 115:
 
Настроим загрузку
 
Настроим загрузку
 
mkinitramfs -o /boot/initrd.img-`uname -r`
 
mkinitramfs -o /boot/initrd.img-`uname -r`
  +
Отключим графический режим загрузчика из-за которого система может не загружаться с рейда.
  +
echo "GRUB_TERMINAL=console" >> /etc/default/grub
   
 
==Подключаем первый (исходный) диск в RAID==
 
==Подключаем первый (исходный) диск в RAID==
Строка 115: Строка 128:
 
grub-install --recheck /dev/sdb
 
grub-install --recheck /dev/sdb
 
update-grub
 
update-grub
  +
Контролируем процесс синхронизации массива
  +
watch cat /proc/mdstat
  +
  +
=Замена вышедшего из строя диска в RAID=
  +
Проверим список дисков в системе
  +
fdisk -l 2>/dev/null|grep -s -E "Диск /|Disk /"|grep -s -Pv "md|lv|dm"
  +
Если диск был подключен на горячую и не увидился в системе, необходимо пересканировать порт в который его подключили.
  +
''Если не известно, в какой конкретно порт подключен носитель, то можно пересканировать все.''
  +
*Список имеющихся портов
  +
ls /sys/class/scsi_host/
  +
*Пример пересканирования порта '''host3'''
  +
echo "- - -" > /sys/class/scsi_host/'''host3'''/scan
  +
* Если новый диск физически при подключении получил другое имя например '''sdc''', надо отключить его программно выполнив:
  +
echo "1" > /sys/block/'''sdc'''/device/delete
  +
  +
а затем повторить процедуру переопроса порта
  +
  +
Диск который будет добавляться в массив, на данном этапе не должен быть быть членом рейда. Проверим, какой диск остался жив в рейде:
  +
cat /proc/mdstat
  +
Чтобы не ошибиться в дальнейших действиях и не испортить данные создадим переменные с именами дисков.
  +
workdsk='''sdb''' # Диск, который подключен к массиву и содержит систему
  +
cleandsk='''sda''' # чистый (пустой) диск, который будет добавлен
  +
Произведем копирование структуры разделов с рабочего на чистый диск и подключим его к массиву
  +
dd if=/dev/$workdsk of=/dev/$cleandsk bs=512 count=34
  +
blockdev --rereadpt /dev/$cleandsk
  +
mdadm --add /dev/md0 /dev/${cleandsk}1
  +
mdadm --add /dev/md1 /dev/${cleandsk}2
  +
Установим загрузчик на добавленный диск
  +
grub-install /dev/$cleandsk
  +
На этом действия по переносу системы на рейд массив завершены, осталось дождаться окончания синхронизации массива. Контролировать процесс можно с помощью команды:
  +
watch cat /proc/mdstat

Текущая версия от 11:23, 7 июня 2017

Актуально до версии Proxmox 3.1 включительно!

Задача[]

  • Необходимо создать надежную отказоустойчивую дисковую систему. При выходе из строя любого жесткого диска, система должна продолжить работу
  • Перенос на RAID должен происходить без прерывания работы системы и без потери данных
  • Необходимо использовать средства, не требующие привязки к оборудованию, т.е. без использования как встроенных так и внешних RAID контроллеров
  • Необходимо обеспечить систему надежными средствами уведомления о сбоях дисков для оперативной замены
  • Замена жестких дисков должна производиться без прерывания работы в "горячем" режиме.

Перенос PROXMOX2 на RAID1 (Зеркало)[]

Принцип работы[]

  • Добавляем в систему жесткий диск идентичный по размеру (до сектора) в идеале той-же модели, что и исходный
  • Создаем на нем 2 раздела (под загрузку и под данные)
  • Создаем 2 зеркальных рейд массива в degrade (разрушенном) состоянии (это когда массив который должен состоять из 2-х дисков, а состоит всего из одного.
  • Переносим всё (загрузочный раздел и раздел с данными) с первого диска на рейд массивы второго диска
  • Уничтожаем данные и структуру разделов на первом диске и подключаем его в качестве не хватающего диска в уже созданный рейд массив
  • Делаем оба диска загрузочными

Создание новой структуры разделов на втором диске[]

Посмотрим список обнаруженных в системе физических дисков:

dmesg | egrep 'logical blocks|Direct-Access'

Убедимся, что система загружается с первого жесткого диска /dev/sda

df -h | grep '/boot'

Мы должны увидить нечто подобное:

/dev/sda1 504M 34M 445M 8% /boot

Если раздел boot находится не на /dev/sda1, необходимо отключить компьютер и поменять местами sata кабеля подключенные к жестким дискам.

Скопируем структуру разделов с первого диска на второй

sfdisk -d /dev/sda | sfdisk /dev/sdb --force

Сменим тип разделов на fd (Linux raid autodetect)

sfdisk -c /dev/sdb 1 fd --force
sfdisk -c /dev/sdb 2 fd --force

Проверим список разделов

sfdisk -l /dev/sdb

Загрузка и установка компонентов[]

  • mdadm - менеджер программного RAID для Linix
  • initramfs -временная файловая система, использующаяся ядром при начальной загрузке
apt-get update
apt-get install -y mdadm initramfs-tools

Все параметры по умолчанию

Далее необходимо убедится, что на дисках не осталось суперблоков. Эти блоки являются метками, которые проставляются в конец диска если он являлся частью рейд массива ранее. Часто они не удаляются в процессе форматирования жесткого диска при установке PROXMOX и их нужно затереть вручную!

Проверяем, нет ли суперблоков

mdadm --misc --examine /dev/sda
mdadm --misc --examine /dev/sdb

При разбитии диска sda(sdb) создаются разделы границы которых отмеченные суперблоками их не трогаем, увидим похожее на это:

 MBR Magic : aa55
Partition[0] :      1046528 sectors at         2048 (type 83)
Partition[1] :    975724544 sectors at      1048576 (type 8e)

Проверяем, нет ли суперблоков в разделах

mdadm --misc --examine /dev/sdb1
mdadm --misc --examine /dev/sdb2

Если все в порядке и суперблоков нет, то увидим нечто подобное:

mdadm: No md superblock detected on /dev/sdb1

Если есть, то перед продолжением настройки их необходимо удалить! Удаление суперблоков

Настройка параметров mdadm[]

Создадим файл настроек, предварительно сохранив оригинальный

cp /etc/mdadm/mdadm.conf /etc/mdadm/mdadm.conf.orig
echo "" > /etc/mdadm/mdadm.conf
nano /etc/mdadm/mdadm.conf
# Автоматическое назначение прав на новые массивы
CREATE owner=root group=disk mode=0660 auto=yes

# Почтовый адрес для уведомлений о событиях  происходящих с массивом
MAILADDR it.khabarovsk@dns-shop.ru

Предварительная настройка RAID в режиме деградации[]

mdadm --create /dev/md0 --level=1 --raid-devices=2 missing /dev/sdb1

выполняем раздельно

mdadm --create /dev/md1 --level=1 --raid-devices=2 missing /dev/sdb2

Если все впорядке и массивы создались, сохраним параметры массива в конфигурационном файле:

mdadm --detail --scan >> /etc/mdadm/mdadm.conf

Проверим, что информация о наших массивах записалась в файл параметров

cat /etc/mdadm/mdadm.conf

Перенос данных из LVM на второй диск[]

Создаем LVM-раздел на втором диске и добавляем его в группу pve

pvcreate /dev/md1 -ff
vgextend pve /dev/md1

Переместим данные с LVM-раздела первого диска, на RAID-LVM-раздел второго диска. Процедура может продолжаться очень долго. Время зависит от объема и скорости жестких дисков.

pvmove /dev/sda2 /dev/md1

Убираем из LVM первый диск

vgreduce pve /dev/sda2

Перенос загрузочных файлов на RAID[]

Подготовим загрузочный RAID-раздел второго диска и скопируем на него все файлы из папки /boot первого диска

mkfs.ext3 /dev/md0
mkdir /mnt/md0
mount /dev/md0 /mnt/md0
cp -ax /boot/* /mnt/md0
umount /mnt/md0
rmdir /mnt/md0

Настроим параметры подключения системных дисков с учетом загрузки с raid. Пересоздадим конфигурационный файл fstab предварительно сохранив оригинальный.

cp /etc/fstab /etc/fstab.orig
echo "" > /etc/fstab
nano /etc/fstab
/dev/pve/root / ext3 errors=remount-ro 0 1
/dev/pve/data /var/lib/vz ext3 defaults 0 1
/dev/md0 /boot ext3 defaults 0 1
/dev/pve/swap none swap sw 0 0
proc /proc proc defaults 0 0

Перемонтируем загрузочный раздел

umount /boot
mount /boot

Разрешим системе автоматически запускаться, если один из дисков вышел из строя или отсутствует (по умолчанию при загрузке будет выдаваться запрос на разрешение запуска)

echo "BOOT_DEGRADED=true" > /etc/initramfs-tools/conf.d/mdadm

Настроим загрузку

mkinitramfs -o /boot/initrd.img-`uname -r`

Отключим графический режим загрузчика из-за которого система может не загружаться с рейда.

echo "GRUB_TERMINAL=console" >> /etc/default/grub

Подключаем первый (исходный) диск в RAID[]

Копируем структуру разделов со второго диска на первый

sfdisk -d /dev/sdb | sfdisk /dev/sda --force

Добавим разделы первого диска в RAID

mdadm --add /dev/md0 /dev/sda1
mdadm --add /dev/md1 /dev/sda2

Переустановим загрузчики на каждый носитель

grub-install --recheck /dev/sda
grub-install --recheck /dev/sdb
update-grub

Контролируем процесс синхронизации массива

watch cat /proc/mdstat

Замена вышедшего из строя диска в RAID[]

Проверим список дисков в системе

fdisk -l 2>/dev/null|grep -s -E "Диск /|Disk /"|grep -s -Pv "md|lv|dm"

Если диск был подключен на горячую и не увидился в системе, необходимо пересканировать порт в который его подключили.

Если не известно, в какой конкретно порт подключен носитель, то можно пересканировать все.
  • Список имеющихся портов
ls /sys/class/scsi_host/
  • Пример пересканирования порта host3
echo "- - -" > /sys/class/scsi_host/host3/scan
  • Если новый диск физически при подключении получил другое имя например sdc, надо отключить его программно выполнив:
echo "1" > /sys/block/sdc/device/delete

а затем повторить процедуру переопроса порта

Диск который будет добавляться в массив, на данном этапе не должен быть быть членом рейда. Проверим, какой диск остался жив в рейде:

cat /proc/mdstat

Чтобы не ошибиться в дальнейших действиях и не испортить данные создадим переменные с именами дисков.

workdsk=sdb  # Диск, который подключен к массиву и содержит систему
cleandsk=sda # чистый (пустой) диск, который будет добавлен

Произведем копирование структуры разделов с рабочего на чистый диск и подключим его к массиву

dd if=/dev/$workdsk of=/dev/$cleandsk bs=512 count=34
blockdev --rereadpt /dev/$cleandsk
mdadm --add /dev/md0 /dev/${cleandsk}1
mdadm --add /dev/md1 /dev/${cleandsk}2

Установим загрузчик на добавленный диск

grub-install /dev/$cleandsk

На этом действия по переносу системы на рейд массив завершены, осталось дождаться окончания синхронизации массива. Контролировать процесс можно с помощью команды:

watch cat /proc/mdstat