Процесс переноса системы может производиться без прекращения функционирования сервера, но в ходе переноса может значительно снизится его производительность. Вкратце, все разделы постепенно переносятся на свободный жесткий диск, который переводится в состояние деградированного RAID1. После завершения переноса файлов и загрузчика на разделы рейда старый одиночный диск очищается от данных и добавляется к зеркалу.
Дисклеймер: автор текста не несет никакой ответственности за выши данные на серверах. В конце статьи приведены ссылки на гайды, откуда кусочно был скомпонован алгоритм, опробованный в деле.
Процесс настройки будет производится с учетом используемого в текущий момент диска /dev/sda и свежего незадействованного диска /dev/sdb. Помимо всего прочего в системе используется LVM. Диск разбит на 2 части: первый раздел /boot небольшого размера, остальное отдано под LVM.
fdisk -l /dev/sda Disk /dev/sda: 160.0 GB, 160041885696 bytes 255 heads, 63 sectors/track, 19457 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x000ab6ac Device Boot Start End Blocks Id System /dev/sda1 * 1 125 999424 83 Linux Partition 1 does not end on cylinder boundary. /dev/sda2 125 19458 155288577 5 Extended /dev/sda5 125 19458 155288576 8e Linux LVM
Для начала установим mdadm.
apt-get install mdadm
После установки необходимо проиницализировать все необходимые модули. Это избавит нас от необходимости лишний раз перезагружать сервер:
modprobe linear modprobe multipath modprobe raid0 modprobe raid1 modprobe raid5 modprobe raid6 modprobe raid10
Теперь скопируем структуру разделов с действующего диска на новый
sfdisk -d /dev/sda | sfdisk -f /dev/sdb
Делаем RAID1 для первого раздела на новом диске
mdadm --create /dev/md0 --level=1 --raid-devices=2 missing /dev/sdb1
Повторяем для остальных
mdadm --create /dev/md1 --level=1 --raid-devices=2 missing /dev/sdb5
Форматируем партиции в нужные файловые системы
mkfs.ext3 /dev/md0
Теперь перенесем содержимое первого раздела в зеркало, так как там только папка /boot, скопируем её
mount /dev/md0 /mnt/ rsync --progress -av /boot/ /mnt/ umount /boot mount /dev/md0 /boot
После успешного монтирования нового раздела с загрузочными файлами добавляем старый к зеркалу и ждем завершения синхронизации.
mdadm -a /dev/md0 /dev/sda1
Так как существующий раздел /dev/sda5 расположен на LVM, создаем LVM физический том в рейде
pvcreate /dev/md1
Расширяем существующую группу томов с учетом md1
vgextend vg0 /dev/md1
Переносим туда наш текущий раздел с данными
pvmove /dev/sda5 /dev/md1
Выбрасываем из группы томов одиночный раздел
vgreduce vg0 /dev/sda5
Добавляем освободившийся раздел к зеркалу, дожидаемся сборки массива
mdadm -a /dev/md1 /dev/sda5 cat /proc/mdstat
После всех этих процедур, если система не предложила сделать это ранее, вносим изменения в файлы конфигурации mdadm, добавляя туда данные о созданных нами массивах
mdadm --examine --scan >> /etc/mdadm/mdadm.conf
Теперь необходимо поправить /etc/fstab на загрузку с разделов, расположенных в зеркале. Если в файле содержатся UUID вместо дерева устройств, cвежие данные берем из вывода blkid.
Обновляем загрузчик и ставим его на все используемые у нас диски.
update-grub grub-install /dev/sdb grub-install /dev/sda
На этом этапе пробуем перезагрузиться и скрестив пальцы ждём пингов от сервера, находящегося от нас в нескольких тысячах километров.
Ссылки: