Как изменить размер файловой системы на программном raid 1 (mdadm) при переносе на диски большего объема
Вытаскиваем физически второй диск, загружаем сервер в rescue linux с внешнего диска и затем проводим операции на первом диске
# mdadm --stop /dev/md0
# mdadm --stop /dev/md1
# mdadm --stop /dev/md2
Далее увеличиваем партицию
# parted
// для партиции sda3
// ключ -1 означает до максимального размера
resizepart
3
-1
Перезагрузка сервера для перезапуска md устройств (также в режим linux rescue livecd)
# reboot
Затем проводим увеличение устройства md2 на весь диск
# mdadm --grow /dev/md2 --size=max
После чего производится увеличение файловой системы
для ext4
# e2fsck -f /dev/md2
# resize2fs /dev/md2
для xfs
(проверка производится на отмонтированой файловой системе, resize на смонтированной)
# xfs_repair /dev/md2
# mount /dev/md2 /mnt
# xfs_growfs /mnt
Убеждаемся что все работает
Меняем второй диск
Добавляем в raid
Не забываем поставить на второй диск загрузчик grub
Показаны сообщения с ярлыком mdadm. Показать все сообщения
Показаны сообщения с ярлыком mdadm. Показать все сообщения
Ubuntu 14.04 : mounting /dev/md1 on /root failed: Device or Resource busy
Необходимо сделать паузу при детектировании устройств
# echo "sleep 60" > /etc/initramfs-tools/scripts/init-premount/delay_for_raid_array_to_build_before_mounting
# chmod +x /etc/initramfs-tools/scripts/init-premount/delay_for_raid_array_to_build_before_mounting
# update-initramfs -u
# echo "sleep 60" > /etc/initramfs-tools/scripts/init-premount/delay_for_raid_array_to_build_before_mounting
# chmod +x /etc/initramfs-tools/scripts/init-premount/delay_for_raid_array_to_build_before_mounting
# update-initramfs -u
mdadm : переименовать устройство md
После переноса на новосозданный RAID системы возникает необходимость переименовать устройства в те имена, которые были раньше на исходном диске. Останавливаем md5 загрузившись в rescue
# mdadm -S /dev/md5
-S - это --stop
Переименовываем в md2
# mdadm --assemble /dev/md2 /dev/sda3 --update=name
# mdadm -S /dev/md5
-S - это --stop
Переименовываем в md2
# mdadm --assemble /dev/md2 /dev/sda3 --update=name
/proc/mdstat shows the array as "auto-read-only" with resync=PENDING
# cat /proc/mdstat
Personalities : [raid1]
md1 : active (auto-read-only) raid1 sda2[0] sdb2[1]
976630336 blocks super 1.2 [2/2] [UU]
resync=PENDINGЭто нормальная ситуация, если на созданное устройство md не писались еще данные, то и не начинается синхронизация
Запустить принудительно можно командой
mdadm --readwrite /dev/md1Источник: http://unix.stackexchange.com/questions/101072/new-md-array-is-auto-read-only-and-has-resync-pending
Перенос CentOS 6.8 на программный RAID1 mdadm
В данной статье пойдет речь как быстро перенести операционную систему CentOS 6 которая установлена на один жесткий диск на программный RAID на двух дисках (mdraid)
Руководств по переводу можно найти в сети много разных, однако, не все они «запускаются» с первого раза или являются неправильными (ситуация «делал все как написано и оно не работает»)
Также при использовании grub1 существует недостаток в связи с тем, что не всегда удается загрузиться в случае выхода из строя одного из дисков и необходимо в grub указывать root устройство правкой в загрузчке (root (hd0,0)) или же переставлять диск местами.
Это действительно издержки данной системы http://www.linux.org.ru/forum/admin/9417685?cid=9421016
Также, как показывает огромная практика различные вещи как LVM, разбивка на несколько разделов просто напросто не нужны, поэтому просто разбиваем на один раздел, swap же также сделаем в файле (тем самым будет преимущество в виде возможности менять его размер при необходимости)
И так, как же перенести CentOS 6 на программный RAID
Для этого подключаем второй чистый жесткий диск такого же объема (в системе он будет называться sdb) и разметим его используя fdisk
Всё по-умолчанию, единственное, что сделаем, так это отступим на один цилиндр сначала (разобьем со второго цилиндра) на случай если будет необходимость в будущем мигрировать на загрузчик grub2 так как он просто «не войдет» в один цилиндр
[
Теперь создаем raid 1 на этом разделе
Обязательно использовать формат метаданных 0.90, так как с более новыми grub 0.97 не работает на /boot разделе
Формируем конфигурационной файл mdadm /etc/mdadm.conf
[root@centos6 ~]# mdadm --detail --scan > /etc/mdadm.conf
Внесите правку в /boot/grub/device.map — добавьте туда наш sdb как hd1
[
Форматируем устройство md0 в ext4
Монтируем новосозданный /dev/md0 в /mnt
Копируем все данные на него (предварительно следует остановить на машине все сервисы которые могут писать файлы на диск, такие как mysql, веб-сервер)
Правим /mnt/etc/fstab делая там только монтирование md0, монтировать следует по UUID- смотрим его командой blkid
[
Вносим правки в /mnt/boot/grub/grub.conf в строку kernel выставляя правильное устройство (root=) и убирая rd_NO_DM rd_NO_MD и аналогичные параметры, я рекомендую убрать все лишние опции чтобы видеть вывод при загрузке
root у нас на md0, смотрим его uuid командой blkid | grep md0
Желательно указывать также rd_MD_UUID — его можно посмотреть в /etc/mdadm.conf
Путь к kernel и initrd теперь начинается с /boot/ — также не забываем это исправить
Устройство root следует указать (hd1,0)
Пересобирите initramfs на новом диске отключив в нем поддержку LVM (у нас система ставилась по-умолчанию с lvm и не нужно чтобы он монтировался)
Пропишите grub bootcode на второй диск
Если в системе включен selinux, то необходимо создать файл /.autorelabel в новой системе
Иначе не сможете войти в систему с ошибкой Unable to get valid context for root
Теперь необходимо перезагрузить сервер и выбрать в BIOS загрузку со второго жесткого диска
* после выполнения relabel система автоматически перезагрузится, следите за загрузкой
После чего зайти в систему и убедиться что все в порядке, система загружена с нужного нам устройства
[
Также не должно показывать никаких подмонтированых lvm разделов
Если вы видете примонтированый lvm — значит вы загрузились с первого, а не второго диска, перезагрузите сервер и убедитесь что именно нужный диск выбран
Просто отлично, система загружена и работает с нужного нам устройства
Теперь осталось немного — сделать копию разделов с диска sdb на диск sda
В моем случае на сервере был LVM и вначале необходимо удалить устройства
Затем обнулить таблицу разделов
И сделать копию таблицы разделов
Команда должна выполниться без ошибок, именно поэтому важно предварительно почистить диск
Добавляем диск в зеркало
Убеждаемся что зеркало собирается
Ставим загрузчик на sda (тут может потребоваться немного подождать пока синхронизируется начальная часть зеркала)
Также создаем swap в файле, скажем 2Gb (это уже опционально)
Подключаем его в /etc/fstab
Можно перезагрузиться чтобы убедиться что все работает
После чего меняем в /boot/grub/grub.conf строку
на
Чтобы если в сервере останется один диск система могла загрузиться
Работы на этом завершены
Руководств по переводу можно найти в сети много разных, однако, не все они «запускаются» с первого раза или являются неправильными (ситуация «делал все как написано и оно не работает»)
Также при использовании grub1 существует недостаток в связи с тем, что не всегда удается загрузиться в случае выхода из строя одного из дисков и необходимо в grub указывать root устройство правкой в загрузчке (root (hd0,0)) или же переставлять диск местами.
Это действительно издержки данной системы http://www.linux.org.ru/forum/admin/9417685?cid=9421016
Также, как показывает огромная практика различные вещи как LVM, разбивка на несколько разделов просто напросто не нужны, поэтому просто разбиваем на один раздел, swap же также сделаем в файле (тем самым будет преимущество в виде возможности менять его размер при необходимости)
И так, как же перенести CentOS 6 на программный RAID
Для этого подключаем второй чистый жесткий диск такого же объема (в системе он будет называться sdb) и разметим его используя fdisk
Всё по-умолчанию, единственное, что сделаем, так это отступим на один цилиндр сначала (разобьем со второго цилиндра) на случай если будет необходимость в будущем мигрировать на загрузчик grub2 так как он просто «не войдет» в один цилиндр
[
root@centos6 ~]# fdisk /dev/sdb
Устройство не содержит ни верной таблицы разделов DOS, ни метки диска Sun, SGI или OSF
Building a new DOS disklabel with disk identifier 0x390ed2ea.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.
Предупреждение: неверный флаг 0x0000 таблицы разделов 4 будет исправлен записью
WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
switch off the mode (command 'c') and change display units to
sectors (command 'u').
Команда (m для справки): n
Действие команды
e расширенный
p основной раздел (1-4)
p
Номер раздела (1-4): 1
Первый цилиндр (1-1044, default 1): 2
Last цилиндр, +цилиндры or +size{K,M,G} (2-1044, default 1044):
Using default value 1044
Команда (m для справки): t
Выбранный раздел 1
Шестнадцатеричный код (введите L для получения списка кодов): fd
Системный тип раздела 1 изменен на fd (Автоопределение Linux raid)
Команда (m для справки): a
Номер раздела (1-4): 1
Команда (m для справки): w
Таблица разделов была изменена!
Вызывается ioctl() для перечитывания таблицы разделов.
Синхронизируются диски.Теперь создаем raid 1 на этом разделе
[root@centos6 ~]# mdadm --create /dev/md0 --metadata=0.90 --level=1 --raid-disks=2 missing /dev/sdb1
mdadm: array /dev/md0 started.Обязательно использовать формат метаданных 0.90, так как с более новыми grub 0.97 не работает на /boot разделе
Формируем конфигурационной файл mdadm /etc/mdadm.conf
[root@centos6 ~]# mdadm --detail --scan > /etc/mdadm.conf
Внесите правку в /boot/grub/device.map — добавьте туда наш sdb как hd1
[
root@centos6 ~]# vi /boot/grub/device.map
(hd0) /dev/sda
(hd1) /dev/sdbФорматируем устройство md0 в ext4
[root@centos6 ~]# mkfs.ext4 /dev/md0Монтируем новосозданный /dev/md0 в /mnt
[root@centos6 ~]# mount /dev/md0 /mntКопируем все данные на него (предварительно следует остановить на машине все сервисы которые могут писать файлы на диск, такие как mysql, веб-сервер)
[root@centos6 ~]# yum -y install rsync
[root@centos6 ~]# rsync -avP --exclude='/dev/*' --exclude='/proc/*' --exclude='/sys/*' --exclude='/mnt/' / /mntПравим /mnt/etc/fstab делая там только монтирование md0, монтировать следует по UUID- смотрим его командой blkid
[
root@centos6 ~]# blkid | grep md0
[root@centos6 ~]# cp /mnt/etc/fstab /etc/fstab_bak
[root@centos6 ~]# vi /mnt/etc/fstab
UUID=d00711db-48b2-4735-9cdb-7080742797c4 / ext4 defaults 1 1
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0Вносим правки в /mnt/boot/grub/grub.conf в строку kernel выставляя правильное устройство (root=) и убирая rd_NO_DM rd_NO_MD и аналогичные параметры, я рекомендую убрать все лишние опции чтобы видеть вывод при загрузке
root у нас на md0, смотрим его uuid командой blkid | grep md0
Желательно указывать также rd_MD_UUID — его можно посмотреть в /etc/mdadm.conf
Путь к kernel и initrd теперь начинается с /boot/ — также не забываем это исправить
Устройство root следует указать (hd1,0)
[root@centos6 ~]# cp /mnt/boot/grub/grub.conf /mnt/boot/grub/grub.conf_bak
[root@centos6 ~]# vi /mnt/boot/grub/grub.conf
default=0
timeout=5
hiddenmenu
title CentOS 6 (2.6.32-642.el6.x86_64)
root (hd1,0)
kernel /boot/vmlinuz-2.6.32-642.el6.x86_64 ro root=UUID=d00711db-48b2-4735-9cdb-7080742797c4 rd_MD_UUID=b9baa472:faeb3a7c:6e31c5b6:310ac827
initrd /boot/initramfs-2.6.32-642.el6.x86_64.imgПересобирите initramfs на новом диске отключив в нем поддержку LVM (у нас система ставилась по-умолчанию с lvm и не нужно чтобы он монтировался)
[root@centos6 ~]# dracut --nolvmconf --mdadmconf -f /mnt/boot/initramfs-`uname -r`.img `uname -r`Пропишите grub bootcode на второй диск
grub> root (hd1,0)
root (hd1,0)
Filesystem type is ext2fs, partition type 0xfd
grub> setup (hd1)
setup (hd1)
Checking if "/boot/grub/stage1" exists... yes
Checking if "/boot/grub/stage2" exists... yes
Checking if "/boot/grub/e2fs_stage1_5" exists... yes
Running "embed /boot/grub/e2fs_stage1_5 (hd1)"... 27 sectors are embedded.
succeeded
Running "install /boot/grub/stage1 (hd1) (hd1)1+27 p (hd1,0)/boot/grub/stage2 /boot/grub/grub.conf"... succeeded
Done.
grub> quitЕсли в системе включен selinux, то необходимо создать файл /.autorelabel в новой системе
[root@centos6 /]# touch /mnt/.autorelabelИначе не сможете войти в систему с ошибкой Unable to get valid context for root
Теперь необходимо перезагрузить сервер и выбрать в BIOS загрузку со второго жесткого диска
* после выполнения relabel система автоматически перезагрузится, следите за загрузкой
После чего зайти в систему и убедиться что все в порядке, система загружена с нужного нам устройства
[
root@centos6 ~]# mount
/dev/md0 on / type ext4 (rw)
[root@centos6 ~]# cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sdb1[1]
8377856 blocks super 1.0 [2/1] [_U]
[root@centos6 ~]# cat /proc/mountsТакже не должно показывать никаких подмонтированых lvm разделов
Если вы видете примонтированый lvm — значит вы загрузились с первого, а не второго диска, перезагрузите сервер и убедитесь что именно нужный диск выбран
Просто отлично, система загружена и работает с нужного нам устройства
Теперь осталось немного — сделать копию разделов с диска sdb на диск sda
В моем случае на сервере был LVM и вначале необходимо удалить устройства
[root@centos6 ~]# lvremove /dev/mapper/vg_centos6-lv_root
Do you really want to remove active logical volume lv_root? [y/n]: y
Logical volume "lv_root" successfully removed
[root@centos6 ~]# lvremove /dev/mapper/vg_centos6-lv_swap
Do you really want to remove active logical volume lv_swap? [y/n]: y
Logical volume "lv_swap" successfully removedЗатем обнулить таблицу разделов
[root@centos6 ~]# dd if=/dev/zero of=/dev/sda bs=512 count=1И сделать копию таблицы разделов
[root@centos6 ~]# sfdisk -d /dev/sdb | sfdisk --force /dev/sdaКоманда должна выполниться без ошибок, именно поэтому важно предварительно почистить диск
Добавляем диск в зеркало
[root@centos6 ~]# mdadm --add /dev/md0 /dev/sda1
mdadm: added /dev/sda1Убеждаемся что зеркало собирается
[root@centos6 ~]# cat /proc/mdstatСтавим загрузчик на sda (тут может потребоваться немного подождать пока синхронизируется начальная часть зеркала)
[root@centos6 ~]# grub
grub> root (hd0,0)
root (hd0,0)
Filesystem type is ext2fs, partition type 0x83
grub> setup (hd0)
setup (hd0)
...
...
grub> quit
quitТакже создаем swap в файле, скажем 2Gb (это уже опционально)
[root@centos6 ~]# dd if=/dev/zero of=/swapfile bs=2048 count=1048576
[root@centos6 ~]# mkswap /swapfile
[root@centos6 ~]# swapon /swapfileПодключаем его в /etc/fstab
[root@centos6 ~]# echo '/swapfile none swap sw 0 0' >> /etc/fstabМожно перезагрузиться чтобы убедиться что все работает
После чего меняем в /boot/grub/grub.conf строку
root (hd1,0)на
root (hd0,0)Чтобы если в сервере останется один диск система могла загрузиться
Работы на этом завершены
Подписаться на:
Сообщения (Atom)