Инструменты пользователя

Инструменты сайта


unix:zfs-replace-disk

Проверка отказоустойчивости zpool

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

# zpool status -v
  pool: zroot
 state: ONLINE
  scan: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        zroot       ONLINE       0     0     0
          mirror-0  ONLINE       0     0     0
            da0p3   ONLINE       0     0     0
            da1p3   ONLINE       0     0     0

errors: No known data errors

Оба диска на месте. Теперь выключим сервер и вынем один из дисков. Посмотрим, как поведет себя сервер.

# 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: none requested
config:

        NAME                     STATE     READ WRITE CKSUM
        zroot                    DEGRADED     0     0     0
          mirror-0               DEGRADED     0     0     0
            2081140553640658652  UNAVAIL      0     0     0  was /dev/da0p3
            da0p3                ONLINE       0     0     0

errors: No known data errors

Как видно, диска нет, но система благополучно загрузилась и нормально работает. Если мы вернем этот же диск на место и перезагрузимся, то все станет в порядке, никаких лишних движений делать не надо. Но представим, что у нас диск вышел из строя и нам надо установить новый. Вставляем новый чистый диск в сервер и загружаемся. Новый диск получил то же название, что и вышедший из строя — /dev/da0. Разделов на нем нет.

Первым делом отправляем сбойный диск в offline:

# zpool offline zroot da0p3

Пул теперь в таком состоянии:

# zpool status -v
  pool: zroot
 state: DEGRADED
status: One or more devices has been taken offline 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: none requested
config:

        NAME                     STATE     READ WRITE CKSUM
        zroot                    DEGRADED     0     0     0
          mirror-0               DEGRADED     0     0     0
            2081140553640658652  OFFLINE      0     0     0  was /dev/da0p3
            da1p3                ONLINE       0     0     0

errors: No known data errors

Скопируем таблицу разделов с живого диска на новый. Посмотрим для начала на нее:

# gpart show
=>      40  20971440  da1  GPT  (10G)
        40      1024    1  freebsd-boot  (512K)
      1064       984       - free -  (492K)
      2048   4194304    2  freebsd-swap  (2.0G)
   4196352  16773120    3  freebsd-zfs  (8.0G)
  20969472      2008       - free -  (1.0M)

Создаем такую же таблицу на новом диске, скопировав ее со старого:

# gpart backup da1 > /root/da1.backup
# gpart restore da0 < /root/da1.backup

Смотрим, что получилось:

# gpart show
=>      40  20971440  da1  GPT  (10G)
        40      1024    1  freebsd-boot  (512K)
      1064       984       - free -  (492K)
      2048   4194304    2  freebsd-swap  (2.0G)
   4196352  16773120    3  freebsd-zfs  (8.0G)
  20969472      2008       - free -  (1.0M)

=>      40  20971440  da0  GPT  (10G)
        40      1024    1  freebsd-boot  (512K)
      1064       984       - free -  (492K)
      2048   4194304    2  freebsd-swap  (2.0G)
   4196352  16773120    3  freebsd-zfs  (8.0G)
  20969472      2008       - free -  (1.0M)

То, что надо. Запишем на новый диск загрузчик:

# gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 da0
partcode written to da0p1
bootcode written to da0

Говорим пулу, что мы меняем жесткий диск:

# zpool replace zroot /dev/da0p3
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 '/dev/da0p3'.

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

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

Умный zpool сам нам напомнил, чтобы мы не забыли про загрузчик. После замены диска быстро прошел resilver (синхронизация) и пул перешел в состояние ONLINE

# zpool status -v
  pool: zroot
 state: ONLINE
  scan: resilvered 532M in 0h0m with 0 errors on Sat Oct 15 01:29:49 2016
config:

        NAME        STATE     READ WRITE CKSUM
        zroot       ONLINE       0     0     0
          mirror-0  ONLINE       0     0     0
            da0p3   ONLINE       0     0     0
            da1p3   ONLINE       0     0     0

errors: No known data errors

При желании можно теперь вынуть старый диск и убедиться, что с нового система нормально загружается. Я это сделал и убедился.

unix/zfs-replace-disk.txt · Последние изменения: Fri, 15 Dec 2017 00:22 — root