Man вики
Метки: apiedit, Визуальный редактор
Метки: apiedit, Визуальный редактор
Строка 110: Строка 110:
 
/dev/pve/swap none swap sw 0 0
 
/dev/pve/swap none swap sw 0 0
 
proc /proc proc defaults 0 0
 
proc /proc proc defaults 0 0
Перемонтируем загрузочный раздел
+
Премонтируем загрузочный раздел с raid тома
umount /boot
 
 
mount /boot
 
mount /boot
 
Разрешим системе автоматически запускаться, если один из дисков вышел из строя или отсутствует (по умолчанию при загрузке будет выдаваться запрос на разрешение запуска)
 
Разрешим системе автоматически запускаться, если один из дисков вышел из строя или отсутствует (по умолчанию при загрузке будет выдаваться запрос на разрешение запуска)

Версия 00:25, 10 февраля 2016

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

Задача

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

Перенос PROXMOX4.x на RAID1 (Зеркало)

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

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

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

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

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

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

dmesg | egrep 'logical blocks|Direct-Access'

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

pvs

Видим нечто подобное:

 PV         VG   Fmt  Attr PSize  PFree
 /dev/sda3  pve  lvm2 a--  31.87g 3.87g
  • Если раздел lvm том pve находится не на /dev/sda3, необходимо отключить компьютер и поменять местами sata кабеля подключенные к жестким дискам.

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

Определение размеров дисков (системного и нового)

Задаем диски, который будем готовить под RAID

workdsk=sda # Системный
newdsk=sdb  # Новый (дополнительный) диск, на который будем копировать данные
sizedsk_work=`parted /dev/$workdsk print -m | grep "/dev/$workdsk" | awk -F ":" '{print $2}'`
sizedsk_new=`parted /dev/$newdsk print -m | grep "/dev/$newdsk" | awk -F ":" '{print $2}'`
echo ""
echo "Активный системный:" $sizedsk_work ", Новый пустой:" $sizedsk_new

Создание разметки под RAID

Очищаем таблицу разделов на указанном жестком диске и размечаем диск в GPT.

dd if=/dev/zero of=/dev/$newdsk bs=512 count=1
parted /dev/$newdsk mklabel gpt

Создаем на новом диске разделы таким образом, чтобы в сумме они не превысили размер исходного (системного) диска.

parted /dev/$newdsk mkpart primary 1M 10M
parted /dev/$newdsk set 1 bios_grub on
parted /dev/$newdsk mkpart primary 10М 1G
parted /dev/$newdsk mkpart primary 1G $sizedsk_work
parted /dev/$newdsk print


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

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

  • Проверяем, нет ли суперблоков
mdadm --misc --examine /dev/sda
mdadm --misc --examine /dev/sdb
mdadm --misc --examine /dev/sdb1
mdadm --misc --examine /dev/sdb2

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

mdadm: No md superblock detected on /dev/sdb

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

Настройка параметров 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 user@mail.domain

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

mdadm --create /dev/md0 --metadata=0.90 --level=1 --raid-devices=2 missing /dev/${newdsk}2
mdadm --create /dev/md1 --metadata=0.90 --level=1 --raid-devices=2 missing /dev/${newdsk}3

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

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/${workdsk}3 /dev/md1

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

vgreduce pve /dev/${workdsk}3

Перенос загрузочных файлов на 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 / ext4 errors=remount-ro 0 1
/dev/pve/data /var/lib/vz ext4 defaults 0 1
/dev/md0 /boot ext3 defaults 0 1
/dev/pve/swap none swap sw 0 0
proc /proc proc defaults 0 0

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

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