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

Безопасное разделение зеркала raidctl

У меня есть сервер 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) работала точно такая же команда. Так что немного предупреждения о версии.

Суть обходного пути была примерно такой (замените свои диски, пути и т. Д.).

  • Мои разделы были разделены, но я мог видеть данные с загрузочного компакт-диска. Мне нужно было много места для создания ufsdump, поэтому я импортировал большой пул zfs. Это может означать для вас разные вещи, например, просто смонтировать большой раздел. Назовем его / mnt / space.
  • Скопируйте или дамп каждой существующей таблицы разделов в файл. Помните, что на этом этапе вы загружаетесь с компакт-диска.
    • format (1, p, p) или выполните 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
    • продолжить для каждого раздела
  • Восстановить рейд (на U7 или более раннем CD, в U8 есть ошибка, не работает).
    • raidctl -c c1t0d0 c1t1d0 ВНИМАНИЕ! При этом стираются оба диска.
    • Создание тома RAID уничтожит все данные на свободном пространстве дисков-участников, обработано (да / нет)? да
  • Пометьте новый raid-диск форматом. Вы не должны получать странных или неудачных ошибок маркировки в формате.
  • Найдите свой объем с помощью raidctl -l (при условии, что в этих инструкциях указано c1t1d0)
  • Восстановите схему разделов.
    • cat /mnt/space/partitions.txt | fmthard -s - / dev / rdsk / c1t1d0s2
  • На этом этапе я фактически переключился на DiskSuite, но шаги восстановления аналогичны.
  • newfs для каждого раздела.
    • 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
  • Размонтируйте все, при необходимости экспортируйте zpools, перезагрузитесь с компакт-диска.
  • Измените свой псевдоним из открытого приглашения загрузки
    • probe-scei-all
    • show-disks (выберите диск)
    • nvalias disk Ctrl-Y
    • boot disk
  • На этом этапе вы должны вернуться к зеркалу оборудования или, возможно, переключились на DiskSuite.

Если вы хотите переключиться на disksuite посреди всего этого: - резервное копирование с помощью ufsdump, как указано выше - удалите определение аппаратного рейда - восстановите разделы на 1-й диск, обновите разделы на 1-м диске - ufsrestore на 1-й диск, выполните разумная загрузка - затем запустите обычную установку дискового набора. Если вы попытаетесь сделать disksuite с компакт-диска за один раз, этого не произойдет, потому что метаслужба не работает. Вы получите эту ошибку: metadb: network/rpc/meta:default: failed to enable/disable SVM service Выполнение мета-команд не повредит, они просто не закрепятся. IE: когда вы перезагружаетесь с жесткого диска, metastat сообщит, что «метаданных не найдено».