Нет описания правки |
Нет описания правки |
||
Строка 1: | Строка 1: | ||
− | =Задача= |
||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
=Сценарии= |
=Сценарии= |
||
==Увеличение надежности за счет добавления второго диска== |
==Увеличение надежности за счет добавления второго диска== |
||
Строка 24: | Строка 17: | ||
# Перенести на этот массив систему сделав каждый диск загрузочным |
# Перенести на этот массив систему сделав каждый диск загрузочным |
||
# Убрать исходный диск |
# Убрать исходный диск |
||
+ | =Структурное описание= |
||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
=Первый сценарий= |
=Первый сценарий= |
||
Описание выполнения переноса системы на raid1 в соответствии с первым сценарием. Все блоки команд вводятся как есть, копировать -> вставить. Изменять нужно только выделенные '''жирным''' значения. |
Описание выполнения переноса системы на raid1 в соответствии с первым сценарием. Все блоки команд вводятся как есть, копировать -> вставить. Изменять нужно только выделенные '''жирным''' значения. |
Версия от 02:28, 25 августа 2012
Сценарии
Увеличение надежности за счет добавления второго диска
Предположим, что у нас имеется сервер на базе OS Ubuntu server или Debian 6 установленный и работающий на одном физическом жестком диске. Мы хотим защитить дисковую систему этого сервера на случай отказа жесткого диска. Для этого нужно:
- Добавить физический диск равного (до байта) или меньшего размера чем исходный, но не меньше, чем объём имеющихся данных.
- Создать рейд массив первого уровня (зеркальный) в который включить только один (новый) диск
- Произвести копирование всех данных на него и сделать его загрузочным
- Проверить, что все работает с нового диска и если да то
- Очистить исходный (старый) диск и присоединить его к зеркальному массиву.
Перенос системы на одиночный диск большей ёмкости
- Добавляем новый диск большего размера чем исходный
- Переносим данные и делаем загрузочным
- Отключаем исходный диск
При желании в любой момент можно добавить второй диск аналогичный по размеру новому диску и защитить данные при помощи зеркала.
Увеличение объема и скорости
- Добавить к системе несколько идентичных дисков и объединить их в массив 1,5 или 10 го уровня
- Перенести на этот массив систему сделав каждый диск загрузочным
- Убрать исходный диск
Структурное описание
Произвести перенос рабочей операционной системы на RAID массив по следующей схеме:
- Структура разделов на физических носителях GPT (снимает ограничение в 2 Тб на носитель)
- 1 раздел для обеспечения поддержки загрузки BIOS компьютера и размещения менеджера загрузки Linux
- 2. раздел является хранилищем зеркального тома RAID1 и расположен на каждом физическом диске
- 3. раздел является хранилищем RAID любого уровня внутри которого располагается LVM структура
- LVM содержит том для данных и для файла подкачки.
Первый сценарий
Описание выполнения переноса системы на raid1 в соответствии с первым сценарием. Все блоки команд вводятся как есть, копировать -> вставить. Изменять нужно только выделенные жирным значения.
Загрузка и обновление компонентов
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 в режиме деградации
Создаем массивы в деградированном состоянии на новом диске:
- 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% от размера диска. Это позволит избежать ситуаций с переполнением диска и отказом всей системы. Кроме того, данный раздел будет отформатирован в высоконадежную систему jfs оптимизированную для хранения огромного числа мелких файлов.
lv_add_dir=/var/spool lv_add_size=70
- 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