Замена мертвого диска в шпульке

Я выполняю Сервер Ubuntu 13,04 64-разрядных собственных компонентов использования ZFS. У меня есть шпулька, состоящая из 4 жестких дисков, из которых умер вчера и теперь не распознается ОС или BIOS больше.

К сожалению, я видел проблему только после следующей перезагрузки поэтому теперь, маркировка диска отсутствует, и я не могу заменить диск с помощью официальных инструкций здесь и здесь.

zpool status hermes -x

печать

root@zeus:~# zpool status hermes -x
  pool: hermes
 state: DEGRADED
status: One or more devices could not be used because the label is missing or
        invalid.  Sufficient replicas exist for the pool to continue
        functioning in a degraded state.
action: Replace the device using 'zpool replace'.
   see: http://zfsonlinux.org/msg/ZFS-8000-4J
  scan: scrub repaired 0 in 2h4m with 0 errors on Sun Jun  9 00:28:24 2013
config:

        NAME                         STATE     READ WRITE CKSUM
        hermes                       DEGRADED     0     0     0
          raidz1-0                   DEGRADED     0     0     0
            ata-ST3300620A_5QF0MJFP  ONLINE       0     0     0
            ata-ST3300831A_5NF0552X  UNAVAIL      0     0     0
            ata-ST3200822A_5LJ1CHMS  ONLINE       0     0     0
            ata-ST3200822A_3LJ0189C  ONLINE       0     0     0

errors: No known data errors

Я уже заменил диск новым (который получил маркировку /dev/disk/by-id/ata-ST3500320AS_9QM03ATQ)

Любая из команд

zpool replace hermes /dev/disk/by-id/ata-ST3300831A_5NF0552X /dev/disk/by-id/ata-ST3500320AS_9QM03ATQ
zpool offline hermes /dev/disk/by-id/ata-ST3300831A_5NF0552X
zpool detatch hermes /dev/disk/by-id/ata-ST3300831A_5NF0552X

сбои с

root@zeus:~# zpool offline hermes /dev/disk/by-id/ata-ST3300831A_5NF0552X
cannot offline /dev/disk/by-id/ata-ST3300831A_5NF0552X: no such device in pool

потому что маркировка диска, который перестал работать, больше не существует в системе. Я также попробовал команды выше исключения пути к маркировке диска напрасно.

Как я могу заменить "фантомный" диск?

31
задан 15 September 2014 в 18:51

4 ответа

После рытья бесконечно этой ночью я наконец нашел решение. Короткий ответ - то, что можно использовать GUID дисков (которые сохраняются даже после разъединения диска) с zpool команда.

Длинный ответ: Я получил GUID диска с помощью zdb команда, которая дала мне следующий вывод

root@zeus:/dev# zdb
hermes:
    version: 28
    name: 'hermes'
    state: 0
    txg: 162804
    pool_guid: 14829240649900366534
    hostname: 'zeus'
    vdev_children: 1
    vdev_tree:
        type: 'root'
        id: 0
        guid: 14829240649900366534
        children[0]:
            type: 'raidz'
            id: 0
            guid: 5355850150368902284
            nparity: 1
            metaslab_array: 31
            metaslab_shift: 32
            ashift: 9
            asize: 791588896768
            is_log: 0
            create_txg: 4
            children[0]:
                type: 'disk'
                id: 0
                guid: 11426107064765252810
                path: '/dev/disk/by-id/ata-ST3300620A_5QF0MJFP-part2'
                phys_path: '/dev/gptid/73b31683-537f-11e2-bad7-50465d4eb8b0'
                whole_disk: 1
                create_txg: 4
            children[1]:
                type: 'disk'
                id: 1
                guid: 15935140517898495532
                path: '/dev/disk/by-id/ata-ST3300831A_5NF0552X-part2'
                phys_path: '/dev/gptid/746c949a-537f-11e2-bad7-50465d4eb8b0'
                whole_disk: 1
                create_txg: 4
            children[2]:
                type: 'disk'
                id: 2
                guid: 7183706725091321492
                path: '/dev/disk/by-id/ata-ST3200822A_5LJ1CHMS-part2'
                phys_path: '/dev/gptid/7541115a-537f-11e2-bad7-50465d4eb8b0'
                whole_disk: 1
                create_txg: 4
            children[3]:
                type: 'disk'
                id: 3
                guid: 17196042497722925662
                path: '/dev/disk/by-id/ata-ST3200822A_3LJ0189C-part2'
                phys_path: '/dev/gptid/760a94ee-537f-11e2-bad7-50465d4eb8b0'
                whole_disk: 1
                create_txg: 4
    features_for_read:

GUID, который я искал, 15935140517898495532 который позволил мне сделать

root@zeus:/dev# zpool offline hermes 15935140517898495532
root@zeus:/dev# zpool status
  pool: hermes
 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: scrub repaired 0 in 2h4m with 0 errors on Sun Jun  9 00:28:24 2013
config:

        NAME                         STATE     READ WRITE CKSUM
        hermes                       DEGRADED     0     0     0
          raidz1-0                   DEGRADED     0     0     0
            ata-ST3300620A_5QF0MJFP  ONLINE       0     0     0
            ata-ST3300831A_5NF0552X  OFFLINE      0     0     0
            ata-ST3200822A_5LJ1CHMS  ONLINE       0     0     0
            ata-ST3200822A_3LJ0189C  ONLINE       0     0     0

errors: No known data errors

и затем

root@zeus:/dev# zpool replace hermes 15935140517898495532 /dev/disk/by-id/ata-ST3500320AS_9QM03ATQ
root@zeus:/dev# zpool status
  pool: hermes
 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 Jun  9 01:44:36 2013
    408M scanned out of 419G at 20,4M/s, 5h50m to go
    101M resilvered, 0,10% done
config:

        NAME                            STATE     READ WRITE CKSUM
        hermes                          DEGRADED     0     0     0
          raidz1-0                      DEGRADED     0     0     0
            ata-ST3300620A_5QF0MJFP     ONLINE       0     0     0
            replacing-1                 OFFLINE      0     0     0
              ata-ST3300831A_5NF0552X   OFFLINE      0     0     0
              ata-ST3500320AS_9QM03ATQ  ONLINE       0     0     0  (resilvering)
            ata-ST3200822A_5LJ1CHMS     ONLINE       0     0     0
            ata-ST3200822A_3LJ0189C     ONLINE       0     0     0

errors: No known data errors

После перепосеребрения был завершен, все работало хорошо снова. Было бы хорошо включать эту информацию, что можно использовать GUID диска, полученный через zdb с zpool команда, со страницей справочника шпульки.

Править

Как указано durval ниже zdb команда ничего не может произвести. Затем можно попытаться использовать

zdb -l /dev/<name-of-device>

явно перечислять информацию об устройстве (даже если это уже отсутствует в системе).

38
ответ дан 15 September 2014 в 18:51

Проблема заключается в том, что на диски ссылаются идентификаторы, а не устройства.

Вот обходной путь, который должен работать:

ln -s /dev/null /dev/ata-ST3300831A_5NF0552X
zpool export hermes
zpool import hermes
zpool status
# note the new device name that should appear here
zpool offline hermes xxxx
zpool replace hermes xxxx /dev/disk/by-id/ata-ST3500320AS_9QM03ATQ

Редактировать: я опоздал на 30 секунд ...

0
ответ дан 15 September 2014 в 18:51

У меня была похожая проблема:

Диск вышел из строя таким образом, что он больше не регистрировался в BIOS (полностью мертв). zpool status указали, что это было UNAVAILABLE.

Я вставил диск с аналогичной емкостью, и мне удалось выделить его как новый spare, который был INUSE и повторно скопировал диск. Но на самом деле это не была часть zpool, скорее в пуле была память о пропавшем диске, и он думал, что когда-нибудь он появится снова.

Решением было сначала удалить отсутствующий диск из zpool:

[root@hactar ~]# zpool detach hactar_data /dev/gptid/87410b00-adb0-11e6-9193-00241d738094  

Затем удалить диск с пометкой spare-1 INUSE: ] После того, как я это сделал, похоже, что FreeNAS понял, что мне не нужно выполнять команду replace, однако, если ваша система сама этого не понимает, следующая команда должна заменить одно устройство другим:

zpool replace {your_poolname} {drive to be replaced} {new drive to take its place}

Например:

zpool replace hactar_data /dev/gptid/87410b00-adb0-11e6-9193-00241d738094 /dev/gptid/87410b00-adb0-11e6-9193-00241d
738094
  • Gptids пришли из моей команды zpool status.
0
ответ дан 15 September 2014 в 18:51

@Marcus: Спасибо за публикацию этого превосходного ответа на свой вопрос, он мне очень помог.

На днях я обнаружил поворот, который может вас заинтересовать (и любого другого, кто придет сюда в будущем): у меня было устройство кэширования, которое было удалено из пула (и помечено как «UNAVAIL») из-за та же самая ошибка (ZFS-8000-4J, «метка отсутствует или недействительна»), и попытка отключить / удалить / заменить ее не удалась с точно таким же сообщением «нет такого устройства в пуле».

НО, когда я пытался применить ваше решение, обычный «zdb» (без аргументов) не не перечислял устройство, тем более его GUID.

После некоторого копания я обнаружил, что «zdb -l / dev / DEVICENAME» перечисляет GUID (беря его непосредственно с устройства, а не из записей пула), и использование этого GUID позволило мне выполнить замена (на самом деле я сделал «zpool offline», затем «zpool remove», а затем «zpool add», который работал отлично).

0
ответ дан 15 September 2014 в 18:51

Другие вопросы по тегам:

Похожие вопросы: