ФЭНДОМ


ЗадачаПравить

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

Перенос PROXMOX на 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

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

Подключение модуля RAIDПравить

modprobe raid1
echo alias md-personality-3 raid1 >> /etc/modprobe.conf

Далее необходимо убедится, что на дисках не осталось суперблоков. Эти блоки являются метками, которые проставляются в конец диска если он являлся частью рейд массива ранее. Часто они не удаляются в процессе форматирования жесткого диска при установке 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 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

настройка загрузочного меню grubПравить

Добавим загрузочный образ initramfs

mkinitramfs -o /boot/initrd.img-`uname -r`-raid1 -r /dev/mapper/pve-root

Заменим файл загрузочного меню и создадим свой, предварительно сохранив оригинальный

cp /boot/grub/menu.lst /boot/grub/menu.lst.orig
echo "default         0" > /boot/grub/menu.lst
echo "timeout         5" >> /boot/grub/menu.lst
echo "title  Proxmox VE on soft-RAID" >> /boot/grub/menu.lst
echo "root   (hd0,0)" >> /boot/grub/menu.lst
echo "kernel /vmlinuz-`uname -r` root=/dev/mapper/pve-root ro" >> /boot/grub/menu.lst
echo "initrd /initrd.img-`uname -r`-raid1" >> /boot/grub/menu.lst

Проверим:

cat /boot/grub/menu.lst

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

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

pvcreate /dev/md1
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

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

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

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

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

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

Осталось обновить загрузчик на обоих дисках. Запускаем

grub

И последовательно вводим:

root (hd0,0)
setup (hd0)
root (hd1,0)
setup (hd1)
quit

Проверить в каком состоянии находится массив можно командой:

cat /proc/mdstat

Замена жесткого дискаПравить

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

Определение неисправного дискаПравить

  • Выясняем какой из жестких дисков "вылетел" из массива
cat /proc/mdstat

видим примерно следующее

md1 : active raid1 sda2[2](F) sdb2[1]
      243665792 blocks [2/1] [_U]
    
md0 : active raid1 sda1[2](F) sdb1[1]
      530048 blocks [2/1] [_U]


[_U] - Означает что в массиве отсутствует диск (рабочий массив выглядит так [UU]) (F) - означает, что диск дал сбой. В примере вылетел из массива и дал сбой диск sda. Всё дальнейшее описание будет описывать ситуацию с заменой диска sda, при этом рабочим остался диск sdb.

  • Необходимо выяснить, какой из дисков нужно физически отключить. В этом поможет информация о серийных номерах. Например смотрим информацию о модели и серийном номере оставшегося рабочего диска sdb:
udevadm info --query=env --name=sdb | grep -E '(ID_SERIAL_SHORT|ID_MODEL)'
ID_SERIAL_SHORT=9QZCNTNH

Смотрим серийники на наклейках жестких дисков. Соответственно диск с серийным номером 9QZCNTNH оставляем в системе, другой отключаем.

Замена неисправного дискаПравить

Выполнять будем горячую замену диска без выключения и перезагрузок сервера.

1. Очистим информацию о диске sda в массивах.

mdadm /dev/md0 --fail /dev/sda1 --remove detached /dev/sda1
mdadm /dev/md1 --fail /dev/sda1 --remove detached /dev/sda1

2. Удаляем диск физически отключив sata шлейф.

3. Подключаем новый жесткий диск (SATA) равного до байта или большего размера на "на горячую".

4. Выполняем сканирование порта, в который подключили жесткий диск.

echo "- - -" >/sys/class/scsi_host/host0/scan

где host0 номер порта.

  • Если нет точной уверенности, в какой именно порт воткнут новый диск, необходимо просканировать все имеющиеся порты. Список портов можно узнать:
ls /sys/class/scsi_host/

5. Смотрим системный журнал, какое имя получил новый жесткий диск в системе:

dmesg | grep "logical blocks"

Ищем последнюю строку, например:

sd 0:0:0:0: [sda] 234439535 512-byte logical blocks: (120 GB/111 GiB)

Значит имя нового диска - sda

  • Если новый диск физически при подключении получил другое имя например sdc, надо отключить его программно выполнив:
echo "1" > /sys/block/sdc/device/delete

После чего убедится что имя старого диска /dev/sda отсутствует в описании массива и если это не так выполним очистку как описано выше выше в пунке 1.

cat /proc/mdstat

Затем выполнить сканирование sata портов.

Активация нового дискаПравить

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

cleandsk=sda # чистый, пустой диск
workdsk=sdb  # Диск, который содержит систему

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

dd if=/dev/$workdsk of=/dev/$cleandsk bs=512 count=34
blockdev --rereadpt /dev/$cleandsk
mdadm --add /dev/md0 /dev/${cleandsk}2
mdadm --add /dev/md1 /dev/${cleandsk}3
  • Устанавливаем загрузчик на новый диск
grub

И последовательно вводим, где 0 это номер диска:

root (hd0,0)
setup (hd0)
quit

Смотрим процесс синхронизации

watch cat /proc/mdstat

Как только процесс завершиться, новый диск станет полноценным участником массива и в случае выхода из строя другого диска, система загрузится с него.

Обнаружено использование расширения AdBlock.


Викия — это свободный ресурс, который существует и развивается за счёт рекламы. Для блокирующих рекламу пользователей мы предоставляем модифицированную версию сайта.

Викия не будет доступна для последующих модификаций. Если вы желаете продолжать работать со страницей, то, пожалуйста, отключите расширение для блокировки рекламы.

Также на ФЭНДОМЕ

Случайная вики