Wymiana uszkodzonego dysku w systemie głównym ZFS | INTROSERV
EUR
european

EUR

usa

USD

Poland Pl
Ex. VAT Ex. VAT 0%

Wymiana uszkodzonego dysku w systemie głównym ZFS

Ten poradnik wyjaśnia, jak wymienić uszkodzony dysk w puli ZFS skonfigurowanej jako mirror w systemie Linux. Procedura obejmuje przełączenie dysku w tryb offline, skopiowanie tablicy partycji na dysk zastępczy, ponowne dodanie dysku do puli oraz zainstalowanie programu rozruchowego po zakończeniu procesu resilveringu.

Wymagania wstępne

Wymagane są uprawnienia root. Poniższe przykłady zakładają, że serwer ma dwa dyski: /dev/sda (sprawny) i /dev/sdb (uszkodzony). Dostosuj nazwy urządzeń do swojej konfiguracji.

Warning

Przed rozpoczęciem wykonaj kopię zapasową wszystkich ważnych danych. Wymiana dysku systemowego jest operacją wysokiego ryzyka. Błąd na dowolnym etapie może doprowadzić do utraty danych lub uniemożliwić uruchomienie systemu. Unikaj używania nazw urządzeń /dev/sdX w poleceniach ZFS. Nazwy urządzeń mogą się zmienić po ponownym uruchomieniu systemu. Zamiast nich używaj stabilnych identyfikatorów, takich jak /dev/disk/by-id/. W poniższych przykładach użyto /dev/sdX dla uproszczenia podczas pracy z narzędziami do partycjonowania. Polecenia ZFS powinny zawsze korzystać z /dev/disk/by-id/.

Krok 1: Sprawdź stan puli

Przed wprowadzeniem jakichkolwiek zmian sprawdź bieżący stan puli:

zpool status -v

Wynik pokaże, który dysk jest uszkodzony oraz jaki identyfikator ma w puli.

Krok 2: Przełącz uszkodzony dysk w tryb offline

Jeśli dysk ma status ONLINE, ale wykazuje oznaki awarii, przełącz go w tryb offline przed fizyczną wymianą:

zpool offline rpool <failed-device>

ZFS przestanie próbować korzystać z uszkodzonego dysku przed jego fizyczną wymianą. Zastąp <failed-device> identyfikatorem wyświetlonym przez zpool status -v. Jeśli dysk ma już status FAULTED lub REMOVED, pomiń ten krok i przejdź bezpośrednio do kroku 3.

Krok 3: Fizycznie wymień dysk

Jeśli serwer obsługuje hot swap, możesz wymienić dysk bez wyłączania systemu.

W przeciwnym razie wyłącz system:

poweroff

Po zainstalowaniu dysku zastępczego uruchom serwer i sprawdź, czy nowy dysk jest widoczny:

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

W kolejnych krokach używaj identyfikatora by-id nowego dysku.

Krok 4: Określ typ tablicy partycji

Zainstaluj gdisk, jeśli nie jest jeszcze zainstalowany:

apt install gdisk -y

Sprawdź typ tablicy partycji na sprawnym dysku:

gdisk -l /dev/sda

W wynikach znajdź sekcję Partition table scan. W przypadku MBR zobaczysz MBR: MBR only oraz GPT: not present. W przypadku GPT zobaczysz MBR: protective oraz GPT: present.

Krok 5: Przygotuj i skopiuj tablicę partycji na nowy dysk

Większość konfiguracji systemu root z ZFS korzysta z partycjonowania GPT. Metoda MBR została uwzględniona dla starszych systemów.

GPT

Przed rozpoczęciem zidentyfikuj nazwę /dev/sdX odpowiadającą nowemu dyskowi, ponieważ narzędzia do partycjonowania jej wymagają:

lsblk -o NAME,SIZE,MODEL,SERIAL

Usuń wszystkie stare sygnatury z dysku zastępczego przed skopiowaniem tablicy partycji:

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

Warning

wipefs -a trwale usuwa wszystkie sygnatury systemów plików i partycji z dysku. Przed wykonaniem tego polecenia upewnij się, że podano prawidłowy identyfikator dysku.

Poniższe polecenie kopiuje tablicę partycji z /dev/sda (źródło) do /dev/sdb (cel):

sgdisk -R /dev/sdb /dev/sda

Warning

W poleceniu sgdisk -R pierwszy argument oznacza dysk docelowy, a drugi dysk źródłowy. Uruchomienie tego polecenia z odwróconymi argumentami spowoduje nadpisanie tablicy partycji na sprawnym dysku.

Jeśli dysk zastępczy jest większy od oryginalnego, rozszerz GPT, aby wykorzystać całą jego pojemność:

sgdisk -e /dev/sdb

Następnie przypisz nowy, unikalny identyfikator UUID do dysku zastępczego:

sgdisk -G /dev/sdb

Warning

sgdisk -G przypisuje nowe identyfikatory UUID wszystkim partycjom na dysku zastępczym. Jeśli /etc/fstab zawiera wpisy oparte na UUID dla którejkolwiek z tych partycji, system może się nie uruchomić. Po zakończeniu resilveringu sprawdź, czy /etc/fstab korzysta z identyfikatorów /dev/disk/by-id/ zamiast UUID.

Przeładuj tablicę partycji, aby kernel wykrył nowy układ:

udevadm trigger udevadm settle

Jeśli dysk zastępczy był wcześniej używany w innej puli ZFS, usuń stare metadane ZFS, aby uniknąć konfliktów:

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

Zastąp <new-disk-partX> rzeczywistym identyfikatorem partycji ZFS.

MBR

Poniższe polecenie kopiuje tablicę partycji z /dev/sda (źródło) do /dev/sdb (cel):

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

Jeśli po skopiowaniu nowe partycje nie są widoczne w systemie, przeładuj tablicę partycji:

udevadm trigger udevadm settle

Krok 6: Dodaj dysk do puli

Zastąp wpis uszkodzonego dysku w puli nowym dyskiem. Najpierw sprawdź dokładny identyfikator uszkodzonego dysku widoczny w puli:

zpool status rpool

W wynikach znajdź wpis dotyczący uszkodzonego dysku na liście urządzeń puli. Będzie on wyświetlony jako pełna ścieżka, na przykład /dev/disk/by-id/ata-WDC_WD10_12345-part3, ze statusem FAULTED, UNAVAIL lub OFFLINE. Użyj tej ścieżki jako <old-device> w poleceniu replace:

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

Zastąp <old-device> identyfikatorem uszkodzonego dysku z poprzedniego kroku. Zastąp <new-disk-part> identyfikatorem by-id partycji na dysku zastępczym, używając tego samego numeru partycji co na sprawnym dysku, na przykład -part3 lub -part4. Aby znaleźć prawidłowy identyfikator, uruchom ls -l /dev/disk/by-id/.

Jeśli stary dysk jest całkowicie niedostępny (UNAVAIL), a zpool replace zwraca błąd, dodaj opcję -f, aby wymusić wymianę:

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

Po wykonaniu zpool replace potwierdź, że rozpoczął się resilvering i że nowy dysk pojawił się jako ONLINE:

zpool status

Resilvering będzie automatycznie kontynuowany w tle.

Krok 7: Monitoruj resilvering

Monitoruj postęp resilveringu za pomocą:

zpool status -v

Wynik pokazuje postęp, prędkość oraz szacowany pozostały czas. Przed przejściem dalej poczekaj, aż stan zmieni się na state: ONLINE i resilvering zostanie zakończony. W zależności od rozmiaru dysku może to potrwać kilka godzin.

Krok 8: Sprawdź dataset rozruchowy

Przed zainstalowaniem programu rozruchowego sprawdź, czy pula ma skonfigurowany właściwy dataset rozruchowy:

zpool get bootfs rpool

Wynik powinien zawierać ścieżkę datasetu, taką jak rpool/ROOT/debian. Jeśli wartość to none lub wskazuje niewłaściwy dataset, ustaw ją ręcznie:

zpool set bootfs=rpool/ROOT/debian rpool

Zastąp rpool/ROOT/debian rzeczywistą nazwą datasetu root w swoim systemie. Aby wyświetlić dostępne datasety, uruchom zfs list.

Krok 9: Zainstaluj program rozruchowy

Zainstaluj program rozruchowy na dysku zastępczym po zakończeniu resilveringu. Podczas resilveringu system nadal działa z oryginalnego dysku, dlatego ten krok można bezpiecznie wykonać po przywróceniu prawidłowego stanu puli.

BIOS (Legacy)

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

W niektórych systemach grub-install może nie akceptować ścieżki by-id. W takim przypadku zastąp /dev/disk/by-id/<new-whole-disk> odpowiednią nazwą urządzenia, na przykład /dev/sdb.

UEFI

Zamontuj partycję EFI z dysku zastępczego w katalogu tymczasowym przed uruchomieniem grub-install. Zapobiega to przesłonięciu aktualnie używanej partycji EFI:

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

Zastąp <new-disk-part1> rzeczywistym identyfikatorem partycji EFI (zazwyczaj -part1 lub -part2; typ partycji EF00). W razie wątpliwości sprawdź za pomocą ls -l /dev/disk/by-id/.

Jeśli partycja EFI jest pusta, skopiuj zawartość istniejącej partycji EFI przed uruchomieniem grub-install:

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

Zainstaluj program rozruchowy:

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

Zastąp --bootloader-id=debian nazwą odpowiadającą używanej dystrybucji, na przykład ubuntu lub debian. Zastąp /dev/disk/by-id/<new-whole-disk> identyfikatorem by-id całego dysku zastępczego, a nie pojedynczej partycji.

Uruchomienie update-initramfs zapewnia, że początkowy ramdisk zawiera aktualne moduły ZFS i rozpoznaje nowy układ puli. Bez tego kroku system może nie uruchomić się po wymianie dysku.

Po zakończeniu instalacji odmontuj partycję EFI:

umount /mnt/new_efi

Sprawdź wpisy rozruchowe EFI:

efibootmgr -v

Warning

W systemach z rootem na ZFS polecenie grub-install może zakończyć się błędem lub wymagać dodatkowych opcji w zależności od wersji GRUB i konfiguracji systemu. Na przykład niektóre systemy wymagają zainstalowania GRUB z modułami obsługującymi ZFS lub uruchomienia polecenia z poziomu środowiska chroot. Jeśli polecenie zwróci błąd, zapoznaj się z dokumentacją swojej dystrybucji dotyczącą instalacji GRUB z obsługą ZFS.

Info

W Proxmox VE grub-install jest wyłączony. Zamiast niego użyj proxmox-boot-tool. Poniższy przykład korzysta z /dev/sdb2 — zastąp go rzeczywistą partycją EFI w swoim systemie:

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

Podsumowanie

Po zainstalowaniu programu rozruchowego uruchom ponownie serwer i sprawdź, czy system uruchamia się prawidłowo. Wykonaj scrub, aby sprawdzić, czy podczas resilveringu nie wystąpiły błędy odczytu/zapisu:

zpool scrub rpool

Następnie sprawdź stan puli:

zpool status -v

Pula powinna być w stanie online i nie powinna zgłaszać żadnych błędów. Jeśli podczas procesu pojawią się problemy, sprawdź dzienniki systemowe za pomocą journalctl -xe, aby uzyskać dodatkowe informacje.

Warning

Przed wyrzuceniem uszkodzonego dysku usuniętego w kroku 3 uruchom ponownie serwer i upewnij się, że system prawidłowo uruchamia się z dysku zastępczego. Zachowaj uszkodzony dysk jako awaryjną kopię do czasu potwierdzenia prawidłowego uruchamiania systemu.

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