Замена диска в linux
В данной статье рассмотрим, как удалить неисправный жёсткий диск из массива Linux RAID1 (программное обеспечение RAID) и добавить новый жёсткий диск в массив RAID1 без потери данных. Для копирования схемы раздела диска будем использовать gdisk. Данная программа также работает на большинстве жёстких дисков с GPT (GUID Partition Table).
2 Как узнать, что жёстких диск неисправен?
Если жёсткий диск неисправен, в журнале регистрации событий появится большое количество ошибок, например в /var/log/messages или /var/log/syslog.
Можно также выполнить:
и вместо строки [UU] получится [U_], что означает, что массив RAID1 неполон.
Используемые утилиты
- Просмотр информации о дисках:
- lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINT
- fdisk -l
- Просмотр информации и работа с LVM
- pvs
- pvextend
- pvcreate
- pvresize
- vgs
- vgreduce
- lvs
- lvextend
- Просмотр информации и работа с RAID:
- сat /proc/mdstat
- mdadm
- Точки монтирования:
- mount
- umount
- cat /etc/fstab
- cat /etc/mtab
- Переразметка диска:
- fdisk /dev/XXX
- Копирование разделов:
- dd if=/dev/xxx of=/dev/yyy
- Работа с таблицей разделов:
- partx
- sfdisk
- mkfs.ext4
- Работа с загрузчиком:
- grub-install /dev/XXX
- update-grub
- misc
- lsof
- apt
- rsync
Задание 3 (Добавление новых дисков и перенос раздела)
Это самое сложное и объемное задание из всех представленных. Очень внимательно проверяйте что вы делаете и с какими дисками и разделами. Рекомендуется снять копию перед его выполнением. Это задание независимо от задания №2, его можно выполнять после задания №1 с поправкой на имена дисков.
Вторая часть задания этой лабораторной должна привести в точно такое же состояние которое было после выполнения первой части.
Для того чтобы вам было проще работать могу рекомендовать не удалять физически диски с хостовой машины, а только лишь отсоединять их в свойствах машины. С точки зрения ОС в ВМ это будет выглядеть абсолютно одинаково, но вы сможете в случае чего подключить диск обратно и продолжить выполнение работы откатившись на пару пунктов назад, в случае если у вас возникли проблемы. Например вы могли выполнить неверно или забыть скопировать на новый диск раздел /boot. Я могу лишь посоветовать несколько раз перепроверять с какими дисками и разделами вы работаете, а еще лучше выписать на листочек соответствие дисков, разделов и "физическому" номеру диска. Красивое и понятное дерево рисует команда lsblk , пользуйтесь ей как можно чаще для анализа того что вы сделали и что нужно сделать.
Представьте себе что ваш сервер работал долгое время на 2-х ssd дисках, как вдруг.
Проэмулируйте отказ диска ssd2, удалив из свойств ВМ диск и перезагрузившись.
Посмотрите текущее состояние дисков и RAID:
Вам повезло — начальство разрешило закупить несколько новых дисков:
2 SATA большого объема для давно назревшей задачи вынесения раздела с логами на отдельный диск. 2 SSD на замену погибшему, а также на замену пока еще функционирующему.
Следует учитывать, что корзина сервера поддерживает установку только 4х дисков. одновременно, поэтому добавить все диски сразу нельзя.
Объем HDD выбрать в 2 раза больше чем SSD.
Объем SSD выбрать в 1,25 раза больше бывших SSD.
Добавьте один новый ssd диск, назвав его ssd4, а после добавления проверьте что произошло:
В первую очередь следует озаботиться сохранностью данных старого диска. На этот раз мы будем переносить данные с помощью LVM:
В первую очередь необходимо скопировать файловую таблицу со старого диска на новый:
Подставьте вместо x,y правильные диски и разберите что делает данная команда.
С помощью команды dd скопируйте данные /boot на новый диск:
Если /boot остался смонтирован на старом диске, его следует перемонтировать на живой диск:
Установите загрузчик на новый ssd диск:
Зачем мы выполняем эту операцию?
Создайте новый рейд-массив с включением туда только одного нового ssd диска:
Команда приведенная выше не отработает без указания специального ключа.Прочитайте справку и добавьте этот ключ к команде.
Следующим этапом необходимо настроить LVM
-
Выполните команду pvs для просмотра информации о текущих физических томах.
Создайте новый физический том включив в него ранее созданный RAID массив:
Увеличим размер Volume Group system с помощью такой команды:
Выполните команды и запишите что вы увидели и что поменялось.
На каком физическом диске сейчас находятся LV var, log, root?
Выполните перемещение данных со старого диска на новый, подставив правильные имена устройств.
Повторите операцию для всех logical volume.
Выполните команды и запишите что вы увидели и что поменялось.
Изменим наш VG, удалив из него диск старого raid. Подставьте правильное имя raid.
Выполните команды и запишите что вы увидели и что поменялось.
Удалите ssd3 диск и добавьте ssd5, hdd1, hdd2 согласно вышеописанным ТЗ, в итоге получив:
- ssd4 — первый новый ssd
- ssd5 — второй новый ssd
- hdd1 — первый новый hdd
- hdd2 — второй новый hdd
Проверьте что произошло после добавления дисков:
Восстановим работу основного raid массива:
Выполните копирование таблицы разделов, подставив правильные диски:
Обратите внимание, что когда мы скопировали таблицу разделов со старого диска лказалось что новый размер не использует весь объем жесткого диска. Поэтому в скором времени нам потребуется изменить размер этого раздела и расширить raid. Убедитесь в этом сами, введя команду:
Скопируйте загрузочный раздел /boot с диска ssd4 на ssd5:
Установите grub на новый диск (ssd5).
Изменим размер второго раздела диска ssd5.
Запустите утилиту для работы с разметкой дисков:
Перечитаем таблицу разделов и проверим результат:
Добавим новый диск к текущему raid массиву (не забудьте подставить правильные диски):
Расширим количество дисков в нашем массиве до 2-х штук:
Посмотрите результат: у нас размечено 2 массива, но оба раздела входящие в этот массив имеют разные размеры:
Увеличим размер раздела на диске ssd4
Запустите утилиту для работы с разметкой дисков:
Перечитаем таблицу разделов и проверим результат.
Обратите внимание, теперь sda2, sdc2 разделы имеют размер > чем размер raid-устройства.
На этом этапе размер raid можно теперь расширить:
Просмотрите lsblk и запишите что изменилось.
Однако, хоть мы и изменили размер raid, сами размеры vg root,var,log не изменились
Посмотрите чему равен размер PV:
Расширим размер нашего PV:
Посмотрите чему равен размер PV:
Добавим вновь появившееся место VG var, root:
На этом этапе вы завершили миграцию основного массива на новые диски. работа с ssd1,ssd2 закончена.
Наша следующая задача — переместить /var/log на новые диски, для этого создадим новый массив и lvm на hdd дисках.
Посмотрим какие имена имеют новые hdd диски:
Создадим raid массив:
Создадим новый PV на рейде из больших дисков:
Создадим в этом PV группу с названием data:
Создадим логический том размером всего свободного пространства и назовем его val_log:
Отформатируем созданные раздел в ext4:
Перенесем данные логов со старого раздела на новый
Примонтируем временно новое хранилище логов:
Выполним синхронизацию разделов:
Выясним какие процессы работают сейчас с /var/log:
Останавливаем эти процессы:
Выполним финальную синхронизацию разделов (тех данных что могли измениться с момента последней синхронизации):
Поменяем местами разделы:
Проверяем что получилось:
Самое важно на этом этапе — не забыть изменить таблицу раделов (ext4, например). Поскольку как бы мы не изменяли всякие raid, lvm — пока ФС на разделе не будет уведомлена о том что теперь размер раздела изменился, мы не сможем использовать новое пространство. Используйте команду resize2fs для изменения ФС.
-
Выполним перезагрузку. Если вы все сделали правильно — вы снова попадете в вашу ОС (это нужно для того чтобы убедиться что все работает. Никакого смысла кроме самопроверки этот шаг не несет)
Выполните проверки, что все что мы хотели сделать действительно было сделано:
[ОПЦИОНАЛЬНО] Выполните действия
-
Перезагрузитесь нажимая F12, чтобы указать при загрузке разные диски, для того чтобы убедиться что вы можете загрузиться с любого из ssd дисков, так чтобы мы не боялись отказа одного из них.
Теперь у вас есть ненужный LV log в VG system. Распределите это пространство между root или var, но вместо использования конструкции 100%FREE укажите размер руками с помощью ключа -L:
Сегодня хочу поделиться с вами краткой инструкцией, как добавить диск в существующий RAID 5/6 не пересобирая массив (зачастую это просто нереально — забэкапить 4-10Тб данных) и не останавливая работу сервера на сутки-другие. Данная инструкция написана для линуксовых софтрейдов через mdadm, с аппаратными контроллерами/виндой разговор особый и зачастую очень короткий (никак и все).
Итак, приступим (система — Ubuntu 10.04, но работать должно практически везде).
Первым делом, подключаем диск и день-другой (ну или хотя-бы один раз полная перезапись) гоняем его под нагрузкой, записываем/считываем файлы. Это необходимо чтобы сразу обнаружить проблемы с диском, контроллером, кабелем. Если этого не сделать, и добавить «сбойный» диск в массив, может быть довольно весело (собственно, это случилось со мной, SATA6 диск оказался не очень совместим с SATA1 контроллером. Но благодаря безопасности mdadm потери данных удалось избежать).
0. Проверяем версию mdadm – желательно иметь последнюю стабильную версию. (в часности, в процессе написания этого гайда был найден баг при продолжении работы после сбоя — не устанавливался stripe_cache_size — но это уже должно быть исправлено)
1. Отключаем write intent bitmap, если он у вас конечно был (используется для ускорения пересборки массива в случае сбоя):
mdadm --grow --bitmap=none /dev/md0
2. Добавляем диски в массив как горячая замена (hot spare) – на этом этапе пока на них ничего не начинает писаться, диски будут использоваться в случае сбоя или последующего изменения размера массива.
mdadm /dev/md0 -a /dev/sda1
mdadm /dev/md0 -a /dev/sdb1
Делаем cat /proc/mdstat, и видим что диски добавились как hot spare (S)
Personalities : [raid6] [raid5] [raid4]
md0 : active raid6 sdb1[7](S) sda1[6](S) sdd1[2] sdc1[4] sdh1[0] sdg1[5] sdf1[1]
2929683456 blocks super 1.2 level 6, 1024k chunk, algorithm 2 [5/5] [UUUUU]
3. Проверяем UPS, выдергивая розетку из стены вилку из розетки (хотя розетку тоже можно). Аккумуляторы любят со временем сульфатироваться незаметно для упса, и могут неожиданно сдохнуть за пару секунд.
Несмотря на то, что наличие UPS-а необязательно для безопасного ресайза, с ним спокойнее. Драйвер рейд-массивов в ядре постоянно сохраняет прогресс ресайза, и при сбое в любом месте – может продолжить без проблем.
4. Самая главная команда:
mdadm --grow /dev/md0 --raid-disk=8 --backup-file=/var/backup
backup-file – необходим для сохранения резервной копии данных о массиве в случае сбоя на самом первом этапе изменения размера массива. Само собой файл не нужно ложить на сам рейд . Аналогично можно из RAID-5 сделать RAID-6 указав --level=6 (напомню, что RAID-6 выдерживает смерть 2-х любых дисков, что очень важно, т.к. восстановление большого RAID-5 занимает до 10-20 часов и что-то может произойти в это время. )
Операция изменения размера в среднем происходит со скоростью самого медленного диска. Т.е. если самый медленный диск жмет 60Мб/сек, то mdadm нужен будет один проход по массиву с такой скоростью. В случае терабайтных дисков это около 5 часов, если процессор будет успевать, и медленнее если не будет. Если скорость слишком маленькая – делаем
echo "200000" > /sys/block/md0/md/sync_speed_max
В процессе расширения массива данные остаются доступными, смотреть прогресс можно через /proc/mdstat.
5. После завершения ресайза – расширяем файловую систему. Сначала проверка
e2fsck -f /dev/md0
Затем собственно расширение:
resize2fs /dev/md0
6. Добавляем обратно write intent bitmap:
mdadm -G /dev/md0 --force -b /var/md0_intent --bitmap-chunk=65536
7. Перегенерируем конфиг mdadm.conf. Выполняем
mdadm --detail --scan –verbose
И результат вставляем в /etc/mdadm/mdadm.conf
8. Перегенерируем ramfs, чтобы после перезагрузки использовался правильный конфиг mdadm:
update-initramfs -k all –u
Готово
Теперь у вас RAID-массив стал больше, и вам не пришлось платить безумные деньги для того чтобы получить эту возможность. Не забываем про мониторинг – чем больше дисков, тем выше риск один из них перегреть.
PP. С mdadm можно делать и другие веселые вещи – например если у вас маccив из 1Тб дисков, а вдруг нашлись 2 по 500 – их можно объеденить в RAID-0, и добавить в основной массив. А если на этих двух дисках останется по 100Мб свободного места – можно это сделать отдельным разделом, объеденить в RAID-1, и замонтировать туда /boot/ — и тогда можно будет систему полностью перенести на RAID, и грузится без вспомогательных средств (вроде флешек, старых веников и проч.).
PPS. Глядя на количество дисков справа со своего домашнего файлсервера, я начинаю думать, что у меня в детстве наверное был слишком маленький винчестер… Впрочем, могло быть хуже
В данной статье будет рассмотрены 2 случая замены дисков и переноса информации на новые диски большего объёма с дальнейшим расширением массива и файловой системы. Первый случай будет касаться замены дисков c одноименной разметкой MBR/MBR либо GPT/GPT, второй случай касается замены дисков с разметкой MBR на диски объёмом более 2 TB, на которые потребуется ставить разметку GPT с разделом biosboot. В обоих случаях диски, на которые переносим данным, уже установлены в сервер. Файловая система, используемая для корневого раздела — ext4.
Задание 2 (Эмуляция отказа одного из дисков)
- Если вы поставили галочку hot swap, то вам доступно удаление дисков на лету:
- Выполните удаление диска ssd1 в свойствах машины.
- Найдите директорию, где хранятся файлы вашей виртуальной машины и удалите ssd1.vmdk.
- Убедитесь что ваша виртуальная машина по-прежнему работает
- Выполните перезагрузку виртуальной машины и убедитесь что она по-прежнему работает
- Проверьте статус RAID-массива: cat /proc/mdstat
- Добавьте в интерфейсе VM новый диск такого же размера и назовите его ssd3.
- Выполните операции:
- Посмотрите что новый диск приехал в систему командой fdisk -l
- Скопируйте таблицу разделов со старого диска на новый: sfdisk -d /dev/XXXX | sfdisk /dev/YYY
- Посмотрите результат командой fdisk -l
- Добавьте в рейд массив новый диск: mdadm --manage /dev/md0 --add /dev/YYY
- Посмотрите результат: cat /proc/mdstat . Вы должны увидеть что началась синхронизация
Теперь нужно вручную выполните синхронизацию разделов, не входящих в RAID. Для этого воспользуемся утилитой dd, скопировав с "живого" диска на новенький, который вы недавно поставили:
Опишите своими словами что вы сделали и какой результат получили в итоге проделанного задания.
Результат: удалён диск ssd1, сохранен диск ssd2, добавлен диск ssd3.
Случай 1: Замена дисков меньшего объёма на диски большего объёма (до 2TB)
Задача: Заменить текущие диски на диски большего объёма (до 2 TB) с переносом информации. В данном случае имеем диски 2 x 240 GB SSD (RAID-1) с установленной системой и диски 2 x 1 TB SATA, на которые необходимо перенести систему.
Рассмотрим текущую разметку дисков.
Проверим используемое пространство файловой системы на данный момент.
Размер файловой системы до замены дисков составляет 204 GB, используются 2 программных массива md126, который смонтирован в /boot и md127 , который используется как physical volume для VG группы vg0.
1. Удаление разделов диска из массивов
Проверям состояние массива
В системе используется 2 массива: md126 (точка монтирования /boot ) — состоит из раздела /dev/sda1 и /dev/sdb1 , md127 (LVM для swap и корня файловой системы) — состоит из /dev/sda2 и /dev/sdb2 .
Помечаем разделы первого диска, которые используются в каждом массиве, как сбойные.
Удаляем разделы блочного устройства /dev/sda из массивов.
После того, как мы удалили диск из массива, информация о блочных устройствах будет выглядеть следующим образом.
Состояние массивов после удаления дисков.
2. Копирование таблицы разделов на новый диск
Проверить используемую таблицу разделов на диске можно следующей командой.
Выводом для MBR будет:
Копирование таблицы разметки для MBR:
В данной команде первым указывается диск с которого копируется разметка, вторым — куда копировать.
ВНИМАНИЕ: Для GPT первым указывается диск на который копировать разметку, вторым диском указывается диск с которого копировать разметку. Если перепутать диски, то изначально исправная разметка будет перезаписана и уничтожена.
Копирование таблицы разметки для GPT:
Далее назначаем диску случайный UUID (для GPT).
После выполненной команды разделы должны появится на диске /dev/sdc .
Если после выполненного действия разделы в системе на диске /dev/sdc не определились, то выполняем команду, чтобы перечитать таблицу разделов.
Если на текущих дисках используется таблица MBR и информацию необходимо перенести на диски объёмом более 2 TB, то на новых дисках потребуется вручную создавать разметку GPT с использованием раздела biosboot. Данный случай будет рассмотрен во 2 части данной статьи.
3. Добавление разделов нового диска в массив
Добавим разделы диска в соответствующие массивы.
Проверяем, что разделы добавлены.
После этого дожидаемся синхронизации массивов.
Непрерывно наблюдать за процессом синхронизации можно с помощью утилиты watch .
Параметр -n указывает с каким интервалов в секундах необходимо выполнять команду для проверки прогресса.
Повторяем пункты 1 — 3 для следующего заменяемого диска.
Помечаем разделы второго диска, которые используются в каждом массиве, как сбойные.
Удаляем разделы блочного устройства /dev/sdb из массивов.
После того, как мы удалили диск из массива, информация о блочных устройствах будет выглядеть следующим образом.
Состояние массивов после удаления дисков.
Копируем таблицу разметки MBR с диска /dev/sdс на диск /dev/sdd .
После выполненной команды разделы должны появится на диске /dev/sdd .
Добавляем разделы диска в массивы.
Проверяем, что разделы добавлены.
После этого дожидаемся синхронизации массивов.
5. Установка GRUB на новые диски
где X — буква блочного устройства. В данном случае установить GRUB необходимо на /dev/sdc и /dev/sdd .
6. Расширение файловой системы (ext4) корневого раздела
На новых дисках /dev/sdc и /dev/sdd доступны 931.5 GB. Из-за того, что таблица разделов скопирована с дисков меньшего объёма, на разделах /dev/sdc2 и /dev/sdd2 доступны 222.5 GB.
- Расширить раздел 2 на каждом из дисков,
- Расширить массив md127,
- Расширить PV (physical volume),
- Расширить LV (logical-volume) vg0-root,
- Расширить файловую систему.
Как видно, конец раздела 2 заканчивается на 240 GB. Выполним расширение раздела командой resizepart 2 , где 2 — номер раздела (3). Указываем значение в цифровом формате, например 1000 GB, или используем указание доли диска — 100%. Снова проверяем, что раздел имеет новый размер (4).
Повторяем указанные выше действия для диска /dev/sdd . После расширения разделов /dev/sdc2 и /dev/sdd2 стали равными 930.5 GB.
После этого выполняем расширение массива md127 до максимума.
Проверяем, что массив расширился. Теперь его размер стал 930.4 GB.
Выполняем расширение physical volume. Перед расширением проверим текущее состояние PV.
Как видно, PV /dev/md127 использует 222.4 GB пространства.
Расширяем PV следующей командой.
Проверяем результат расширения PV.
[
Расширяем logical volume. Перед расширением проверим текущее состояние LV (1).
LV /dev/vg0/root использует 206.41 GB.
Расширяем LV следующей командой (2).
Проверяем выполненное действие (3).
Как видим, после расширения LV объём занимаемого дискового пространства стал 914.39 GB.
Объём LV увеличился (4), но файловая система по прежнему занимает 204 GB (5).
1. Выполним расширение файловой системы.
Проверяем после выполненной команды размер файловой системы.
Размер корневой файловой системы увеличится до 900 GB. После выполненных действий можно извлекать старые диски.
Задание 1 (Установка ОС и настройка LVM, RAID)
Создайте новую виртуальную машину, выдав ей следующие характеристики:
- 1 gb ram
- 1 cpu
- 2 hdd (назвать их ssd1, ssd2 и назначить равный размер, поставить галочки hot swap и ssd)
- SATA контроллер настроен на 4 порта:
Начать установку Linux и дойдя до выбора жестких дисков сделать следующее:
-
Partitioning method: manual, после чего вы должны увидеть такую картину:
- Partition size: 512M
- Mount point: /boot
- Create MD device
- Software RAID device type: Выберите зеркальный массив
- Active devices for the RAID XXXX array: Выбрать оба диска
- Spare devices: Оставить 0 по умолчанию
- Active devices for the RAID XX array: выбрать разделы, которые вы создавали под raid
- Finish
- logical volume name: root
- logical volume size: 2\5 от размера вашего диска
- logical volume name: var
- logical volume size: 2\5 от размера вашего диска
- logical volume name: log
- logical volume size: 1\5 от размера вашего диска
Закончить установку ОС, поставив grub на первое устройство (sda) и загрузить систему.
Выполните копирование содержимого раздела /boot с диска sda (ssd1) на диск sdb (ssd2)
Выполнить установку grub на второе устройство:
Посмотреть диски в системе:
Найдите диск на который не была выполнена установка grub и выполните эту установку:
Опишите своими словами что вы сделали и какой результат получили в итоге проделанного задания.
После выполнения этого задания рекомендуется сохранить резервную копию папки с виртуальной машиной или сделать vagrant box.
Результат: Виртуальная машина с дисками ssd1, ssd2.
1 Предварительные замечания
Рассмотрим в качестве примера 2 жёстких диска, /dev/sda и /dev/sdb, с разделами /dev/sda1, /dev/sda2, /dev/sdb1 и /dev/sdb2.
/dev/sdb неисправен и нам потребуется заменить его.
Требования к инструментам для выполнения л\р:
- Средства виртуализации, например Virtualbox
- Установочный образ linux, например Debian9
- Наличие интернета для скачивания нескольких пакетов
- Подключение по ssh к установленной VM (опционально)
4-Добавление нового жёсткого диска
После замены жёсткого диска /dev/sdb, включим систему.
Первым делом необходимо создать точно такое же разбиение на разделы, что и в /dev/sda. Выполним это командой sgdisk из пакета gdisk. Если у Вас не установлен gdisk, установите его, выполнив для Debian и Ubuntu следующее:
Для rpm-дистрибутивов Linux, таких как CentOS:
Следующий шаг необязательный, но рекомендуемый. Для проверки того, что у нас есть резервная копия схемы раздела, воспользуемся sgdisk для записи схем раздела обоих дисков в файл. В нашем случае файл сохраним в /root folder.
В случае неудачи можно восстановить таблицу разделов с помощью опции --load-backup в sgdisk .
Теперь скопируем схему раздела из /dev/sda в /dev/sdb:
Затем необходимо рандомизировать GUID на новом жёстком диске, чтобы убедится, что он уникален.
для проверки, что оба жёстких диска имеют одинаковое разбиение на разделы.
Далее добавим /dev/sdb1 в /dev/md0 и /dev/sdb2 в /dev/md1:
Теперь оба массива (/dev/md0 и /dev/md1) будут синхронизированы.
Результат можно увидеть по команде:
Во время синхронизации выходные данные должны выглядеть следующим образом:
А по окончании синхронизации выходные данные должны выглядеть следующим образом:
Небольшое отступление: данная л\р является синтетической.
Некоторые задания которые здесь описаны можно сделать гораздо проще, но поскольку задача л/р — познакомиться с функционалом raid, lvm то некоторые операции искусственно усложнены.
Случай 2: Замена дисков меньшего объёма на диски большего объёма (более 2TB)
Задание: Заменить текущие диски на диски большего объёма (2 x 3TB) с сохранением информации. В данном случае имеем диски 2 x 240 GB SSD (RAID-1) с установленной системой и диски 2 x 3 TB SATA, на которые необходимо перенести систему. На текущих дисках используется таблица разделов MBR. Так как новые диски имеют объём больше 2 TB, то на них потребуется использовать таблицу GPT, так как MBR не может работать с дисками более 2TB.
Просмотрим текущую разметку дисков.
Проверим используемую таблицу разделов на диске /dev/sda .
На диске /dev/sdb используется аналогичная таблица разделов. Проверим используемое дисковое пространство в системе.
Как видно, корень файловой системы занимает 204 GB. Проверим текущее состояние программного RAID-массива.
1. Установка GPT таблицы разделов и разметка диска
Проверим разметку дисков по секторам.
На новом диске 3TB нам необходимо будет создать 3 раздела:
- Раздел bios_grub размером 2MiB для совместимости GPT с BIOS,
- Раздел для RAID массива, который будет смонтирован в /boot .
- Раздел для RAID-массива, на котором будет LV root и LV swap.
Используя parted выполним следующие команды для разметки диска.
Выполняем команду parted /dev/sdc и переходим в режим редактирования разметки диска.
Создаём таблицу разделов GPT.
Создаём 1 раздел bios_grub раздел и устанавливаем флаг для него.
Создаём 2 раздел и устанавливаем флаг для него. Раздел будет использовать в качестве блока для RAID-массива и монтирования его в /boot .
Создаём 3 раздел, который также будет использоваться в качестве блока массива, в котором будет LVM.
В данном случае устанавливать флаг не обязательно, но если необходимо, то возможно его установить следующей командой.
Проверяем созданную таблицу.
Назначаем диску новый случайный GUID.
2. Удаление разделов первого диска из массивов
Проверям состояние массива
В системе используется 2 массива: md126 (точка монтирования /boot) — состоит из /dev/sda1 и /dev/sdb1 , md127 (LVM для swap и корня файловой системы) — состоит из /dev/sda2 и /dev/sdb2 .
Помечаем разделы первого диска, которые используются в каждом массиве, как сбойные.
Удаляем разделы блочного устройства /dev/sda из массивов.
Проверяем состояние массива после удаления диска.
3. Добавление разделов нового диска в массив
Следующим шагом необходимо добавить разделы нового диска в массивы для синхронизации. Смотрим текущее состояние разметки дисков.
Раздел /dev/sdc1 является bios_grub разделом и не участвует с создании массивов. В массивах будут задействованы только /dev/sdc2 и /dev/sdc3 . Добавляем данные разделы в соответствующие массивы.
После чего дожидаемся синхронизации массива.
Разметка дисков после добавления разделов в массив.
4. Удаление разделов второго диска из массивов
Помечаем разделы второго диска, которые используются в каждом массиве, как сбойные.
Удаляем разделы блочного устройства /dev/sda из массивов.
5. Копируем таблицу разметки GPT и синхронизируем массив
Для копирования таблицы разметки GPT воспользуемся утилитой sgdisk , которая входит в пакет для работы с разделами дисков и таблицей GPT — gdisk .
Установка gdisk для CentOS:
Установка gdisk для Debian/Ubuntu:
ВНИМАНИЕ: Для GPT первым указывается диск на который копируем разметку, вторым диском указывается диск с которого копируют разметку. Если перепутать диски, то изначально исправная разметка будет перезаписана и уничтожена.
Копируем таблицу разметки GPT.
Разметка дисков после переноса таблицы на диск /dev/sdd .
Далее добавляем каждый из разделов, участвующих в программных RAID-массивах.
Дожидаемся синхронизации массива.
После копирования разметки GPT на второй новый диск, разметка будет выглядеть следующим образом.
Далее устанавливаем GRUB на новые диски.
Установка для CentOS:
Установка для Debian/Ubuntu:
где X — буква диска, в нашем случае диски /dev/sdc и /dev/sdd .
Обновляем информацию о массиве.
Обновляем образ initrd :
Для CentOS:
Обновляем конфигурацию GRUB.
После выполненных действий старые диски можно извлекать.
6. Расширение файловой системы (ext4) корневого раздела
Разметка дисков до расширения файловой системы после переноса системы на диски 2 x 3TB (RAID-1).
Сейчас разделы /dev/sdc3 и /dev/sdd3 занимают 2.7 TB. Так как мы создавали новую разметку дисков с таблицей GPT, то размер 3 раздела был сразу задан на максимально возможное дисковое пространство, расширять раздел в данном случае не требуется.
- Расширить массив md126,
- Расширить PV (physical volume),
- Расширить LV (logical-volume) vg0-root,
- Расширить файловую систему.
После расширения массива md126 размер занимаемого пространства увеличился до 2.7 TB.
Расширяем physical volume.
Перед расширением проверяем текущее значение занимаемого пространства PV / dev/md126 .
Связаться со мной:
У нас есть сервер в котором 2 диска: /dev/sda и /dev/sdb. Эти диски собраны у нас в софтверный RAID1 с помощью mdadm. Один из дисков вышел из строя, в нашем случае это /dev/sdb.
I. Удаление диска из массива
Перед заменой диска желательно убрать диск из массива. Для начала проверим как размечен диск в массиве:
В данном случае массив собран так. Что md0 состоит из sda2 и sdb2, md1 из sda3 и sdb3, md2 из sda4 и sdb4. На этом сервере md0 это /boot, md1 — своп, md2 — корень. Убираем sdb из всех устройств.
Если разделы из массива не удаляются, это как в нашем случае. Mdadm не считает диск неисправным и использует его, и при удалении мы увидим ошибку, что устройство используется. В этом случае перед удалением помечаем диск как сбойный.
А затем снова выполним команды по удалению разделов из массива. Все, мы удалили сбойный диск из массива. Теперь можем писать в датацентр запрос на замену диска.
II. Добавление диска в массив после замены
1. Определение таблицы разделов(GPT или MBR) и перенос её на новый диск
После замены поврежденного диска нужно добавить новый диск в массив. Для этого надо определить какая у нас таблица разделов: GPT или MBR. Для этого будем использовать gdisk Установим gdisk:
Где /dev/sda — исправный диск находящийся в raid. В выводе будет примерно это для MBR:
И примерно это для GPT:
Перед добавлением диска в массив нам нужно на нем создать разделы в точности такие же как и на sda. В зависимости от разметки диска это делается по разному.
Копирование разметки для GPT:
Здесь надо быть внимательным. Первым пишется диск на который копируется разметка, а вторым с которого копируют. Если перепутать их местами, то разметка на изначально исправном диске будет уничтожена. Даем диску новый случайный UIDD:
Копирование разметки для MBR:
Здесь наоборот первым пишется диск с которого переносим разметку, а вторым на который переносим. Если разделы не видны в системе, то можно перечитать таблицу разделов командой:
2. Добавление диска в массив
Когда мы создали разделы на /dev/sdb, то можно добавлять диск в массив.
III. Установка загрузчика
После добавления диска в массив нужно установить на него загрузчик. Если сервер загружен в нормальном режиме, то это делается одной командой:
Если сервер загружен в recovery или rescue, т.е с live cd, то установка загрузчика выглядит следующим образом. Монтируем корневую файловую систему в /mnt:
Монтируем /dev, /proc и /sys:
Затем делаем chroot в примонтированную систему:
И устанавливаем grub на sdb:
Теперь можно попробовать загрузится в нормальный режим.
P.S. Если при установке загрузчика возникнет ошибка Could not find device for /boot/boot: not found or not a block device то вам сюда.
Лабораторная работа состоит из 3-х частей:
- Настройка работоспособной системы с использованием lvm, raid.
- Эмуляция отказа одного из дисков.
- Замена дисков на лету, с добавлением новых дисков и переносом разделов.
3 Удаление неисправного жёсткого диска
Для удаления /dev/sdb, пометим /dev/sdb1 и /dev/sdb2 как неисправные и удалим их из соответствующих массивов RAID (/dev/md0 и /dev/md1).
Для начала отметим /dev/sdb1 как неисправный:
Выходные данные в
должны выглядеть следующим образом:
Затем удалим /dev/sdb1 из /dev/md0:
Выходные данные должны быть следующими:
должно быть следующим:
Теперь проделаем тоже самое с /dev/sdb2 (который является частью /dev/md1):
Затем выключим систему:
и заменим старый жёсткий диск /dev/sdb на новый (по крайней мере объём нового жесткого диска должен совпадать со старым –если размер на несколько МБ меньше, то перестроить массивы будет невозможно).
Материалы для изучения
- RAID
- LVM
- Именование дисков в ОС Linux
- Что такое раздел
- Что такое таблица разделов и где она хранится
- Что такое grub
ВНИМАНИЕ
Данная лабораторная работа связана с такой тонкой материей как сохранность данных — это такая область, которая позволяет из-за мельчайшей ошибки — одной лишней буквы или цифры потерять все ваши данные.
Поскольку вы выполняете лабораторную работу вам ничего не грозит, разве что придется начать делать ее заново.
В реальной жизни все гораздо серьезнее, поэтому следует очень внимательно вводить имена дисков, понимая что именно вы выполняете текущей командой и с какими дисками работаете.
Второй важный момент — именование дисков и разделов: в зависимости от ситуации номера дисков могут отличаться от тех значений, что представлены в командах в лабораторной работе.
Так, например, если удалить диск sda из массива, а затем добавить новый диск, то новый диск будет отображаться в системе с именем sda. Если же выполнить перезагрузку перед добавлением нового диска, то новый диск будет иметь имя sdb, а старый станет именоваться sda
Лабораторная работа должна выполняться под суперпользователем (root) поскольку большая часть команд требует повышенных привилегий и не имеет смысла постоянно повышать привилегии через sudo.
Читайте также: