Назад | Перейти на главную страницу

Программное обеспечение Debian RAID1 не работает, когда я извлекаю жесткий диск

Все выходные я пытался заставить RAID работать на старом серверном компьютере с контроллером Intel ICH7 / ICH7-R SATA-II, работающим с двумя жесткими дисками с RAID 1.

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

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

Под этим я подразумеваю физическое удаление дисков. Снимаю один диск, загружаюсь и все работает. Замените этот диск и удалите другой, загрузитесь, и он не работает.

Я предполагаю, что я неправильно установил GRUB на sda.

Я извлекаю жесткий диск sdb и загружаю установочный диск в режим восстановления. Затем я монтирую том RAID и перехожу в оболочку.

Сначала я попробую, что этот учебник что я следил за программным RAID, сказал мне сделать:

# grub
grub> device (hd0) /dev/sda

grub> root (hd0,0)
 Filesytem type is ext2fs, partition type 0xfd

grub> setup (hd0)
 Checking if "/boot/grub/stage1" exists ... no
 Checking if "/grub/stage1" exists ... no

Error 2: Bad file or directory type

Поэтому я пробую что-то другое:

При вводе:

grub-install /dev/sda

я получил

Searching for the GRUB installation directory ... found: /boot/grub
The file /boot/grub/stage1 not read correctly.

Я использую разделы ext4.

Что мне попробовать дальше?

Редактировать:

Вот результат из fdisk -l

root@debian:~# fdisk -l

    Disk /dev/sda: 153.4 GiB, 164696555520 bytes, 321672960 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disklabel type: dos
    Disk identifier: 0x8225e6c2

    Device     Boot   Start       End   Sectors   Size Id Type
    /dev/sda1  *       2048    194559    192512    94M fd Linux raid autodetect
    /dev/sda2        194560   4194303   3999744   1.9G fd Linux raid autodetect
    /dev/sda3       4194304 321671167 317476864 151.4G fd Linux raid autodetect

    Disk /dev/sdb: 153.4 GiB, 164696555520 bytes, 321672960 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disklabel type: dos
    Disk identifier: 0x3cfa42ad

    Device     Boot   Start       End   Sectors   Size Id Type
    /dev/sdb1  *       2048    194559    192512    94M fd Linux raid autodetect
    /dev/sdb2        194560   4194303   3999744   1.9G fd Linux raid autodetect
    /dev/sdb3       4194304 321671167 317476864 151.4G fd Linux raid autodetect

    Disk /dev/md2: 151.3 GiB, 162413936640 bytes, 317214720 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disk /dev/md0: 93.9 MiB, 98435072 bytes, 192256 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disk /dev/md1: 1.9 GiB, 2046820352 bytes, 3997696 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes

Вот результат mdadm --detail --scan

ARRAY /dev/md/2 metadata=1.2 name=repeater:2 UUID=cd8443a8:ca0b3a29:05496e49:b063704f
ARRAY /dev/md/0 metadata=1.2 name=repeater:0 UUID=c8a204e2:3e5a5e2c:50a136c7:d43777a7
ARRAY /dev/md/1 metadata=1.2 name=repeater:1 UUID=25bebb1e:c7f3245d:128bee5d:d58d9100

Вот результат из lsblk

NAME    MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
fd0       2:0    1     4K  0 disk  
sda       8:0    0 153.4G  0 disk  
├─sda1    8:1    0    94M  0 part  
├─sda2    8:2    0   1.9G  0 part  
└─sda3    8:3    0 151.4G  0 part  
  └─md2   9:2    0 151.3G  0 raid1 /
sdb       8:16   0 153.4G  0 disk  
├─sdb1    8:17   0    94M  0 part  
│ └─md0   9:0    0  93.9M  0 raid1 /boot
├─sdb2    8:18   0   1.9G  0 part  
│ └─md1   9:1    0   1.9G  0 raid1 [SWAP]
└─sdb3    8:19   0 151.4G  0 part  
sr0      11:0    1  1024M  0 rom 

РЕДАКТИРОВАТЬ 2: Вот результат cat /proc/mdstat

root@debian:~# cat /proc/mdstat
Personalities : [raid1] 
md1 : active (auto-read-only) raid1 sdb2[1]
      1998848 blocks super 1.2 [2/1] [_U]

md0 : active raid1 sdb1[1]
      96128 blocks super 1.2 [2/1] [_U]

md2 : active raid1 sda3[0]
      158607360 blocks super 1.2 [2/1] [U_]
      bitmap: 2/2 pages [8KB], 65536KB chunk

unused devices: <none>

Из вашего вывода lsblk и / proc / mdstat я вижу, что у вас деградировали все RAID. Видеть [_U] или [U_]? В каждом RAID заполняется только одна строка (отмечена U), другой нет (отмечен _).

Итак, похоже, мое предположение было правильным: у вас есть обычная файловая система / boot только на одном диске, который теперь называется sdb. В вашем sda есть раздел, предназначенный для того же, но этот раздел, похоже, не содержит действительной и правильно заполненной загрузочной файловой системы.

Если вы уверены, что оба ваших диска в порядке, вы можете повторно добавить их в рейды. Нужно стереть суперблоки md raid с неиспользуемых разделов. Инструмент mdadm будет жаловаться, если вы попытаетесь стереть метки с активных дисков, но все же стоит дважды проверить свои команды. Из ваших выходных данных / proc / mdstat и fdisk мы делаем вывод:

  • md0 (boot) должен быть на sda1 и sdb1, но работает только sdb1.
  • md1 (swap) должен быть на sda2 и sdb2, но работает только sdb2.
  • md2 (root) должен быть на sda3 и sdb3, но работает только sda3 - что странно, это на другом диске.

Чтобы стереть ярлык с sda1, sda2, sdb3 (все неиспользуемые в настоящее время), вы используете:

mdadm --zero-superblock /dev/sda1
mdadm --zero-superblock /dev/sda2
mdadm --zero-superblock /dev/sdb3

Он может что-то пожаловаться, вам может потребоваться добавить --force к команде, но я думаю, что в этом нет необходимости. Говорю еще раз, все перепроверяйте, чтобы стирать следы рейдов только на неиспользуемых устройствах!

Затем вы добавляете эти неиспользуемые устройства в их массивы:

mdadm --add /dev/md0 /dev/sda1
mdadm --add /dev/md1 /dev/sda2
mdadm --add /dev/md2 /dev/sdb3

Повторная синхронизация начнется в фоновом режиме. Также обратите внимание, что он обнаружит, что все массивы используют одни и те же устройства, поэтому он, например, задержит повторную синхронизацию md2 до завершения md1. Вы увидите прогресс повторной синхронизации в / proc / mdstat.

По завершении повторной синхронизации все устройства в / proc / mdstat будут иметь [UU] после них указывается, что эти массивы находятся в оптимальном состоянии.

Ваш / boot работает, поэтому sdb1 содержит правильно заполненную файловую систему. Когда ваш / boot md0 находится в оптимальном состоянии, можно сказать, что sda1 теперь имеет те же данные (немного отличается только суперблок, потому что разные устройства поддержки в одном массиве имеют разные номера строк). Вы можете переустановить grub вручную:

device (hd0) /dev/sda
root (hd0,0)
setup (hd0)

Я настоятельно рекомендую вам настроить mdadm для периодической проверки массива (скажем, раз в неделю или раз в месяц), чтобы на раннем этапе выявлять ошибки чтения диска. Однажды я решил проблему, когда на обоих raid-дисках были поврежденные блоки (в разных местах), и регулярная проверка могла бы избежать этой проблемы, извлекая неисправный диск раньше, даже когда плохой блок находится в редко используемой части файловой системы. Это было сложно. Чтобы запустить проверку, выполните

echo "check" >> /sys/block/md127/md/sync_action

и ищите ошибки в журналах dmesg и mdmon.

НЕ просто загрузите файловую систему dd на другое устройство. Две файловые системы с одинаковыми метками и одинаковыми UUID не являются нормальным состоянием. Это разрешено временно во время восстановления или какого-либо другого процесса криминалистики, но не для нормально запущенного / boot. Ubuntu монтирует разделы по UUID (проверьте / etc / fstab), а как вы угадаете, какой из них будет смонтирован в следующий раз? Невозможно сказать, это случайно, но это не должно быть случайным.

Доступ к устройствам поддержки рейда в некоторой степени заблокирован кодом md в ядре, поэтому, пока они находятся в рейде, система видит только md0, которое является одним устройством, и у вас не будет проблем.

Чтобы поддерживать режим без рейда / загрузки на обоих дисках, вам в основном необходимо клонировать файловую систему при каждом обновлении загрузки, а затем всегда менять UUID и метку. Это чревато ошибками и неудобно. / Boot как RAID1 - это нормально.

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

Вам необходимо установить загрузчик (grub stage1) на обе диски. Вы должны сделать это вручную, так как загрузчик находится вне любого раздела и, следовательно, вне любого массива MDRAID.

Пожалуйста, введите следующую команду: grub-install /dev/sda и попробуйте снова загрузиться sda