Man вики
м (Правки 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/..."`
 
Задаем диски, который будем готовить под RAID
  +
workdsk='''sda''' # Системный
  +
newdsk='''sdb''' # Новый (дополнительный) диск, на который будем копировать данные
   
 
=Создание разметки под RAID=
 
=Создание разметки под RAID=
Задаем диск, который будем готовить под RAID
 
newdsk='''sdb'''
 
 
Очищаем таблицу разделов на указанном жестком диске и размечаем диск в 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/'''sdb'''2
+
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/'''sdb'''3
+
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_swap='''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'''1024''' lv -n lv_swap # 1024 Mb под раздел подкачки
+
lvcreate -L$lv_swap lv -n lv_swap
lvcreate -l'''10%'''FREE lv -n lv_cache # 10% под кеш
+
lvcreate -l$lv_add_size lv -n lv_add
lvcreate -l'''100%'''FREE lv -n lv_root # Оставшееся место под корень
+
lvcreate -l100%FREE lv -n lv_root
 
vgchange -a y lv
 
vgchange -a y lv
   
 
=Работа с дополнительным диском=
 
=Работа с дополнительным диском=
 
Форматирование разделов
 
Форматирование разделов
* Загрузочный раздел форматируем в ext2, корень системы в ext4, а данные в кеше будет в файловой системе jfs
+
* Загрузочный раздел форматируем в 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/lv_cache -ff
+
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/lv_cache
+
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/lv_cache /mnt/lv_cache
+
mount /dev/lv/lv_add /mnt/lv_add
   
 
Произведем копирование загрузочных файлов и остальных данных исключая служебные каталоги в соответвтующие разделы
 
Произведем копирование загрузочных файлов и остальных данных исключая служебные каталоги в соответвтующие разделы
Строка 73: Строка 82:
 
--exclude 'lost+found' \
 
--exclude 'lost+found' \
 
--exclude '/sys' \
 
--exclude '/sys' \
--exclude '/var/cache'
+
--exclude $lv_add_dir
   
rsync -aHEAXh --progress /var/cache/* /mnt/lv_cache
+
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/var/cache
+
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
 
echo "proc /proc proc nodev,noexec,nosuid 0 0" >> /etc/fstab
nano /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
   
proc /proc proc nodev,noexec,nosuid 0 0
 
/dev/md0 /boot ext2 defaults 0 2
 
/dev/lv/lv_swap none swap sw 0 0
 
/dev/lv/lv_root / ext4 errors=remount-ro 0 1
 
/dev/lv/lv_cache /var/cache jfs errors=remount-ro 0 1
 
 
Разрешим системе автоматически запускаться, если один из дисков вышел из строя или отсутствует (по умолчанию при загрузке будет выдаваться запрос на разрешение запуска)
 
Разрешим системе автоматически запускаться, если один из дисков вышел из строя или отсутствует (по умолчанию при загрузке будет выдаваться запрос на разрешение запуска)
 
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`
 
Отключим графический режим загрузчика из-за которого система может не загружаться с рейда.
 
Отключим графический режим загрузчика из-за которого система может не загружаться с рейда.
nano /etc/default/grub
+
echo "GRUB_TERMINAL=console" >> /etc/default/grub
Раскоментировать строку:
 
GRUB terminal=console
 
 
Выполним запись в загрузочный сектор второго жесткого диска и обновление параметров загрузчика
 
Выполним запись в загрузочный сектор второго жесткого диска и обновление параметров загрузчика
grub-install --recheck /dev/sdb
+
grub-install --recheck /dev/$newdsk
 
update-grub
 
update-grub
   
Строка 114: Строка 126:
   
 
Очищаем таблицу разделов на исходном диске. '''Все данные на нем будут уничтожены!''' Все изменения в файлах произошедшие со времени начала копирования данных с него на второй диск будут потеряны.
 
Очищаем таблицу разделов на исходном диске. '''Все данные на нем будут уничтожены!''' Все изменения в файлах произошедшие со времени начала копирования данных с него на второй диск будут потеряны.
dd if=/dev/zero of=/dev/sda bs=512 count=1
+
dd if=/dev/zero of=/dev/$workdsk bs=512 count=1
 
Перезагружаем систему.
 
Перезагружаем систему.
 
reboot
 
reboot
Строка 122: Строка 134:
 
=Подключение или замена диска в RAID=
 
=Подключение или замена диска в RAID=
 
* ''Далее все действия идентичны как для первичного добавления диска, так и для замены вышедшего из строя''
 
* ''Далее все действия идентичны как для первичного добавления диска, так и для замены вышедшего из строя''
  +
Проверим список дисков в системе
Диск который будет добавляться в массив, должен быть очищен от данных. Выясним, какое имя в системе ему присвоено:
 
parted -l | grep '/dev/sd'
+
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''' # чистый, пустой диск
 
workdsk='''sdb''' # Диск, который содержит систему
+
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