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


31

Я запускаю 64-розрядний Ubuntu Server 13.04 з використанням рідного ZFS. У мене є zpool, що складається з 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

тому що мітка вбитого диска вже не існує в системі. Я також спробував команди вище, опускаючи шлях до мітки накопичувача, безрезультатно.

Як можна замінити диск "привид"?

Відповіді:


38

Після безкопання цієї ночі я нарешті знайшов рішення. Коротка відповідь полягає в тому, що ви можете використовувати 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команди, з manpage zpool.

Редагувати

Як вказує durval нижче, zdbкоманда може нічого не виводити. Тоді ви можете спробувати використовувати

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

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


Охолодіть, тоді перед запуском додайте за допомогою -nперемикача, але також -gперемикач захопить і uuid таким чином.
Брайан Томас

Дякую, це було дуже корисно, оскільки розібравшись в Інтернеті, я не зміг знайти інформацію про отримання матеріалів, зібраних з zdb.
xamox

Я шукав тижнями, і нарешті ця відповідь зробила трюк. Але ідентифікатори, перелічені zpool status(такі імена, як sdab), НЕ були такими ж, як шляхи в /dev/disk/by-id(божевільні довгі імена ідентифікаторів). Але ls -la /dev/disk/by-idвиявляється, що всі вони посилання на, /dev/...тому я знайшов той, що вказує на мій диск UNAVAIL (а згодом і OFFLINE), і мені вдалося виконати ці кроки успішно. Зараз він перестарається. Дякую!
Метт

Альтернативний коротший спосіб отримати GUID - zpool status -gце показ статусу за допомогою GUID для кожного пристрою. Також для @Matt zpool status -Lпокаже статус, використовуючи основні назви пристроїв замість довгих /dev/disk/by-idімен.
StarNamer

Ви справжній MVP, який повертається зі своїм рішенням. Це працювало для мене.
екстракризис

3

Проблема полягає в тому, що на диски посилаються ідентифікатори, а не пристрій.

Ось вирішення, яке має працювати:

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 секунд ...


Спасибі. Я намагався створити порожнє посилання на відсутній диск, але воно все одно говорило no such device in pool.
Маркус

Моя пропозиція майже ідентична тому, що ви зробили. Єдина відмінність - спосіб отримати орієнтир щодо пристрою. Після створення символьного посилання на / dev / null (який відрізняється від порожнього посилання) та експорту / імпорту пулу, він з'являється уzpool status
jlliagre

Використовуючи цей метод, я фактично зумів повернути "дефектний" диск онлайн, не замінюючи його (тому я пропустив offlineі replaceкроки). Я імпортував пул вдруге після видалення нульового посилання. Можливо, це була лише проблема з етикеткою накопичувача? Насправді назва диска залишилася незмінною. Після цього я зробив повний скраб, і помилок не виявлено.
Серрано

2

@Marcus: Дякую, що опублікував цю чудову відповідь на власне запитання, мені це дуже допомогло.

Днями я знайшов поворот, який може зацікавити вас (і будь-кого іншого, хто в майбутньому приходить сюди-гуглінг): у мене був кеш-пристрій, який був скинутий з пулу (і позначений як "UNAVAIL") через цю ж помилку (ZFS-8000-4J, "мітка відсутня або недійсна"), і спроба відключити / видалити / замінити її не вдалося з точно таким же повідомленням "немає такого пристрою в пулі".

АЛЕ, коли я намагався застосувати ваше рішення, звичайний "zdb" (без аргументів) не перераховував пристрій, а тим більше його GUID.

Після деякого копання я виявив, що "zdb -l / dev / DEVICENAME" перераховував GUID (беручи його безпосередньо з пристрою, а не з записів пулу), і за допомогою цього GUID дозволив мені зробити заміну (насправді я зробив "zpool offline" з подальшим "видаленням із zpool", а потім "додаванням zpool", що спрацювало чудово).


Спасибі! Доданий натяк на мою власну прийняту відповідь із посиланням на ваш коментар.
Маркус

Для мене zdb -l /dev/...завжди показали "не вдалося розпакувати етикетку".
Метт

0

У мене була схожа проблема:

Диск вийшов з ладу таким чином, що він більше не зареєструвався в BIOS (повністю мертвий). zpool statusПоказав , що це було UNAVAILABLE.

Я поставив подібний накопичувач потужності, і мені вдалося виділити його як новий spare який був INUSEі повторно змінив накопичувач. Але це насправді не було частиною zpool, скоріше у басейну була пам'ять про зниклий привід, думаючи, що колись знову з’явиться.

Рішення полягало в тому, щоб спочатку відкинути відсутні машини із zpool:

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

Потім відмітьте позначку приводу spare-1 INUSE також:

[root@hactar ~]# zpool detach hactar_data /dev/gptid/f2089b59-2654-11e5-8d99-00241d738094

Як тільки я це зробив, схоже, 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
  • Гріпди походили з мого zpool statusнаказу.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.