Zamjena neuspjelog diska u ZFS korijenu
Ovaj vodič objašnjava kako zamijeniti neispravan disk u ZFS mirror poolu na Linuxu. Postupak obuhvaća stavljanje diska izvan mreže, kopiranje particijske tablice na zamjenski disk, ponovno dodavanje diska u pool i instalaciju bootloadera nakon završetka resilveringa.
Preduvjeti
Potrebne su root ovlasti. U primjerima u nastavku pretpostavlja se da poslužitelj ima dva diska: /dev/sda (ispravan) i /dev/sdb (neispravan). Prilagodite nazive uređaja svojoj konfiguraciji.
Prije nastavka napravite sigurnosnu kopiju svih važnih podataka. Zamjena root diska operacija je visokog rizika. Pogreška u bilo kojem koraku može dovesti do gubitka podataka ili onemogućiti pokretanje sustava. Izbjegavajte korištenje naziva uređaja kao što je /dev/sdX u ZFS naredbama. Nazivi uređaja mogu se promijeniti nakon ponovnog pokretanja. Umjesto toga koristite stabilne identifikatore kao što je /dev/disk/by-id/. Primjeri u nastavku koriste /dev/sdX radi jednostavnosti pri radu s alatima za particioniranje. ZFS naredbe uvijek moraju koristiti /dev/disk/by-id/.
1. korak: Provjerite stanje poola
Prije bilo kakvih promjena provjerite trenutno stanje poola:
zpool status -v
Izlaz će prikazati koji je disk neispravan i njegov identifikator u poolu.
2. korak: Stavite neispravan disk izvan mreže
Ako je disk ONLINE, ali pokazuje znakove kvara, stavite ga izvan mreže prije fizičke zamjene:
zpool offline rpool <failed-device>
ZFS će prestati pokušavati koristiti neispravan disk prije njegove fizičke zamjene. Zamijenite <failed-device> identifikatorom prikazanim naredbom zpool status -v. Ako je disk već u stanju FAULTED ili REMOVED, preskočite ovaj korak i prijeđite izravno na 3. korak.
3. korak: Fizički zamijenite disk
Ako vaš poslužitelj podržava hot swap, disk možete zamijeniti bez isključivanja sustava.
U suprotnom isključite sustav:
poweroff
Nakon ugradnje zamjenskog diska pokrenite poslužitelj i provjerite je li novi disk vidljiv:
lsblk -o NAME,SIZE,MODEL ls -l /dev/disk/by-id/
U sljedećim koracima koristite by-id identifikator novog diska.
4. korak: Odredite vrstu particijske tablice
Ako gdisk još nije instaliran, instalirajte ga:
apt install gdisk -y
Provjerite vrstu particijske tablice na ispravnom disku:
gdisk -l /dev/sda
U izlazu pronađite odjeljak Partition table scan. Za MBR rezultat će prikazati MBR: MBR only i GPT: not present. Za GPT prikazat će se MBR: protective i GPT: present.
5. korak: Pripremite i kopirajte particijsku tablicu na novi disk
Većina ZFS root konfiguracija koristi GPT particioniranje. MBR metoda uključena je za starije sustave.
GPT
Prije nastavka odredite naziv /dev/sdX koji odgovara novom disku jer ga alati za particioniranje zahtijevaju:
lsblk -o NAME,SIZE,MODEL,SERIAL
Prije kopiranja particijske tablice obrišite stare potpise sa zamjenskog diska:
wipefs -a /dev/disk/by-id/<new-disk>
wipefs -a trajno uklanja sve potpise datotečnih sustava i particija s diska. Prije pokretanja ove naredbe provjerite da je naveden ispravan identifikator diska.
Sljedeća naredba kopira particijsku tablicu s /dev/sda (izvor) na /dev/sdb (odredište):
sgdisk -R /dev/sdb /dev/sda
U naredbi sgdisk -R prvi je argument odredišni disk, a drugi izvorni disk. Zamjenom redoslijeda argumenata prebrisat ćete particijsku tablicu na ispravnom disku.
Ako je zamjenski disk veći od izvornog, proširite GPT kako biste iskoristili cijeli disk:
sgdisk -e /dev/sdb
Zatim zamjenskom disku dodijelite novi jedinstveni UUID:
sgdisk -G /dev/sdb
sgdisk -G dodjeljuje nove UUID-ove svim particijama na zamjenskom disku. Ako /etc/fstab sadrži zapise temeljene na UUID-u za neku od tih particija, sustav se možda neće moći pokrenuti. Nakon završetka resilveringa provjerite koristi li /etc/fstab identifikatore /dev/disk/by-id/, a ne UUID-ove.
Ponovno učitajte particijsku tablicu kako bi kernel preuzeo novi raspored:
udevadm trigger udevadm settle
Ako je zamjenski disk prethodno korišten u drugom ZFS poolu, obrišite stare ZFS metapodatke kako biste izbjegli konflikte:
zpool labelclear /dev/disk/by-id/<new-disk-partX> 2>/dev/null || true
Zamijenite <new-disk-partX> stvarnim identifikatorom ZFS particije.
MBR
Sljedeća naredba kopira particijsku tablicu s /dev/sda (izvor) na /dev/sdb (odredište):
sfdisk -d /dev/sda | sfdisk /dev/sdb
Ako nove particije nakon kopiranja nisu vidljive u sustavu, ponovno učitajte particijsku tablicu:
udevadm trigger udevadm settle
6. korak: Dodajte disk u pool
Zamijenite neispravan disk u poolu novim diskom. Najprije provjerite točan identifikator neispravnog diska kako je prikazan u poolu:
zpool status rpool
U izlazu pronađite unos neispravnog diska na popisu uređaja poola. Bit će prikazan kao puna putanja, primjerice /dev/disk/by-id/ata-WDC_WD10_12345-part3, sa statusom FAULTED, UNAVAIL ili OFFLINE. Tu putanju koristite kao <old-device> u naredbi replace:
zpool replace rpool <old-device> /dev/disk/by-id/<new-disk-part>
Zamijenite <old-device> identifikatorom neispravnog diska iz prethodnog koraka. Zamijenite <new-disk-part> by-id identifikatorom particije zamjenskog diska i koristite isti broj particije kao na ispravnom disku (na primjer, -part3 ili -part4). Ispravan identifikator možete pronaći naredbom ls -l /dev/disk/by-id/.
Ako je stari disk potpuno nedostupan (UNAVAIL), a zpool replace vraća pogrešku, dodajte opciju -f kako biste prisilili zamjenu:
zpool replace -f rpool <old-device> /dev/disk/by-id/<new-disk-part>
Nakon pokretanja zpool replace provjerite je li resilvering započeo i prikazuje li se novi disk kao ONLINE:
zpool status
Resilvering se automatski nastavlja u pozadini.
7. korak: Pratite resilvering
Napredak resilveringa pratite naredbom:
zpool status -v
Izlaz prikazuje napredak, brzinu i procijenjeno preostalo vrijeme. Prije nastavka pričekajte da status bude state: ONLINE i da resilvering završi. Ovisno o kapacitetu diska, postupak može trajati nekoliko sati.
8. korak: Provjerite boot dataset
Prije instalacije bootloadera provjerite je li za pool konfiguriran ispravan boot dataset:
zpool get bootfs rpool
Izlaz bi trebao prikazati putanju dataseta kao što je rpool/ROOT/debian. Ako je vrijednost none ili pokazuje na pogrešan dataset, ručno je postavite:
zpool set bootfs=rpool/ROOT/debian rpool
Zamijenite rpool/ROOT/debian stvarnim nazivom root dataseta na vašem sustavu. Dostupne datasete možete prikazati naredbom zfs list.
9. korak: Instalirajte bootloader
Instalirajte bootloader na zamjenski disk nakon završetka resilveringa. Sustav tijekom resilveringa nastavlja raditi s izvornog diska, pa je ovaj korak sigurno izvršiti nakon što se pool vrati u ispravno stanje.
BIOS (Legacy)
grub-install /dev/disk/by-id/<new-whole-disk>
Na nekim sustavima grub-install možda neće prihvatiti by-id putanju. U tom slučaju zamijenite /dev/disk/by-id/<new-whole-disk> odgovarajućim nazivom uređaja, primjerice /dev/sdb.
UEFI
Montirajte EFI particiju sa zamjenskog diska u privremeni direktorij prije pokretanja grub-install. Time se izbjegava prekrivanje trenutno aktivne EFI particije:
mkdir -p /mnt/new_efi mount /dev/disk/by-id/<new-disk-part1> /mnt/new_efi
Zamijenite <new-disk-part1> stvarnim identifikatorom EFI particije (obično -part1 ili -part2; tip particije EF00). Ako niste sigurni, provjerite pomoću ls -l /dev/disk/by-id/.
Ako je EFI particija prazna, prije pokretanja grub-install kopirajte sadržaj postojeće EFI particije:
cp -r /boot/efi/* /mnt/new_efi/
Instalirajte bootloader:
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
Zamijenite --bootloader-id=debian nazivom koji odgovara vašoj distribuciji (na primjer, ubuntu ili debian). Zamijenite /dev/disk/by-id/<new-whole-disk> by-id identifikatorom cijelog zamjenskog diska, a ne particije.
Pokretanje naredbe update-initramfs osigurava da početni RAM disk sadrži aktualne ZFS module i prepoznaje novi raspored poola. Bez ovog koraka sustav se nakon zamjene možda neće moći pokrenuti.
Nakon instalacije odmontirajte EFI particiju:
umount /mnt/new_efi
Provjerite EFI boot unose:
efibootmgr -v
Na sustavima sa ZFS rootom, grub-install može neuspjeti ili zahtijevati dodatne opcije, ovisno o verziji GRUB-a i konfiguraciji sustava. Na primjer, na nekim sustavima GRUB je potrebno instalirati s modulima za podršku ZFS-u ili naredbu pokrenuti iz chroot okruženja. Ako naredba vrati pogrešku, pogledajte dokumentaciju svoje distribucije za posebne upute o instalaciji GRUB-a sa ZFS podrškom.
Na Proxmox VE-u grub-install je onemogućen. Umjesto njega koristite proxmox-boot-tool. U primjeru u nastavku koristi se /dev/sdb2 — zamijenite ga stvarnom EFI particijom na svom sustavu:
proxmox-boot-tool format /dev/sdb2 proxmox-boot-tool init /dev/sdb2
Zaključak
Nakon instalacije bootloadera ponovno pokrenite poslužitelj i provjerite pokreće li se sustav normalno. Pokrenite scrub kako biste provjerili postoje li pogreške pri čitanju/pisanju koje su se mogle pojaviti tijekom resilveringa:
zpool scrub rpool
Zatim provjerite stanje poola:
zpool status -v
Pool bi trebao biti online i bez pogrešaka. Ako se tijekom postupka pojave problemi, provjerite sistemske zapise pomoću journalctl -xe za dodatne informacije.
Prije nego što odložite neispravan disk koji ste uklonili u 3. koraku, ponovno pokrenite poslužitelj i provjerite da se sustav normalno pokreće sa zamjenskog diska. Neispravan disk zadržite kao rezervnu opciju dok ne potvrdite uspješno pokretanje sustava.