Проект «SnakeProject» Михаила КозловаРегистрация

Навигация
⇒FreeBSD and Nix⇒

⇐CISCO
⇐Voice(Asterisk\Cisco)
⇐Microsoft
⇐Powershell
⇐Python
⇐SQL\T-SQL
⇐1С
⇐Общая
⇐WEB Разработка
⇐ORACLE SQL \ JAVA
⇐Мото

FreeBSD: zfs замена диска в zpool raidz


 

FreeBSD: zfs замена диска в zpool raidz


Дано FreeBSD с raidz1-0 и 5 дисков в пуле

ada0 - тупо системный диск

Имитируем сбой и замену, выполнял на виртуалбоксе

Диски в виртуалбоксе приняли имена ada[1-5]
Имя пула дал - zroot


# zpool status
  pool: zroot
 state: ONLINE
  scan: resilvered 48K in 0 days 00:00:00 with 0 errors on Tue Dec 10 16:37:18 2019
config:

        NAME        STATE     READ WRITE CKSUM
        zroot       ONLINE       0     0     0
          ada0p2    ONLINE       0     0     0
          raidz1-1  ONLINE       0     0     0
            ada1    ONLINE       0     0     0
            ada2    ONLINE       0     0     0
            ada3    ONLINE       0     0     0
            ada4    ONLINE       0     0     0
            ada5    ONLINE       0     0     0


Далее "выключаем один диск на горячую" - ada3 (удалили устройство в virtualbox):
# zpool status
  pool: zroot
 state: DEGRADED
status: One or more devices has been removed by the administrator.
        Sufficient replicas exist for the pool to continue functioning in a
        degraded state.
action: Online the device using 'zpool online' or replace the device with
        'zpool replace'.
  scan: resilvered 48K in 0 days 00:00:00 with 0 errors on Tue Dec 10 16:37:18 2019
config:

        NAME                      STATE     READ WRITE CKSUM
        zroot                     DEGRADED     0     0     0
          ada0p2                  ONLINE       0     0     0
          raidz1-1                DEGRADED     0     0     0
            ada1                  ONLINE       0     0     0
            ada2                  ONLINE       0     0     0
            16473938204542825896  REMOVED      0     0     0  was /dev/ada3
            ada4                  ONLINE       0     0     0
            ada5                  ONLINE       0     0     0

errors: No known data errors


# ls /dev/ad*
/dev/ada0       /dev/ada0p2     /dev/ada2       /dev/ada4
/dev/ada0p1     /dev/ada1       /dev/ada5


Поключили диск обратно (добавили существующий в virtualbox) Он автоматом определился:
# ls /dev/ad*
/dev/ada0       /dev/ada0p2     /dev/ada2       /dev/ada4
/dev/ada0p1     /dev/ada1       /dev/ada3       /dev/ada5


Момент по поводу разметки, проще всего ее создать на новом диске по аналогии с каким-либо:
# gpart backup ada2
# gpart backup ada2 | gpart restore -F ada3


Перезагрузимся, диск автоматом станет на место:
# shutdown -r now

# zpool status
  pool: zroot
 state: ONLINE
status: One or more devices has experienced an unrecoverable error.  An
        attempt was made to correct the error.  Applications are unaffected.
action: Determine if the device needs to be replaced, and clear the errors
        using 'zpool clear' or replace the device with 'zpool replace'.
   see: http://illumos.org/msg/ZFS-8000-9P
  scan: resilvered 8K in 0 days 00:00:00 with 0 errors on Tue Dec 10 16:48:40 2019
config:

        NAME        STATE     READ WRITE CKSUM
        zroot       ONLINE       0     0     0
          ada0p2    ONLINE       0     0     0
          raidz1-1  ONLINE       0     0     0
            ada1    ONLINE       0     0     0
            ada2    ONLINE       0     0     0
            ada3    ONLINE       0     0     4
            ada4    ONLINE       0     0     0
            ada5    ONLINE       0     0     0

errors: No known data errors


Теперь некоторые команды, которые могут пригодиться при замене

Допустим диск умер, в корзине есть место, мы вставляем туда новый диск
В виртуалбосе убрали один диск, добавили новый

# zpool status
  pool: zroot
 state: DEGRADED
status: One or more devices has experienced an unrecoverable error.  An
        attempt was made to correct the error.  Applications are unaffected.
action: Determine if the device needs to be replaced, and clear the errors
        using 'zpool clear' or replace the device with 'zpool replace'.
   see: http://illumos.org/msg/ZFS-8000-9P
  scan: resilvered 8K in 0 days 00:00:00 with 0 errors on Tue Dec 10 16:48:40 2019
config:

        NAME                     STATE     READ WRITE CKSUM
        zroot                    DEGRADED     0     0     0
          ada0p2                 ONLINE       0     0     0
          raidz1-1               DEGRADED     0     0     0
            ada1                 ONLINE       0     0     0
            7951700637655260405  REMOVED      0     0     0  was /dev/ada2
            ada3                 ONLINE       0     0     4
            ada4                 ONLINE       0     0     0
            ada5                 ONLINE       0     0     0

errors: No known data errors


Если диск умер, можно попробовать перевести его в offline:
# zpool offline zroot ada2

# zpool status
  pool: zroot
 state: DEGRADED
status: One or more devices has experienced an unrecoverable error.  An
        attempt was made to correct the error.  Applications are unaffected.
action: Determine if the device needs to be replaced, and clear the errors
        using 'zpool clear' or replace the device with 'zpool replace'.
   see: http://illumos.org/msg/ZFS-8000-9P
  scan: resilvered 8K in 0 days 00:00:00 with 0 errors on Tue Dec 10 16:48:40 2019
config:

        NAME                     STATE     READ WRITE CKSUM
        zroot                    DEGRADED     0     0     0
          ada0p2                 ONLINE       0     0     0
          raidz1-1               DEGRADED     0     0     0
            ada1                 ONLINE       0     0     0
            7951700637655260405  OFFLINE      0     0     0  was /dev/ada2
            ada3                 ONLINE       0     0     4
            ada4                 ONLINE       0     0     0
            ada5                 ONLINE       0     0     0

errors: No known data errors

Делаем так, если заменяемый диск в автономном режиме:
# zpool replace zroot 7951700637655260405 ada2
Make sure to wait until resilver is done before rebooting.

If you boot from pool 'zroot', you may need to update
boot code on newly attached disk 'ada2'.

Assuming you use GPT partitioning and 'ada0' is your new boot disk
you may use the following command:

        gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada0


Последняя рекомендательная команда для установки загрузчика метки


Дополнительно могут понадобиться команды

Если не грузится система, загружаемся с LiveCD и делаем:
# zpool import -fa -R /mnt


Еще случай замены в RAID-Z с перезагрузкой, найденный на просторах интернета

Подсмотрено у:
http://antizlo.blogspot.com/2015/11/freebsd-zfs-raidz-disk-replace.html

Сжато и отформатировано

Список дисков и разделов:
# ls /dev/ad*
ada0 ada0p1 ada0p2 ada0p3
ada1 ada1p1 ada1p2 ada1p3
ada2 ada2p1 ada2p2 ada2p3
ada3 ada3p1 ada3p2 ada3p3
ada4 ada4p1 ada4p2 ada4p3
ada5 ada5p1 ada5p2 ada5p3


Статус пула ZFS:
# zpool status
  pool: zroot
 state: ONLINE
  scan: resilvered 1,24G in 0h2m with 0 errors on Sat Oct 24 15:52:02 2015
config:

        NAME          STATE     READ WRITE CKSUM
        zroot         ONLINE       0     0     0
          raidz1-0    ONLINE       0     0     0
            gpt/zfs0  ONLINE       0     0     0
            gpt/zfs1  ONLINE       0     0     0
            gpt/zfs2  ONLINE       0     0     0
            gpt/zfs3  ONLINE       0     0     0
            gpt/zfs4  ONLINE       0     0     0
            gpt/zfs5  ONLINE       0     0     0

errors: No known data errors


После выхода из строя диска ada0, массив переходит в состояние DEGRADED, система перестаёт загружаться

1. Выключаем машину, вынимаем сбойный диск, заменяем его на новый

2. Если BIOS настроен на загрузку с этого диска, то меняем приоритет загрузки в BIOS

3. И запускаем систему


Теперь, если посмотреть список дисков и разделов, то чётко видно, что ada0 чист:
# ls /dev/ad*
ada0
ada1 ada1p1 ada1p2 ada1p3
ada2 ada2p1 ada2p2 ada2p3
ada3 ada3p1 ada3p2 ada3p3
ada4 ada4p1 ada4p2 ada4p3
ada5 ada5p1 ada5p2 ada5p3


# zpool status -v
  pool: zroot
 state: DEGRADED
status: One or more devices could not be opened.  Sufficient replicas exist for
        the pool to continue functioning in a degraded state.
action: Attach the missing device and online it using 'zpool online'.
   see: http://illumos.org/msg/ZFS-8000-2Q
  scan: resilvered 1,24G in 0h2m with 0 errors on Sat Oct 24 15:52:02 2015
config:

        NAME                     STATE     READ WRITE CKSUM
        zroot                    DEGRADED     0     0     0
          raidz1-0               DEGRADED     0     0     0
            9164267241595705440  UNAVAIL      0     0     0  was /dev/gpt/zfs0
            gpt/zfs1             ONLINE       0     0     0
            gpt/zfs2             ONLINE       0     0     0
            gpt/zfs3             ONLINE       0     0     0
            gpt/zfs4             ONLINE       0     0     0
            gpt/zfs5             ONLINE       0     0     0

errors: No known data errors


Видим, что диск в состоянии UNAVAIL, массив raidz1-0 DEGRADED и пул zroot так же DEGRADED


Подготовка нового диска

Теперь необходимо скопировать разметку с рабочго диска с помощью gpart, например с диска ada1

# gpart backup ada1
GPT 128
1   freebsd-boot       40     1024 gptboot1
2   freebsd-swap     2048  4194304 swap1
3   freebsd-zfs   4196352 16773120 zfs1

Копируем:
# gpart backup ada1 | gpart restore -F ada0

И проверяем результат:
# ls /dev/ad*
ada0 ada0p1 ada0p2 ada0p3
ada1 ada1p1 ada1p2 ada1p3
ada2 ada2p1 ada2p2 ada2p3
ada3 ada3p1 ada3p2 ada3p3
ada4 ada4p1 ada4p2 ada4p3
ada5 ada5p1 ada5p2 ada5p3


Изменяем метку загрузочного тома:
# gpart modify -i 1 -l gptboot0 ada0

Изменяем метку основного тома:
# gpart modify -i 3 -l zfs0 ada0


Смотрим информацию по дискам:
# gpart list | grep label
label: gptboot1
label: swap1
label: zfs1
label: gptboot2
label: swap2
label: zfs2
label: gptboot3
label: swap3
label: zfs3
label: gptboot4
label: swap4
label: zfs4
label: gptboot5
label: swap5
label: zfs5
label: gptboot0
label: swap0
label: zfs0


Теперь необходимые нам разделы на ada0 присутствуют

В /dev/gpt/ метки дисков отсутствуют, т.к. они появляются:
1) при создании дисков
2) в процессе загрузки ос

# ls /dev/gpt/
gptboot1        gptboot4        zfs2            zfs5
gptboot2        gptboot5        zfs3
gptboot3        zfs1              zfs4

Заставляем систему перечитать диск:
# true > /dev/ada0

Смотрим, что у нас появились gptboot0 и zfs0:
# ls /dev/gpt/
gptboot0        gptboot3        zfs0            zfs3
gptboot1        gptboot4        zfs1            zfs4
gptboot2        gptboot5        zfs2            zfs5


Замена диска в пуле

Смотрим идентификатор выпавшего диска в пуле:
# zpool status
  pool: zroot
 state: DEGRADED
status: One or more devices could not be opened.  Sufficient replicas exist for
        the pool to continue functioning in a degraded state.
action: Attach the missing device and online it using 'zpool online'.
   see: http://illumos.org/msg/ZFS-8000-2Q
  scan: resilvered 1,24G in 0h2m with 0 errors on Sun Nov  8 21:03:23 2015
config:

        NAME                      STATE     READ WRITE CKSUM
        zroot                     DEGRADED     0     0     0
          raidz1-0                DEGRADED     0     0     0
            10165075366045259399  UNAVAIL      0     0     0  was /dev/gpt/zfs0
            gpt/zfs1              ONLINE       0     0     0
            gpt/zfs2              ONLINE       0     0     0
            gpt/zfs3              ONLINE       0     0     0
            gpt/zfs4              ONLINE       0     0     0
            gpt/zfs5              ONLINE       0     0     0

errors: No known data errors

Он у нас 10165075366045259399


Заменяем диск в ZFS командой zpool replace:
# zpool replace -f zroot 10165075366045259399 gpt/zfs0
Make sure to wait until resilver is done before rebooting.

If you boot from pool 'zroot', you may need to update
boot code on newly attached disk 'gpt/zfs0'.

Assuming you use GPT partitioning and 'ada0' is your new boot disk
you may use the following command:

        gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada0


Выполняем рекомендованную нам команду по установке загрузчика на диск:
# gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada0
bootcode written to da0


Далее командой zpool status смотрим процесс пересборки массива:
# zpool status
  pool: zroot
 state: DEGRADED
status: One or more devices is currently being resilvered.  The pool will
        continue to function, possibly in a degraded state.
action: Wait for the resilver to complete.
  scan: resilver in progress since Sun Nov  8 21:50:01 2015
        4,11G scanned out of 7,42G at 50,0M/s, 0h1m to go
        701M resilvered, 55,33% done
config:

        NAME                        STATE     READ WRITE CKSUM
        zroot                       DEGRADED     0     0     0
          raidz1-0                  DEGRADED     0     0     0
            replacing-0             UNAVAIL      0     0     0
              10165075366045259399  UNAVAIL      0     0     0  was /dev/gpt/zfs0/old
              gpt/zfs0              ONLINE       0     0     0  (resilvering)
            gpt/zfs1                ONLINE       0     0     0
            gpt/zfs2                ONLINE       0     0     0
            gpt/zfs3                ONLINE       0     0     0
            gpt/zfs4                ONLINE       0     0     0
            gpt/zfs5                ONLINE       0     0     0

errors: No known data errors

По окночанию пересборки эта же команда zpool status, покажет что всё хорошо, все диски и дисковые пулы ONLINE:
# zpool status
  pool: zroot
 state: ONLINE
  scan: resilvered 1,24G in 0h2m with 0 errors on Sun Nov  8 21:52:36 2015
config:

        NAME          STATE     READ WRITE CKSUM
        zroot         ONLINE       0     0     0
          raidz1-0    ONLINE       0     0     0
            gpt/zfs0  ONLINE       0     0     0
            gpt/zfs1  ONLINE       0     0     0
            gpt/zfs2  ONLINE       0     0     0
            gpt/zfs3  ONLINE       0     0     0
            gpt/zfs4  ONLINE       0     0     0
            gpt/zfs5  ONLINE       0     0     0

errors: No known data errors


Перезагружаемся. Возвращаемся в BIOS и выставляем параметры загрузки обратно

 


Комментарии пользователей

Эту новость ещё не комментировалиНаписать комментарий
Анонимам нельзя оставоять комментарии, зарегистрируйтесь!

© Snakeproject.ru создан в 2013 году. При копировании материала с сайта - оставьте ссылку.


Яндекс.Метрика

Goon Каталог сайтов Рейтинг@Mail.ru