Title: История о том, как я неудачно RAID восстанавливал
Author: Viva Calman
Date: 2026-05-19 00:50:15
Correction code: 177914102672646

Это будет просто история. История о том, как у меня рассыпался RAID на сервере, и как я, в попытке его восстановить, "потерял" все данные на нем. Казалось бы, у меня довольно большой опыт работы в -nix системах, в голове достаточно много знаний, есть понимание, что надо внимательно читать и документацию и выхлоп консоли, но все же иногда случаются досадные промахи, по типу этого. Так что не буду стесняться и напишу все, как было (по крайней мере то, что могу вспомнить, так как это было полтора месяца назад, как летит время).

Несмотря на то, что я написал "потерял", данные у меня все же сохранились, так как я все же оказался достаточно сообразительным, и перед тем, как делать манипуляции с дисками, сделал полный бэкап. Да, неудачное восстановление уничтожило данные на самом массиве, но это не была безвозвратная потеря. Так что, из ущерба у меня лишь удар по самооценке и несколько часов времени. Из приобретений — некоторое количество опыта, по крайней мере из разряда "как не надо делать".

Началось все с того, что я заглянул в dmesg и увидел, что один из дисков, входящих в мой RAID1C перестал подавать признаки жизни. Система, конечно, выезжала на втором, но ежу понятно, надежность стала на уровне "авось". Так сложилось, что это все совпало с моментом, когда я собрался менять процессор (для того, чтобы наконец то запустить на сервере виртуалку в vmd), поэтому удалось обойтись без лишней операции сборки-разборки. Но, если замена CPU прошла удачно, в случае с дисками все пошло наперекосяк.

Вообще, процедура должна была быть достаточно простой - нужно всего лишь поменять диск, добавить его в имеющийся RAID и скомандовать "восстанавливайся", но тут то я и накосячил. Диск я вставил (такой же, как помер, кстати), сделал на нем такую же таблицу разделов (более того, перенес ее с рабочего диска, благо с помощью disklabel это сделать легко), но почему-то восстановление работать отказывалось.

Не могу сказать, что именно пошло не так. По итогу я каким-то пинком (а именно, подсунув на второй диск десять мегабайт первого) сумел запустить восстановление, но, похоже что восстановил не с первого диска на второй, а наоборот. Как я писал выше, данные я потерял. Возможно, из-за того, что профукал уникальность DUID-ов. EPIC, что называется, FAIL.

Что ж. я был к этому готов, бэкап был сделан заранее, так что никто не умер, кроме зря потраченного времени. Но, желая все же понять, "как надо", я повторил операцию восстановления RAID1C на виртуальной машине. Получилось успешно, так что вся методика будет приведена ниже.

Смотрим подключенные к машине диски. Перед этим я собрал RAID1C, после чего заменил один из дисков таким же, но неинициализированным. В данном случае, это wd2.

test# sysctl hw.disknames
hw.disknames=wd0:bc846e561d7b8583,wd1:b3f8bc68a542ab20,wd2:,sd0:d45877e226540ec5,fd0:

Так как на этой машине я не заморачивался скриптом, поднимающим RAID1C, я поднял его вручную, с одним диском:

test# bioctl -c 1C -l wd1a softraid0
softraid0: trying to bring up sd1 degraded
Passphrase: 
softraid0: trying to bring up sd1 degraded
softraid0: RAID 1C volume attached as sd1

Теперь копируем disklabel с живого диска в файл, после чего применяем полученный файл к новому диску, создавая там симметричную таблицу разделов. Выводить команду disklabel не обязательно, тут я сделал это для наглядности.

test#  disklabel wd1 > file.txt
test# cat file.txt
# /dev/rwd1c:
type: ESDI
disk: ESDI/IDE disk
label: QEMU HARDDISK
duid: b3f8bc68a542ab20
flags:
bytes/sector: 512
sectors/track: 63
tracks/cylinder: 64
sectors/cylinder: 4032
cylinders: 520
total sectors: 2097152
boundstart: 64
boundend: 2097119


16 partitions:
#                size           offset  fstype [fsize bsize   cpg]
  a:          2097055               64    RAID
  c:          2097152                0  unused


test# fdisk -gy wd2
Writing GPT.


test# disklabel -R  wd2 file.txt


test# disklabel wd1
# /dev/rwd1c:
type: ESDI
disk: ESDI/IDE disk
label: QEMU HARDDISK
duid: b3f8bc68a542ab20
flags:
bytes/sector: 512
sectors/track: 63
tracks/cylinder: 64
sectors/cylinder: 4032
cylinders: 520
total sectors: 2097152
boundstart: 64
boundend: 2097119


16 partitions:
#                size           offset  fstype [fsize bsize   cpg]
  a:          2097055               64    RAID
  c:          2097152                0  unused


test# disklabel wd2 
# /dev/rwd2c:
type: ESDI
disk: ESDI/IDE disk
label: QEMU HARDDISK
duid: a8086627332ad705
flags:
bytes/sector: 512
sectors/track: 63
tracks/cylinder: 32
sectors/cylinder: 2016
cylinders: 1040
total sectors: 2097152
boundstart: 64
boundend: 2097119


16 partitions:
#                size           offset  fstype [fsize bsize   cpg]
  a:          2097055               64    RAID
  c:          2097152                0  unused

Смотрим статус нашего RAID1C. Видим,ч то он degraded.

test# bioctl -iv softraid0
Volume      Status               Size Device
softraid0 0 Online        10737115136 sd0     CRYPTO
          0 Online        10737115136 0:0.0   noencl <wd0a>
                                                     'unknown serial'
softraid0 1 Degraded       1073421824 sd1     RAID1C 
          0 Online         1073421824 1:0.0   noencl <wd1a>
                                                     'unknown serial'
          1 Offline          key disk 1:1.0   noencl <>
                                                     'unknown serial'

Запускаем восстановление командой bioctl. В параметры она принимает новый диск и имя устройства RAID.

test# bioctl -R /dev/wd2a sd1
softraid0: rebuild of sd1 started on wd2a


test# bioctl -iv softraid0
Volume      Status               Size Device
softraid0 0 Online        10737115136 sd0     CRYPTO
          0 Online        10737115136 0:0.0   noencl <wd0a>
                                                     'unknown serial'
softraid0 1 Degraded       1073421824 sd1     RAID1C 
          0 Online         1073421824 1:0.0   noencl <wd1a>
                                                     'unknown serial'
          1 Offline          key disk 1:1.0   noencl <>
                                                     'unknown serial'

И, как видим, массив снова online. Файлы не потерялись

test# bioctl -iv softraid0
Volume      Status               Size Device
softraid0 0 Online        10737115136 sd0     CRYPTO
          0 Online        10737115136 0:0.0   noencl <wd0a>
                                                     'unknown serial'
softraid0 1 Online         1073421824 sd1     RAID1C 
          0 Online         1073421824 1:0.0   noencl <wd1a>
                                                     'unknown serial'
          1 Online         1073421824 1:1.0   noencl <wd2a>
                                                     'unknown serial'

Короче говоря, не все так страшно, как казалось. Но накосячить можно, и мой опыт тому пример.

Кстати, OpenBSD 7.9, вышедшая недавно, теперь позволяет прямо в инсталляторе, без какого-либо бубна поставить систему на шифрованный раздел. Удобно, теперь не нужно совершать лишние телодвижения.

^HOME