Фэндом

Man вики

Перенос работающей системы на RAID

41статья на
этой вики
Добавить новую страницу
комментария2 Поделиться

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

Произвести перенос рабочей операционной системы на RAID массив любого уровня по следующей схеме:

  • Структура разделов на физических носителях GPT (снимает ограничение в 2 Тб на носитель)
    • 1 раздел для обеспечения поддержки загрузки BIOS компьютера и размещения менеджера загрузки Linux
    • 2. раздел является хранилищем зеркального тома RAID1 и расположен на каждом физическом диске
    • 3. раздел является хранилищем RAID любого уровня внутри которого располагается LVM структура
  • LVM содержит том для данных и для файла подкачки.

Загрузка и обновление компонентовПравить

apt-get update
apt-get install -y mdadm initramfs-tools lvm2 atop htop sysstat smartmontools rsync parted jfsutils

ОпределенияПравить

Проверим список доступных в системе дисков

fdisk -l|grep Диск

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

echo Системный `df -h|grep -Po "/dev/..."`

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

workdsk=sda # Системный
newdsk=sdb  # Новый (дополнительный) диск, на который будем копировать данные

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

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

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

Определяем максимальный размер диска и создаем разделы на нем

sizedsk=`parted /dev/$newdsk print -m | grep "/dev/$newdsk" | awk -F ":" '{print $2}'`
parted /dev/$newdsk mkpart primary 1M 10M
parted /dev/$newdsk set 1 bios_grub on
parted /dev/$newdsk mkpart primary 10М 128M
parted /dev/$newdsk mkpart primary 128M $sizedsk
parted /dev/$newdsk print

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

Создаем массивы в деградированном состоянии на диске sdb:

  • md0 для загрузки (обязательно зеркало -level=1) расположен во 2м разделе GPT
  • md1 массив для данных, может быть любого уровня (в примере 1) расположен в 3м, наибольшем разделе GPT
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

LVMПравить

Создадим структуру разделов в LVM:

  • lv_swap для подкачки в начале диска размером 8 Гб (8192 Мб)
lv_swap=8192
  • Выделим отдельный раздел lv_add для хранения данных, которые могут переполнить диск под, например /var/spool и установим ему размер 70% от размера диска. Это позволит избежать ситуаций с переполнением диска и отказом всей системы.
lv_add_dir=/var/spool
lv_add_size=70%FREE
  • lv_root оставшееся место под корневую систему
pvcreate /dev/md1
vgcreate lv /dev/md1
lvcreate -L$lv_swap lv -n lv_swap
lvcreate -l$lv_add_size lv -n lv_add
lvcreate -l100%FREE lv -n lv_root
vgchange -a y lv

Работа с дополнительным дискомПравить

Форматирование разделов

  • Загрузочный раздел форматируем в ext2, корень системы в ext4, а рабочие данные будут в файловой системе jfs
mkfs.ext2 /dev/md0
mkfs.ext4 /dev/lv/lv_root
mkfs.jfs  /dev/lv/lv_add -ff
mkswap /dev/lv/lv_swap

Создадим точки монтирования созданных разделов и примонтируем их

mkdir /mnt/lv_boot
mkdir /mnt/lv_root
mkdir /mnt/lv_add

mount /dev/md0 /mnt/lv_boot
mount /dev/lv/lv_root /mnt/lv_root
mount /dev/lv/lv_add /mnt/lv_add

Произведем копирование загрузочных файлов и остальных данных исключая служебные каталоги в соответвтующие разделы

rsync -aHEAXh --progress /boot/* /mnt/lv_boot
rsync -aHEAXh --progress / /mnt/lv_root \
--exclude '/boot' \
--exclude '/mnt' \
--exclude '/proc' \
--exclude '/dev' \
--exclude 'lost+found' \
--exclude '/sys' \
--exclude $lv_add_dir
rsync -aHEAXh --progress $lv_add_dir/* /mnt/lv_add

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

mkdir /mnt/lv_root/dev 
mkdir /mnt/lv_root/proc 
mkdir /mnt/lv_root/sys 
mkdir /mnt/lv_root/boot 
mkdir /mnt/lv_root/mnt
mkdir /mnt/lv_root/$lv_add_dir

Войдем в окружение созданой копии системы

mount /dev /mnt/lv_root/dev -o bind
mount /proc /mnt/lv_root/proc -o bind
mount /sys /mnt/lv_root/sys -o bind
echo "export workdsk=$workdsk" > /mnt/lv_root/tmp/wvars
echo "export newdsk=$newdsk">> /mnt/lv_root/tmp/wvars
echo "export lv_add_dir=$lv_add_dir">> /mnt/lv_root/tmp/wvars

Переходим в окружение скопированной системыПравить

chroot /mnt/lv_root /bin/bash

Восстанавливаем переменные

`cat < /tmp/wvars`

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

echo "" > /etc/fstab
echo  "proc            /proc           proc    nodev,noexec,nosuid     0       0" >> /etc/fstab
echo  "/dev/md0        /boot           ext2    defaults                0       2" >> /etc/fstab
echo  "/dev/lv/lv_swap none            swap    sw                      0       0" >> /etc/fstab
echo  "/dev/lv/lv_root  /              ext4    errors=remount-ro       0       1" >> /etc/fstab
echo  "/dev/lv/lv_add $lv_add_dir      jfs     errors=remount-ro       0       1" >> /etc/fstab

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

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

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

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

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

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

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

grub-install --recheck /dev/$newdsk
update-grub

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

Очищаем таблицу разделов на исходном диске. Все данные на нем будут уничтожены! Все изменения в файлах произошедшие со времени начала копирования данных с него на второй диск будут потеряны.

dd if=/dev/zero of=/dev/$workdsk bs=512 count=1

Перезагружаем систему.

reboot

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

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

  • Далее все действия идентичны как для первичного добавления диска, так и для замены вышедшего из строя

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

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

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

cat /proc/mdstat|grep md0|grep -Po "raid1 ..."

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

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}2
mdadm --add /dev/md1 /dev/${cleandsk}3

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

grub-install /dev/$cleandsk

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

watch cat /proc/mdstat

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


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

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

Также на Фэндоме

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