м (Правки 212.19.4.103 (обсуждение) откачены к версии Siv237) |
Нет описания правки Метки: Визуальный редактор apiedit |
||
(не показано 5 промежуточных версий 4 участников) | |||
Строка 10: | Строка 10: | ||
apt-get update |
apt-get update |
||
apt-get install -y mdadm initramfs-tools lvm2 atop htop sysstat smartmontools rsync parted jfsutils |
apt-get install -y mdadm initramfs-tools lvm2 atop htop sysstat smartmontools rsync parted jfsutils |
||
+ | |||
+ | =Определения= |
||
+ | Проверим список доступных в системе дисков |
||
+ | fdisk -l|grep Диск |
||
+ | Уточним, какой диск является рабочим, то-есть диск, с которого загрузилась система |
||
+ | echo Системный `df -h|grep -Po "/dev/..."` |
||
⚫ | |||
+ | workdsk='''sda''' # Системный |
||
+ | newdsk='''sdb''' # Новый (дополнительный) диск, на который будем копировать данные |
||
=Создание разметки под RAID= |
=Создание разметки под RAID= |
||
⚫ | |||
⚫ | |||
Очищаем таблицу разделов на указанном жестком диске и размечаем диск в GPT. |
Очищаем таблицу разделов на указанном жестком диске и размечаем диск в GPT. |
||
dd if=/dev/zero of=/dev/$newdsk bs=512 count=1 |
dd if=/dev/zero of=/dev/$newdsk bs=512 count=1 |
||
Строка 29: | Строка 36: | ||
* '''md0''' для загрузки (обязательно зеркало -level=1) расположен во 2м разделе GPT |
* '''md0''' для загрузки (обязательно зеркало -level=1) расположен во 2м разделе GPT |
||
* '''md1''' массив для данных, может быть любого уровня (в примере 1) расположен в 3м, наибольшем разделе GPT |
* '''md1''' массив для данных, может быть любого уровня (в примере 1) расположен в 3м, наибольшем разделе GPT |
||
− | mdadm --create /dev/md0 --metadata=0.90 --level=1 --raid-devices='''2''' missing /dev/ |
+ | 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/ |
+ | mdadm --create /dev/md1 --metadata=0.90 --level='''1''' --raid-devices='''2''' missing /dev/${newdsk}3 |
Сохраним параметры массива в конфигурационном файле: |
Сохраним параметры массива в конфигурационном файле: |
||
mdadm --detail --scan >> /etc/mdadm/mdadm.conf |
mdadm --detail --scan >> /etc/mdadm/mdadm.conf |
||
Строка 36: | Строка 43: | ||
=LVM= |
=LVM= |
||
Создадим структуру разделов в LVM: |
Создадим структуру разделов в LVM: |
||
− | * lv_swap для подкачки в начале диска размером 8 Гб |
+ | * lv_swap для подкачки в начале диска размером 8 Гб (8192 Мб) |
⚫ | |||
− | * lv_cache под /var/cache |
||
+ | * Выделим отдельный раздел lv_add для хранения данных, которые могут переполнить диск под, например /var/spool и установим ему размер 70% от размера диска. Это позволит избежать ситуаций с переполнением диска и отказом всей системы. |
||
+ | lv_add_dir='''/var/spool''' |
||
+ | lv_add_size='''70%FREE''' |
||
* lv_root оставшееся место под корневую систему |
* lv_root оставшееся место под корневую систему |
||
− | |||
pvcreate /dev/md1 |
pvcreate /dev/md1 |
||
vgcreate lv /dev/md1 |
vgcreate lv /dev/md1 |
||
− | lvcreate -L |
+ | lvcreate -L$lv_swap lv -n lv_swap |
− | lvcreate -l |
+ | lvcreate -l$lv_add_size lv -n lv_add |
− | lvcreate - |
+ | lvcreate -l100%FREE lv -n lv_root |
vgchange -a y lv |
vgchange -a y lv |
||
=Работа с дополнительным диском= |
=Работа с дополнительным диском= |
||
Форматирование разделов |
Форматирование разделов |
||
− | * Загрузочный раздел форматируем в ext2, корень системы в ext4, а данные |
+ | * Загрузочный раздел форматируем в ext2, корень системы в ext4, а рабочие данные будут в файловой системе jfs |
mkfs.'''ext2''' /dev/md0 |
mkfs.'''ext2''' /dev/md0 |
||
mkfs.'''ext4''' /dev/lv/lv_root |
mkfs.'''ext4''' /dev/lv/lv_root |
||
− | mkfs.'''jfs''' /dev/lv/ |
+ | mkfs.'''jfs''' /dev/lv/lv_add -ff |
mkswap /dev/lv/lv_swap |
mkswap /dev/lv/lv_swap |
||
Создадим точки монтирования созданных разделов и примонтируем их |
Создадим точки монтирования созданных разделов и примонтируем их |
||
mkdir /mnt/lv_boot |
mkdir /mnt/lv_boot |
||
mkdir /mnt/lv_root |
mkdir /mnt/lv_root |
||
− | mkdir /mnt/ |
+ | mkdir /mnt/lv_add |
mount /dev/md0 /mnt/lv_boot |
mount /dev/md0 /mnt/lv_boot |
||
mount /dev/lv/lv_root /mnt/lv_root |
mount /dev/lv/lv_root /mnt/lv_root |
||
− | mount /dev/lv/ |
+ | mount /dev/lv/lv_add /mnt/lv_add |
Произведем копирование загрузочных файлов и остальных данных исключая служебные каталоги в соответвтующие разделы |
Произведем копирование загрузочных файлов и остальных данных исключая служебные каталоги в соответвтующие разделы |
||
Строка 73: | Строка 82: | ||
--exclude 'lost+found' \ |
--exclude 'lost+found' \ |
||
--exclude '/sys' \ |
--exclude '/sys' \ |
||
− | --exclude |
+ | --exclude $lv_add_dir |
− | rsync -aHEAXh --progress |
+ | rsync -aHEAXh --progress $lv_add_dir/* /mnt/lv_add |
Создадим новые служебные каталоги и назначим на них права |
Создадим новые служебные каталоги и назначим на них права |
||
mkdir /mnt/lv_root/dev |
mkdir /mnt/lv_root/dev |
||
Строка 82: | Строка 91: | ||
mkdir /mnt/lv_root/boot |
mkdir /mnt/lv_root/boot |
||
mkdir /mnt/lv_root/mnt |
mkdir /mnt/lv_root/mnt |
||
− | mkdir /mnt/lv_root/ |
+ | mkdir /mnt/lv_root/$lv_add_dir |
Войдем в окружение созданой копии системы |
Войдем в окружение созданой копии системы |
||
Строка 88: | Строка 97: | ||
mount /proc /mnt/lv_root/proc -o bind |
mount /proc /mnt/lv_root/proc -o bind |
||
mount /sys /mnt/lv_root/sys -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 |
chroot /mnt/lv_root /bin/bash |
||
+ | Восстанавливаем переменные |
||
+ | `cat < /tmp/wvars` |
||
Создадим файл монтирования файловых систем при загрузке |
Создадим файл монтирования файловых систем при загрузке |
||
echo "" > /etc/fstab |
echo "" > /etc/fstab |
||
⚫ | |||
− | nano /etc/fstab |
||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
Разрешим системе автоматически запускаться, если один из дисков вышел из строя или отсутствует (по умолчанию при загрузке будет выдаваться запрос на разрешение запуска) |
Разрешим системе автоматически запускаться, если один из дисков вышел из строя или отсутствует (по умолчанию при загрузке будет выдаваться запрос на разрешение запуска) |
||
echo "BOOT_DEGRADED=true" > /etc/initramfs-tools/conf.d/mdadm |
echo "BOOT_DEGRADED=true" > /etc/initramfs-tools/conf.d/mdadm |
||
Строка 104: | Строка 118: | ||
mkinitramfs -o /boot/initrd.img-`uname -r` |
mkinitramfs -o /boot/initrd.img-`uname -r` |
||
Отключим графический режим загрузчика из-за которого система может не загружаться с рейда. |
Отключим графический режим загрузчика из-за которого система может не загружаться с рейда. |
||
− | + | echo "GRUB_TERMINAL=console" >> /etc/default/grub |
|
− | Раскоментировать строку: |
||
− | GRUB terminal=console |
||
Выполним запись в загрузочный сектор второго жесткого диска и обновление параметров загрузчика |
Выполним запись в загрузочный сектор второго жесткого диска и обновление параметров загрузчика |
||
− | grub-install --recheck /dev/ |
+ | grub-install --recheck /dev/$newdsk |
update-grub |
update-grub |
||
Строка 114: | Строка 126: | ||
Очищаем таблицу разделов на исходном диске. '''Все данные на нем будут уничтожены!''' Все изменения в файлах произошедшие со времени начала копирования данных с него на второй диск будут потеряны. |
Очищаем таблицу разделов на исходном диске. '''Все данные на нем будут уничтожены!''' Все изменения в файлах произошедшие со времени начала копирования данных с него на второй диск будут потеряны. |
||
− | dd if=/dev/zero of=/dev/ |
+ | dd if=/dev/zero of=/dev/$workdsk bs=512 count=1 |
Перезагружаем систему. |
Перезагружаем систему. |
||
reboot |
reboot |
||
Строка 122: | Строка 134: | ||
=Подключение или замена диска в RAID= |
=Подключение или замена диска в RAID= |
||
* ''Далее все действия идентичны как для первичного добавления диска, так и для замены вышедшего из строя'' |
* ''Далее все действия идентичны как для первичного добавления диска, так и для замены вышедшего из строя'' |
||
+ | Проверим список дисков в системе |
||
⚫ | |||
− | + | fdisk -l 2>/dev/null|grep -s Диск|grep -s -Pv "md|lv" |
|
⚫ | |||
− | Наш диск не будет содержать разделов. Выглядит это так: |
||
+ | cat /proc/mdstat|grep md0|grep -Po "raid1 ..." |
||
− | Error: /dev/sda: unrecognised disk label ('''так выглядит очищенный''') |
||
− | Disk /dev/sdb: 10,7GB |
||
Чтобы не ошибиться в дальнейших действиях и не испортить данные создадим переменные с именами дисков. |
Чтобы не ошибиться в дальнейших действиях и не испортить данные создадим переменные с именами дисков. |
||
+ | workdsk='''sdb''' # Диск, который подключен к массиву и содержит систему |
||
− | cleandsk='''sda''' # чистый, пустой диск |
||
− | + | cleandsk='''sda''' # чистый (пустой) диск, который будет добавлен |
|
Произведем копирование структуры разделов с рабочего на чистый диск и подключим его к массиву |
Произведем копирование структуры разделов с рабочего на чистый диск и подключим его к массиву |
||
dd if=/dev/$workdsk of=/dev/$cleandsk bs=512 count=34 |
dd if=/dev/$workdsk of=/dev/$cleandsk bs=512 count=34 |
Текущая версия от 23:25, 9 февраля 2016
Задача[]
Произвести перенос рабочей операционной системы на 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