пятница, 6 мая 2011 г.

FreeBSD ZFS замена сбойного диска

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

  pool: data
 state: ONLINE
 scrub: none requested
config:

    NAME           STATE     READ WRITE CKSUM
    data           ONLINE       0     0     0
      mirror       ONLINE       0     0     0
        gpt/disk1  ONLINE       0     0     0
        gpt/disk2  ONLINE       0     0     0
При его создании использовались метки gpt, предположим вышел из строя первый диск (disk1). Для начала нужно выяснить какому физическому устройству он соответсвует:
#gpart show
=>        34  1465146988  ad0  GPT  (699G)
          34         128    1  freebsd-boot  (64K)
         162     4194304    2  freebsd-swap  (2.0G)
     4194466  1460952556    3  freebsd-zfs  (697G)

=>        34  1465149101  ad2  GPT  (699G)
          34         128    1  freebsd-boot  (64K)
         162     4194304    2  freebsd-swap  (2.0G)
     4194466  1460954669    3  freebsd-zfs  (697G)
#atacontrol list
ATA channel 0:
    Master:  ad0 <...> SATA revision 2.x
    Slave:       no device present
ATA channel 1:
    Master:  ad2 <...> SATA revision 2.x
    Slave:       no device present
Отсюда видно, что нас интересует Master на канале 0. Но прежде чем физически заменять диск нужно отправить его в офлайн, чтобы zfs не пыталась с него что-либо читать или записывать на него:
# zpool offline zroot gpt/disk1
Теперь физически заменяем диск на новый и воссоздаем на нем разметку:
# gpart create -s gpt ad0
# gpart add -s 64K -t freebsd-boot ad0
# gpart add -s 2G -t freebsd-swap -l swap1 ad0
# gpart add -t freebsd-zfs -l disk1 ad0
 И запишем загрузчик:

# gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ad0
 Следующим шагом сообщаем системе о замене:
# zpool replace zroot gpt/disk1
 И возвращаем его в строй:
# zpool online zroot gpt/disk1
Будет запущен процесс resilver, за прогрессом можно наблюдать с помощью zpool status

8 комментариев:

  1. По мотивам этой статьи успешно провел замену физических устройств на их-же gpt-метки: (ad4p3 <=> gpt/disk0):
    # zpool offline systor ad4p3
    # zpool detach systor ad4p3
    # zpool attach systor ad6p3 gpt/disk0

    ОтветитьУдалить
  2. invalid vdev specification use '-f' to override the following errors: /dev/ada1 is part of active pool 'pool'

    пытался сделать zpool replace pool ada1

    ОтветитьУдалить
    Ответы
    1. Не тот диск пытаетесь заменить

      Удалить
    2. в смысле - не тот? пытался переместить тот диск, который светился offline в пуле zfs.

      Точнее, как вообще всё было : рабочий пул из трёх дисков, на горячую выдернул шлейфы из диска ada1, запросил статус пула : он, естественно, показал что пул деградирован и ada1 был удалён из пула. Я этот диск в оффлайн отправил соответствущей командой.
      Дале я этот винт сняла, подрубил к виндовой тачке и инициализировал его не форматируя. Потом снова подключил к пулу zfs, подсоединил шлейфы, система бодро определила подключение диска на горячую.
      И вот когда я уже пытаюсь zpool replace pool ada1 сделать - он мне и выдаёт ошибку. Хотя при zpool online pool ada1 он без всяких ошибок переводит пул в решим онлайн.

      Удалить
    3. естественно он видит диск с файловой системой и предупреждает что удалит все
      там же написано -f - не обращая внимания на ошибки

      Удалить
  3. # atacontrol list
    atacontrol:
    ATA_CAM option is enabled in kernel.
    Please use camcontrol instead.

    как быть ?

    ОтветитьУдалить
  4. camcontrol devlist не показывает куда воткнут диск.

    ОтветитьУдалить
  5. тогда smartctl и по серийным номерам

    ОтветитьУдалить