Все выходные я пытался заставить 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 мы делаем вывод:
Чтобы стереть ярлык с 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