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

file -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

file -s / dev / sda

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

cat / 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

cat / 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>

Мы будем очень признательны за любую помощь по этому поводу.

Спасибо.

-2
задан 4 October 2015 в 06:31
2 ответа

Прежде всего, необходимо понять, что речь идет не о замене неисправного диска в массиве 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 нужно скопировать. Что ж, в этом случае это легко определить, исходя из размеров разделов и файловых систем, однако в другой системе df -k может показать это, но не из режима восстановления; вам необходимо нормально загрузиться, чтобы это работало.

Наконец,с помощью приведенных выше команд мы инструктируем 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

output:

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

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

Первым делом отредактируйте /boot/grub/grub.conf file, который будет читать GRUB, чтобы узнать, как он будет действовать. В моем случае мне пришлось заменить каждый экземпляр "root (hd0,0)" на "root (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;

, значит grub (GRand Unified Bootloader) установлен на sda.

Хотя в этом нет необходимости, вы можете удалить 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 из здесь

1
ответ дан 5 December 2019 в 21:25

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

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

.
0
ответ дан 5 December 2019 в 21:25

Теги

Похожие вопросы