У меня есть сервер Sun T5220 со встроенной картой LSI и двумя дисками, которые были в зеркале RAID 1. Данные сейчас не важны, но у нас был неисправный диск, и мы пытаемся понять, как это сделать на самом деле, если нам нужно было восстанавливаться после сбоя.
Исходная ситуация выглядела так:
# raidctl -l c1t0d0 Volume Size Stripe Status Cache RAID Sub Size Level Disk ---------------------------------------------------------------- c1t0d0 136.6G N/A DEGRADED OFF RAID1 0.1.0 136.6G GOOD N/A 136.6G FAILED
Зеленый свет на диске 0.0.0. Находит / загорается диск 0.1.0. Итак, я знаю, что у меня плохой диск и какой именно. Сервер явно загружается.
Сначала мы попытались вставить новый диск. Этот диск был получен из неизвестного источника. Format его не увидит, cfgadm -al не увидит, поэтому raidctl -l не увидит. Думаю, это плохо. Пробовали другой диск с другого запасного сервера:
# raidctl -c c1t1d0 c1t0d0 (where t1 is my good disk - 0.1.0) Disk has occupied space.
Также разные варианты синтаксиса ничего не меняют:
# raidctl -C "0.1.0 0.0.0" -r 1 1 Disk has occupied space. # raidctl -C "0.1.0 0.0.0" 1 Disk has occupied space.
Хорошо. Возможно, это связано с тем, что на диске с запасного сервера уже был RAID 1. Ага, я вижу в raidctl еще один том:
# raidctl -l Controller: 1 Volume:c1t1d0 (this is my server's root mirror) Volume:c1t132d0 (this is the foreign root mirror) Disk: 0.0.0 Disk: 0.1.0 ...
Нет проблем. Меня не интересуют данные, я просто удалю чужое зеркало.
# raidctl -d c1t132d0 (warning about data deletion but it works)
На этом этапе / usr / bin / binaries в ужасе. Под этим я подразумеваю ls -l / usr / bin /, который показывает 1.4k, но cat /usr/bin/which
дает мне новую строку. Отлично, я просто уничтожил двоичные файлы (то есть: двоичные файлы в памяти все еще работают)? Я отскакиваю от коробки. Все возвращается хорошо. Черт возьми. В любом случае, вернемся к воссозданию моего зеркала.
# raidctl -l Controller: 1 Volume:c1t1d0 (this is my server's root mirror) Disk: 0.0.0 Disk: 0.1.0 ...
Человек говорит, что можно удалить зеркало, и оно разделится. Хорошо, удалю корневое зеркало.
# raidctl -d c1t0d0 Array in use. (this might not be the exact error)
Я погуглил и обнаружил, что вы, конечно, не можете этого сделать (даже с -f) при загрузке с зеркала. Хорошо. я boot cdrom -s
и удалил том.
Теперь у меня есть один диск с типом «LSI-Logical-Volume» на c1t1d0 (где находятся мои данные) и совершенно новый «Hitachi 146GB» на c1t0d0 (на который я пытаюсь отразить):
(booted off the CD) # raidctl -c c1t1d0 c1t0d0 (man says it's source destination for mirroring) Illegal Array Layout. # raidctl -C "0.1.0 0.0.0" -r 1 1 (alt syntax per man) Illegal Array Layout. # raidctl -C "0.1.0 0.0.0" 1 (assumes raid1, no help) Illegal Array Layout.
Диски того же размера, того же производителя, но я удалил том вместо того, чтобы вставлять пустой диск и ждать его повторной синхронизации. Может это была критическая ошибка. Я попытался выбрать тип в формате, чтобы мой хороший диск был обычным диском на 146 ГБ, но он сбрасывает таблицу разделов, которая, я уверен, стерла бы данные (плохо, если бы это было производственное).
Я в костье? У кого-нибудь есть опыт взлома и повторной синхронизации зеркала? В Google нет ничего о «незаконном размещении массива», так что вот мой вклад в поисковые боги.
Как оказалось, я не нашел на это ответа. Но я нашел обходной путь и полезную информацию. Во-первых, это было 10/08 (U6) Solaris 10. Я загрузился с загрузочного компакт-диска 10/09 (U8) и обнаружил ошибку в raidctl на U8. U8 выдает ошибку «Поврежденная этикетка - плохая геометрия». Даже когда я полностью стер диски, я не смог воссоздать зеркало с помощью загрузочного компакт-диска U8, но на U7 (и, предположительно, U6) работала точно такая же команда. Так что немного предупреждения о версии.
Суть обходного пути была примерно такой (замените свои диски, пути и т. Д.).
prtvtoc /dev/rdsk/c1t0d0s2 > /mnt/space/partitions.txt
ufsdump 0f - /dev/rdsk/c1t0d0s0 > /mnt/space/root_c1t1d0s0.dmp
ufsdump 0f - /dev/rdsk/c1t1d0s4 > /mnt/space/var_c1t1d0s4.dmp
raidctl -c c1t0d0 c1t1d0
ВНИМАНИЕ! При этом стираются оба диска.raidctl -l
(при условии, что в этих инструкциях указано c1t1d0)newfs /dev/rdsk/c1t1d0s0
(через s7, очевидно, пропустить s2)mkdir /tmp/s0
mount /dev/rdsk/ctt1d0s0 /tmp/s0
cd /tmp/s0
cat /mnt/space/root_c1t1d0s0.dmp | ufsrestore xf -
(ответьте да на разрешение корневого каталога)umount /tmp/s0
installboot platform/SUNW,SPARC-Enterprise-T5220/lib/fs/ufs/bootblk /dev/rdsk/c1t1d0s0
probe-scei-all
show-disks
(выберите диск)nvalias disk Ctrl-Y
boot disk
Если вы хотите переключиться на disksuite посреди всего этого: - резервное копирование с помощью ufsdump, как указано выше - удалите определение аппаратного рейда - восстановите разделы на 1-й диск, обновите разделы на 1-м диске - ufsrestore на 1-й диск, выполните разумная загрузка - затем запустите обычную установку дискового набора. Если вы попытаетесь сделать disksuite с компакт-диска за один раз, этого не произойдет, потому что метаслужба не работает. Вы получите эту ошибку: metadb: network/rpc/meta:default: failed to enable/disable SVM service
Выполнение мета-команд не повредит, они просто не закрепятся. IE: когда вы перезагружаетесь с жесткого диска, metastat сообщит, что «метаданных не найдено».