CentOS 6.7 Полностью удалить RAID. Клоуд диски и загрузиться с /dev/sda

CentOS 6.7 Полностью удалить RAID. Клоуд диски и загрузиться с /dev/sda

Я полный новичок в Linux. Мне достался выделенный сервер, размещенный где-то в Германии. Операционная система — CentOS версии 6.7 (Final) 64bit. На сервере два диска по 3 ТБ в конфигурации программного RAID-1. Ситуация, с которой я имею дело, заключается в том, что, согласно SMART, второй диск вот-вот выйдет из строя, однако у предыдущего администратора были некоторые проблемы с RAID, и он полностью удалил из него компоненты /dev/sda, так что теперь система загружается с одного диска (деградировавшего) RAID-1 массива со всеми файлами на /dev/sdb (диск, который вот-вот выйдет из строя). Более того, он полностью стер /dev/sda. Чтобы решить эту проблему, мне нужно выполнить следующие задачи:

  1. Переразметьте /dev/sda так, чтобы он был таким же, как /dev/sdb.
  2. Скопируйте (клонируйте) все данные из /dev/sdb в /dev/sda.
  3. Полностью удалите конфигурацию RAID-1.
  4. Настройте систему на загрузку с /dev/sda как с собственного диска (не /dev/md*).
  5. Убедитесь, что все работает нормально.
  6. Безопасное стирание /dev/sdb.
  7. Попросите службу поддержки заменить неисправный диск (/dev/sdb) на новый.
  8. Повторно создайте и синхронизируйте массив RAID-1.

Проблема в том, что я не знаю, как выполнять эти задачи в Linux. Обратите внимание, что я получаю доступ к системе удаленно, поэтому я не могу позволить себе ошибку, которая сделает систему незагружаемой. Однако у меня есть доступ к системе восстановления (небольшой Linux, загружаемый с DHCP с доступом к базовой системе).

Вот некоторые (возможно полезные) выходные данные команд и файлы конфигурации:

fdisk -l

Disk /dev/sdb: 3000.6 GB, 3000592982016 bytes
255 heads, 63 sectors/track, 364801 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x000e76a6

Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1        1567    12582912+  83  Linux
/dev/sdb2            1567        1633      524288+  fd  Linux raid autodetect
/dev/sdb3            1633      135307  1073741824+  fd  Linux raid autodetect
/dev/sdb4          135307      364802  1843413464    f  W95 Ext'd (LBA)
/dev/sdb5          135308      364802  1843412440   fd  Linux raid autodetect

Disk /dev/sda: 3000.6 GB, 3000592982016 bytes
255 heads, 63 sectors/track, 364801 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x00074207

Device Boot      Start         End      Blocks   Id  System

Disk /dev/md3: 1887.7 GB, 1887654199296 bytes
2 heads, 4 sectors/track, 460853076 cylinders
Units = cylinders of 8 * 512 = 4096 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x00000000

Disk /dev/md1: 536 MB, 536858624 bytes
2 heads, 4 sectors/track, 131069 cylinders
Units = cylinders of 8 * 512 = 4096 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x00000000

Disk /dev/md2: 1099.5 GB, 1099511488512 bytes
2 heads, 4 sectors/track, 268435422 cylinders
Units = cylinders of 8 * 512 = 4096 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x00000000

файл -s /dev/sdb

/dev/sdb: x86 boot sector; GRand Unified Bootloader, stage1 version 0x3,     stage2 address 0x2000, stage2 segment 0x200, GRUB version 0.94; partition 1: ID=0x83, starthead 32, startsector 2048, 25165825 sectors; partition 2: ID=0xfd, starthead 254, startsector 25169920, 1048577 sectors; partition 3: ID=0xfd, starthead 254, startsector 26220544, 2147483649 sectors; partition 4: ID=0xf, starthead 254, startsector 2173706240, 3686826928 sectors, code offset 0x48

файл -s /dev/sda

/dev/sda: x86 boot sector, code offset 0xb8

кот /etc/fstab

proc /proc proc defaults 0 0
none /dev/pts devpts gid=5,mode=620 0 0
/dev/md0 none swap sw 0 0
/dev/md1 /boot ext3 defaults 0 0
/dev/md2 / ext4 defaults 0 0
/dev/md3 /home ext4 defaults 0 0

cat /boot/grub/grub.conf

timeout 5
default 0

title CentOS (2.6.32-573.7.1.el6.x86_64)
root (hd0,1)
kernel /vmlinuz-2.6.32-573.7.1.el6.x86_64 ro root=/dev/md2 rd_NO_LUKS rd_NO_DM nomodeset crashkernel=auto SYSFONT=latarcyrheb-sun16 LANG=en_US.UTF-8 KEYTABLE=de
initrd /initramfs-2.6.32-573.7.1.el6.x86_64.img

title CentOS (2.6.32-504.1.3.el6.x86_64)
root (hd0,1)
kernel /vmlinuz-2.6.32-504.1.3.el6.x86_64 ro root=/dev/md2 rd_NO_LUKS rd_NO_DM nomodeset crashkernel=auto SYSFONT=latarcyrheb-sun16 LANG=en_US.UTF-8 KEYTABLE=de
initrd /initramfs-2.6.32-504.1.3.el6.x86_64.img

кот /proc/mdstat

Personalities : [raid1]
md2 : active raid1 sdb3[1]
      1073741688 blocks super 1.0 [2/1] [_U]

md1 : active raid1 sdb2[1]
      524276 blocks super 1.0 [2/1] [_U]

md3 : active raid1 sdb5[1]
      1843412304 blocks super 1.0 [2/1] [_U]

unused devices: <none>

Любая помощь в этом вопросе будет высоко оценена.

Спасибо.

решение1

Прежде всего, необходимо понимать, что речь идет не о замене неисправного диска в массиве RAID-1, а о том, как полностью удалить массив RAID, клонировать диск, который вот-вот выйдет из строя, а затем загрузить систему с исправного диска без какой-либо конфигурации RAID. Причина такого подхода в том, что первый диск (sda), который является исправным диском, полностью пуст, без разделов и файловых систем, и когда я добавляю его в массив, он не синхронизируется (не перестраивается), вероятно, из-за ошибок чтения на втором диске (sdb). Более того, второй диск (плохой) — это то место, с которого загружается система. Действия, необходимые для выполнения этой задачи, довольно просты, если вы знаете Linux и его команды, однако процедура включает в себя задачи по разбиению на разделы, клонированию и установке MBR, которые уничтожат ваши данные, если вы не будете достаточно осторожны. Наконец, следующая процедура специфична для конфигурации дисков, описанной в вопросе, но она должна работать и в других системах, если вы аккуратно подставите необходимые устройства и имена разделов.

Вот процедура:

1. Загрузите систему в режиме восстановления.

Поскольку мы собираемся клонировать данные с загрузочного диска системы, нам не нужно беспокоиться о заблокированных файлах или подобных вещах. Лучший способ сделать это — загрузиться в режиме восстановления. К счастью, моя компания, предоставляющая хостинг серверов, поддерживает это очень простым способом. На сервере, к которому у вас есть прямой доступ (без удаленного), это будет что-то вроде загрузки с Live CD или выбора «Режима восстановления» в меню загрузки.

2. Подготовьте первый диск (/dev/sda) для клонирования данных.

Чтобы подготовить sda, нам нужно получить информацию о разделах из sdb. На самом деле этот шаг не обязателен, поскольку наша цель — загрузить систему без какой-либо конфигурации RAID или без какой-либо связи с sdb, если хотите, поэтому, если текущая схема разделов не та, что нам нужна, это возможность ее изменить. Единственное, что нам нужно иметь в виду, это то, что новые разделы должны иметь достаточно места для хранения данных из sdb. Однако разбиение на разделы в Linux требует некоторых глубоких знаний о выравнивании и подобных вещах, и поскольку sdb уже правильно разбит на разделы, мне показалось проще сделать то же самое в sda. Для этого нам сначала нужно просмотреть разделы в sdb, для этого я использовал parted.

Примечание:Самая сложная задача при исследовании того, как работать с Linux, — это найти, какую команду (из многих) лучше всего использовать. Например, существует довольно много команд и утилит для разбиения на разделы, и выбор той, которую использовать, требует значительного времени на чтение и сравнение информации. Я выбрал parted, потому что он показывает файловую систему вместе с разделами и потому что он лучше поддерживает большие диски? (Я не уверен).

# parted /dev/sdb
(parted) unit s
(parted) print

выход:

Model: ATA ST3000DM001-1CH1 (scsi)
Disk /dev/sdb: 5860533168s
Sector size (logical/physical): 512B/4096B
Partition Table: msdos

Number  Start        End          Size         Type      File system  Flags
 1      2048s        25167872s    25165825s    primary
 2      25169920s    26218496s    1048577s     primary   ext3         raid
 3      26220544s    2173704192s  2147483649s  primary   ext4         raid
 4      2173706240s  5860533167s  3686826928s  extended               lba
 5      2173708288s  5860533167s  3686824880s  logical   ext4         raid

(parted) quit

Как мы видим, sdb имеет таблицу разделов типа msdos, что означает, что мы можем создать до 4 основных разделов на диске. В этом случае он имеет 3 основных раздела (1,2,3) и один расширенный (4), который содержит логический раздел (5).

Следующий шаг — создание таких же разделов на sda:

# parted /dev/sda
(parted) unit s
(parted) mkpart primary 2048 25167872
(parted) mkpart primary 25169920 26218496
(parted) mkpart primary 26220544 2173704192
(parted) mkpart extended 2173706240 5860533167
(parted) mkpart logical 2173708288 5860533167
(parted) quit

Как видите, я использовал те же начальные и конечные сектора из sdb, конечно, диски те же самые, в противном случае вам нужно будет расположить сектора соответствующим образом.

Теперь нам нужно сообщить системе об изменениях разделов в sda:

# partprobe /dev/sda

Наконец, нам нужно создать файловые системы на sda. Вероятно, этот шаг вообще не требуется, поскольку мы собираемся клонировать разделы из sdb, поэтому процедура клонирования также скопирует информацию о файловой системе, однако это не повредит.

# mkfs -t ext3 /dev/sda2
# mkfs -t ext4 /dev/sda3
# mkfs -t ext4 /dev/sda5

Обратите внимание, что мы не создали файловую систему в разделе 4 (sda4). Это потому, что это расширенный раздел, который содержит логический раздел (sda5), нам нужно создать файловую систему только на логическом.

Теперь у нас есть раздел sda, и он готов к хранению наших данных.

3. Копирование данных из sdb.

Этот шаг потребовал наибольшего исследования, в основном потому, что существует множество способов копирования данных. Вероятно, cp -a было бы достаточно, однако мне не удалось найти никакой надежной информации о том, как обращаться со скрытыми файлами, ссылками и т. д., чтобы правильно загрузить систему. Поэтому я решил использовать утилиту побайтового копирования (клонирования) вместо команды копирования файлов. Я использовал утилиту dd:

# dd if=/dev/md1 of=/dev/sda2 bs=512 conv=noerror,sync,notrunc
# dd if=/dev/md2 of=/dev/sda3 bs=512 conv=noerror,sync,notrunc
# dd if=/dev/md3 of=/dev/sda5 bs=512 conv=noerror,sync,notrunc

Примечания: Прежде всего, обратите внимание, что мы копируем с /dev/md*, а не с /dev/sdb*. Это потому, что наш диск sdb на самом деле является частью массива RAID-1. Это была еще одна часть, по которой мне не удалось найти никакой надежной информации. Например, система «видит» /dev/sdb2, /dev/sdb3 и /dev/sdb5, которые являются разделами, на которых хранятся наши данные, но согласно файлу /etc/fstab она монтирует /dev/md1, /dev/md2 и /dev/md3, поэтому я предположил, что лучше копировать с /dev/md*. Еще одна вещь, на которую вам нужно обратить внимание, это то, куда на sda вы собираетесь копировать данные. Другими словами, куда на sda нужно скопировать /dev/md1,2,3. Что ж, в этом случае это легко выяснить на основе размеров разделов и файловых систем, однако в другой системедф -кможет показать это, но не из режима восстановления; для этого вам нужно загрузиться в обычном режиме.

Наконец, с помощью приведенных выше команд мы указываем dd клонировать каждый раздел отдельно байт за байтом, не останавливаясь при ошибках чтения (параметр noerror). Это, конечно, может привести к невозможности загрузки системы, если есть какая-либо ошибка чтения данных на sdb (которая есть в этом случае), однако, прежде чем я закончу использовать dd, я использовал некоторые методы, чтобы найти, какие файлы были затронуты, и было ли безопасно продолжить клонирование. Эта задача выходит за рамки этого ответа, но хорошее место для начала —здесь.

Еще один важный момент, на который следует обратить внимание, — это параметр размера блока (bs). Согласно документации dd, вам следует установить bs на 512 байт, поскольку если возникнет ошибка чтения, а она возникнет, то на целевом диске будут «уничтожены» только 512 байт вместо большей области, однако процесс будет медленнее. Опять же, мне не удалось найти никакой надежной информации по этому поводу, и, вероятно, размер блока в 4096 байт даст те же результаты.

Наконец, dd не выводит никаких данных во время своей работы, и это займет довольно много времени из-за размера разделов. Если вы хотите увидеть, где он находится, вы должны открыть новый сеанс консоли (в моем случае новый удаленный сеанс ssh, поскольку я делаю это удаленно) и выполнить команду:

# kill -USR1 $(pidof dd)

Это заставит dd вывести текущий прогресс в первом сеансе консоли.

4. Сделайте sda загрузочным.

Это довольно просто сделать. Для начала вам нужно смонтировать необходимые точки монтирования на sda:

# mount -t ext4 /dev/sda3 /mnt
# mount -t proc proc /mnt/proc
# mount -t sysfs sys /mnt/sys
# mount -o bind /dev /mnt/dev
# mount -t ext3 /dev/sda2 /mnt/boot

Примечание: последняя команда не требуется, если в вашей системе нет отдельного раздела для /boot.

Далее вам нужно стать пользователем root на диске /dev/sda, сейчас вы являетесь пользователем root в системе восстановления.

# chroot /mnt /bin/bash

Далее нам нужно обновить наш файл etc/mtab. Я не знаю, зачем это делать, я нашел это в другом руководстве по спасению без объяснений.

# grep -v rootfs /proc/mounts > /etc/mtab

Далее нам нужно установить GRUB в sda.

# grub-install --recheck /dev/sda

выход:

Probing devices to guess BIOS drives. This may take a long time.
Installation finished. No error reported.

Сейчас у нас есть sda, готовая к загрузке, однако нужно выполнить еще несколько шагов, чтобы система знала, где найти необходимый файл после загрузки из sda.

Первое, что нужно сделать, это отредактировать/boot/grub/grub.confфайл, который GRUB будет читать, чтобы узнать, как он будет действовать. В моем случае мне пришлось заменить каждый"корень (hd0,0)"пример с"корень (hd0,1)"и каждый"/dev/md2"пример с"/dev/sda3".

grub.confможет быть очень запутанным, особенно для тех, кто раньше им не пользовался. Самая запутанная часть — это параметры root, в grub есть два разных значения слова root. Когда он появляется как «root (hd0,1)», он сообщает grub, где находится его корневой каталог, чтобы найти необходимые ядра Linux и инструкции по их загрузке. Многие путают его с корневым каталогом «/» в системе, когда она полностью загружена, но grub здесь нужно, где находится каталог /boot. В этом случае у меня есть отдельный раздел (/dev/sda2), который содержит каталог /boot, и поскольку /dev/sda2 — это второй раздел первого диска, мне нужно сообщить grub именно это, но начиная с нуля (первый раздел — 0, второй — 1 и т. д.), поэтому команда «root (hd0,1)» сообщает grub, что он найдет нужные файлы на втором разделе первого диска.

Когда root отображается как "/dev/", это сообщает ядру, где будет находиться корень файловой системы, то есть "/", когда система полностью загружена. Так что в этом случае мы вводим имя раздела (как его видит linux), где находится "/", в моем случае /dev/sda3.

Наконец, нам нужно отредактировать/etc/fstabфайл, чтобы сообщить системе, что и где монтировать при запуске.

В моем случае мне пришлось заменить все записи "/dev/md*" на соответствующие разделы "/dev/sda*", которые были:

/dev/md1 --> /dev/sda2 /dev/md2 --> /dev/sda3 /dev/md3 --> /dev/sda5

5. Проверьте и отключите загрузку с sdb.

Если вы, как и я, подвержены компульсивным действиям, то вам, возможно, стоит попробовать побегать.

# file -s /dev/sda

чтобы увидеть, установлен ли grub на sda. Если вы получаете вывод типа:

/dev/sda: sticky x86 boot sector; GRand Unified Bootloader, stage1 version 0x3, stage2 address 0x2000, stage2 segment 0x200, GRUB version 0.94;

затем на sda устанавливается grub (GRand Unified Bootloader).

Хотя это не обязательно, вы можете захотеть удалить grub из sdd. Я сделал это, потому что если что-то в конфигурации выше не так, то система загрузится с sdb, и это может сбить с толку. Чтобы удалить grub из sdb, я использовал dd:

# dd if=/dev/zero of=/dev/sdb bs=446 count=1

Это запишет ноль в первые 446 байт диска, где находится grub на дисках с таблицами разделов msdos.

$ file -s /dev/sdb

Это позволит убедиться, что grub удален.

6. Выйдите из chroot и размонтируйте все.

# exit
# umount /mnt/boot
# umount /mnt/dev
# umount /mnt/sys
# umount /mnt/proc
# umount /mnt

Если во время выполнения команд выше возникает какая-либо ошибка, это означает, что что-то не было завершено или пошло не так в нашей сессии chroot, и нам, вероятно, нужно начать заново.

7. Перезагрузка.

Теперь скрестите пальцы и перезагрузитесь.

# reboot

Если вам удалось войти на сервер с вашими исходными учетными данными root и все работает нормально (базы данных, веб-сайты и т. д.), то вы успешно загрузились с sda.

8. Подготовьте sdb к замене.

В моем случае я хотел стереть все данные с sdb, прежде чем просить службу поддержки заменить его. Кроме того, мне нужно было полностью удалить конфигурацию RAID из системы, чтобы создать новую с нуля, когда новый диск будет на месте. Я начал с запуска parted, чтобы удалить разделы:

# parted /dev/sdb
# (parted) rm 5
# (parted) rm 4
# (parted) rm 2
# (parted) rm 2
# (parted) rm 1
# (parted) quit

Затем я заметил, что все конфигурации RAID также были удалены, поэтому я предположил, что определение RAID было внутри разделов, поэтому я не приступил к дальнейшим действиям для этого. Затем я защитил стертый sdb. Есть много способов сделать это. Я выбрал/dev/urandomметод изздесь

решение2

Может быть, лучше не пытаться этого делать, а вместо этого начать все заново или что-то в этом роде. Я бы не стал этого делать, когда был новичком в Linux.

При этом все, что вам нужно сделать, это разбить и добавить /dev/sda обратно в массив raid, а после его перестройки заменить /dev/sdb. Убедитесь, что grub есть на обоих дисках, и что BIOS попробует оба диска при загрузке.

Связанный контент