Заміна несправного диска в корені ZFS | INTROSERV
EUR
european

EUR

usa

USD

Ukraine Ua
Ex. VAT Ex. VAT 0%

Заміна несправного диска в корені ZFS

Цей посібник пояснює, як замінити несправний диск у дзеркальному (mirror) пулі ZFS у Linux. Процедура охоплює переведення диска в автономний режим, копіювання таблиці розділів на диск-заміну, повторне додавання диска до пулу та встановлення завантажувача після завершення resilvering.

Передумови

Потрібні права root. У наведених нижче прикладах передбачається, що сервер має два диски: /dev/sda (справний) і /dev/sdb (несправний). За потреби замініть назви пристроїв відповідно до вашої конфігурації.

Warning

Перед початком створіть резервну копію всіх важливих даних. Заміна кореневого диска — операція з високим ризиком. Помилка на будь-якому етапі може призвести до втрати даних або неможливості завантаження системи. Не використовуйте імена пристроїв на кшталт /dev/sdX у командах ZFS. Після перезавантаження імена пристроїв можуть змінитися. Натомість використовуйте стабільні ідентифікатори, наприклад /dev/disk/by-id/. У наведених нижче прикладах /dev/sdX використовується для простоти під час роботи з інструментами розділення дисків. У командах ZFS завжди слід використовувати /dev/disk/by-id/.

Крок 1: Перевірте стан пулу

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

zpool status -v

У виведених даних буде зазначено, який диск несправний, а також його ідентифікатор у пулі.

Крок 2: Переведіть несправний диск в автономний режим

Якщо диск має статус ONLINE, але працює з помилками, переведіть його в автономний режим перед фізичною заміною:

zpool offline rpool <failed-device>

ZFS припинить спроби використовувати несправний диск перед його фізичною заміною. Замініть <failed-device> ідентифікатором, показаним командою zpool status -v. Якщо диск уже має статус FAULTED або REMOVED, пропустіть цей крок і перейдіть безпосередньо до кроку 3.

Крок 3: Фізично замініть диск

Якщо ваш сервер підтримує гарячу заміну (hot swap), диск можна замінити без вимкнення системи.

В іншому випадку вимкніть систему:

poweroff

Після встановлення диска-замінника завантажте сервер і переконайтеся, що новий диск розпізнається:

lsblk -o NAME,SIZE,MODEL ls -l /dev/disk/by-id/

У наступних кроках використовуйте ідентифікатор by-id нового диска.

Крок 4: Визначте тип таблиці розділів

Якщо gdisk ще не встановлено, встановіть його:

apt install gdisk -y

Перевірте тип таблиці розділів на справному диску:

gdisk -l /dev/sda

У виведених даних знайдіть розділ Partition table scan. Для MBR буде показано MBR: MBR only і GPT: not present. Для GPT буде показано MBR: protective і GPT: present.

Крок 5: Підготуйте та скопіюйте таблицю розділів на новий диск

Більшість конфігурацій із кореневою файловою системою ZFS використовують розмітку GPT. Метод MBR наведено для застарілих систем.

GPT

Перед продовженням визначте ім'я /dev/sdX, яке відповідає новому диску, оскільки воно потрібне інструментам розділення:

lsblk -o NAME,SIZE,MODEL,SERIAL

Перед копіюванням таблиці розділів видаліть старі сигнатури з диска-замінника:

wipefs -a /dev/disk/by-id/<new-disk>

Warning

wipefs -a безповоротно видаляє всі сигнатури файлових систем і розділів із диска. Перед виконанням цієї команди переконайтеся, що вказано правильний ідентифікатор диска.

Наступна команда копіює таблицю розділів із /dev/sda (джерело) на /dev/sdb (призначення):

sgdisk -R /dev/sdb /dev/sda

Warning

У команді sgdisk -R перший аргумент — диск призначення, а другий — вихідний диск. Якщо поміняти аргументи місцями, таблиця розділів на справному диску буде перезаписана.

Якщо диск-замінник більший за оригінальний, розширте GPT, щоб використати весь доступний обсяг:

sgdisk -e /dev/sdb

Потім призначте диску-заміннику новий унікальний UUID:

sgdisk -G /dev/sdb

Warning

sgdisk -G призначає нові UUID усім розділам на диску-заміннику. Якщо /etc/fstab містить записи на основі UUID для будь-якого з цих розділів, система може не завантажитися. Після завершення resilvering перевірте, що /etc/fstab використовує ідентифікатори /dev/disk/by-id/, а не UUID.

Перезавантажте таблицю розділів, щоб ядро розпізнало нову структуру:

udevadm trigger udevadm settle

Якщо диск-замінник раніше використовувався в іншому пулі ZFS, очистіть старі метадані ZFS, щоб уникнути конфліктів:

zpool labelclear /dev/disk/by-id/<new-disk-partX> 2>/dev/null || true

Замініть <new-disk-partX> фактичним ідентифікатором розділу ZFS.

MBR

Наступна команда копіює таблицю розділів із /dev/sda (джерело) на /dev/sdb (призначення):

sfdisk -d /dev/sda | sfdisk /dev/sdb

Якщо після копіювання нові розділи не відображаються в системі, перезавантажте таблицю розділів:

udevadm trigger udevadm settle

Крок 6: Додайте диск до пулу

Замініть запис несправного диска в пулі на новий диск. Спочатку перевірте точний ідентифікатор несправного диска, який відображається в пулі:

zpool status rpool

У виведених даних знайдіть запис несправного диска у списку пристроїв пулу. Він відображатиметься як повний шлях, наприклад /dev/disk/by-id/ata-WDC_WD10_12345-part3, зі статусом FAULTED, UNAVAIL або OFFLINE. Використайте цей шлях як <old-device> у команді replace:

zpool replace rpool <old-device> /dev/disk/by-id/<new-disk-part>

Замініть <old-device> ідентифікатором несправного диска з попереднього кроку. Замініть <new-disk-part> ідентифікатором by-id розділу нового диска, використовуючи той самий номер розділу, що й на справному диску, наприклад -part3 або -part4. Щоб знайти правильний ідентифікатор, виконайте ls -l /dev/disk/by-id/.

Якщо старий диск повністю недоступний (UNAVAIL), а zpool replace повертає помилку, додайте параметр -f, щоб примусово виконати заміну:

zpool replace -f rpool <old-device> /dev/disk/by-id/<new-disk-part>

Після виконання zpool replace переконайтеся, що resilvering розпочався, а новий диск відображається як ONLINE:

zpool status

Resilvering автоматично продовжуватиметься у фоновому режимі.

Крок 7: Контролюйте resilvering

Слідкуйте за прогресом resilvering за допомогою:

zpool status -v

У виведених даних відображаються прогрес, швидкість і приблизний час, що залишився. Перш ніж продовжувати, дочекайтеся стану state: ONLINE та завершення resilvering. Залежно від обсягу диска це може тривати кілька годин.

Крок 8: Перевірте завантажувальний dataset

Перед встановленням завантажувача переконайтеся, що для пулу налаштовано правильний завантажувальний dataset:

zpool get bootfs rpool

У виведених даних має відображатися шлях до dataset, наприклад rpool/ROOT/debian. Якщо значення дорівнює none або вказує на неправильний dataset, встановіть його вручну:

zpool set bootfs=rpool/ROOT/debian rpool

Замініть rpool/ROOT/debian фактичною назвою кореневого dataset у вашій системі. Щоб переглянути доступні dataset, виконайте zfs list.

Крок 9: Встановіть завантажувач

Встановіть завантажувач на диск-замінник після завершення resilvering. Під час resilvering система продовжує працювати з оригінального диска, тому цей крок безпечно виконувати після відновлення працездатного стану пулу.

BIOS (Legacy)

grub-install /dev/disk/by-id/<new-whole-disk>

У деяких системах grub-install може не приймати шлях by-id. У такому випадку замініть /dev/disk/by-id/<new-whole-disk> відповідною назвою пристрою, наприклад /dev/sdb.

UEFI

Перед запуском grub-install змонтуйте EFI-розділ із диска-замінника в тимчасовий каталог. Це запобігає перекриттю поточного активного EFI-розділу:

mkdir -p /mnt/new_efi mount /dev/disk/by-id/<new-disk-part1> /mnt/new_efi

Замініть <new-disk-part1> фактичним ідентифікатором EFI-розділу (зазвичай -part1 або -part2; тип розділу EF00). Якщо ви не впевнені, перевірте за допомогою ls -l /dev/disk/by-id/.

Якщо EFI-розділ порожній, перед запуском grub-install скопіюйте вміст наявного EFI-розділу:

cp -r /boot/efi/* /mnt/new_efi/

Встановіть завантажувач:

apt install grub-efi-amd64 efibootmgr -y grub-install --target=x86_64-efi --efi-directory=/mnt/new_efi --bootloader-id=debian --recheck /dev/disk/by-id/<new-whole-disk> update-grub update-initramfs -u -k all

Замініть --bootloader-id=debian назвою, що відповідає вашому дистрибутиву, наприклад ubuntu або debian. Замініть /dev/disk/by-id/<new-whole-disk> ідентифікатором by-id усього диска-замінника, а не окремого розділу.

Виконання update-initramfs гарантує, що початковий RAM-диск містить актуальні модулі ZFS і розпізнає нову структуру пулу. Без цього кроку система може не завантажитися після заміни диска.

Після встановлення відмонтуйте EFI-розділ:

umount /mnt/new_efi

Перевірте записи завантаження EFI:

efibootmgr -v

Warning

У системах із кореневою файловою системою ZFS команда grub-install може завершитися помилкою або потребувати додаткових параметрів залежно від версії GRUB і конфігурації системи. Наприклад, деякі системи потребують встановлення GRUB із модулями підтримки ZFS або виконання команди в середовищі chroot. Якщо команда повертає помилку, зверніться до документації вашого дистрибутива щодо встановлення GRUB із підтримкою ZFS.

Info

У Proxmox VE команда grub-install вимкнена. Замість неї використовуйте proxmox-boot-tool. У наведеному нижче прикладі використовується /dev/sdb2 — замініть його фактичним EFI-розділом у вашій системі:

proxmox-boot-tool format /dev/sdb2 proxmox-boot-tool init /dev/sdb2

Висновок

Після встановлення завантажувача перезавантажте сервер і переконайтеся, що система завантажується нормально. Запустіть scrub, щоб перевірити наявність помилок читання/запису, які могли виникнути під час resilvering:

zpool scrub rpool

Потім перевірте стан пулу:

zpool status -v

Пул має перебувати в стані online і не мати помилок. Якщо під час процесу виникнуть проблеми, перевірте системні журнали за допомогою journalctl -xe, щоб отримати додаткову інформацію.

Warning

Перш ніж утилізувати несправний диск, який було вилучено на кроці 3, перезавантажте сервер і переконайтеся, що система нормально завантажується з диска-замінника. Зберігайте несправний диск як резервний варіант, доки не підтвердите успішне завантаження системи.

VAT

  • Other

    Ex. VAT

    0%
  • austria

    Austria

    20%
  • Belgium

    Belgium

    21%
  • Bulgaria

    Bulgaria

    20%
  • Croatia

    Croatia

    25%
  • Cyprus

    Cyprus

    19%
  • Czech Republic

    Czech Republic

    21%
  • Denmark

    Denmark

    25%
  • Estonia

    Estonia

    22%
  • France

    France

    20%
  • Finland

    Finland

    24%
  • Germany

    Germany

    19%
  • Greece

    Greece

    24%
  • Hungary

    Hungary

    27%
  • Ireland

    Ireland

    23%
  • Italy

    Italy

    22%
  • Latvia

    Latvia

    21%
  • Lithuania

    Lithuania

    21%
  • Luxembourg

    Luxembourg

    17%
  • Malta

    Malta

    18%
  • Netherlands

    Netherlands

    21%
  • Poland

    Poland

    23%
  • Portugal

    Portugal

    23%
  • Romania

    Romania

    19%
  • Slovakia

    Slovakia

    20%
  • Slovenia

    Slovenia

    22%
  • Spain

    Spain

    21%
  • Sweden

    Sweden

    25%
  • USA

    USA

    0%
european
states
  • germany
  • Español
  • Italiano
  • Poland
  • Русский
  • Slovenski
  • Türkçe
  • ukraine
  • kingdom
  • French
  • Hrvatska
  • Other
  • Austria
  • Belgium
  • Bulgaria
  • Croatia
  • Cyprus
  • Czech Republic
  • Denmark
  • Estonia
  • Finland
  • France
  • Germany
  • Greece
  • Hungary
  • Ireland
  • Italy
  • Latvia
  • Lithuania
  • Luxembourg
  • Malta
  • Netherlands
  • Poland
  • Portugal
  • Romania
  • Slovakia
  • Slovenia
  • Spain
  • Sweden
  • USA