Zamenjava okvarjenega diska v korenskem sistemu ZFS
Ta vodič pojasnjuje, kako zamenjati okvarjeni disk v zrcalnem (mirror) področju ZFS v sistemu Linux. Postopek vključuje preklop diska v stanje brez povezave, kopiranje particijske tabele na nadomestni disk, ponovno dodajanje diska v področje in namestitev zagonskega nalagalnika po končanem postopku resilvering.
Predpogoji
Potrebujete skrbniške pravice root. Spodnji primeri predvidevajo strežnik z dvema diskoma: /dev/sda (delujoči) in /dev/sdb (okvarjeni). Imena naprav prilagodite svoji konfiguraciji.
Pred nadaljevanjem varnostno kopirajte vse pomembne podatke. Zamenjava korenskega diska je operacija z velikim tveganjem. Napaka v katerem koli koraku lahko povzroči izgubo podatkov ali onemogoči zagon sistema. V ukazih ZFS se izogibajte uporabi imen naprav /dev/sdX. Imena naprav se lahko po ponovnem zagonu spremenijo. Namesto tega uporabljajte stabilne identifikatorje, kot je /dev/disk/by-id/. Spodnji primeri uporabljajo /dev/sdX zaradi enostavnosti pri delu z orodji za particioniranje. Ukazi ZFS morajo vedno uporabljati /dev/disk/by-id/.
1. korak: Preverite stanje področja
Pred kakršnimi koli spremembami preverite trenutno stanje področja:
zpool status -v
Izpis bo pokazal, kateri disk je okvarjen, in njegov identifikator v področju.
2. korak: Preklopite okvarjeni disk v stanje brez povezave
Če je disk v stanju ONLINE, vendar kaže znake okvare, ga pred fizično zamenjavo preklopite v stanje brez povezave:
zpool offline rpool <failed-device>
ZFS bo pred fizično zamenjavo prenehal poskušati uporabljati okvarjeni disk. <failed-device> zamenjajte z identifikatorjem, prikazanim z ukazom zpool status -v. Če je disk že v stanju FAULTED ali REMOVED, ta korak preskočite in nadaljujte neposredno s 3. korakom.
3. korak: Fizično zamenjajte disk
Če vaš strežnik podpira vročo zamenjavo (hot swap), lahko disk zamenjate brez izklopa sistema.
V nasprotnem primeru sistem izklopite:
poweroff
Po namestitvi nadomestnega diska zaženite strežnik in preverite, ali je novi disk viden:
lsblk -o NAME,SIZE,MODEL ls -l /dev/disk/by-id/
V nadaljnjih korakih uporabite identifikator by-id novega diska.
4. korak: Določite vrsto particijske tabele
Če gdisk še ni nameščen, ga namestite:
apt install gdisk -y
Preverite vrsto particijske tabele na delujočem disku:
gdisk -l /dev/sda
V izpisu poiščite razdelek Partition table scan. Pri MBR bo rezultat prikazal MBR: MBR only in GPT: not present. Pri GPT bo prikazano MBR: protective in GPT: present.
5. korak: Pripravite in kopirajte particijsko tabelo na novi disk
Večina korenskih konfiguracij ZFS uporablja particioniranje GPT. Metoda MBR je vključena za starejše sisteme.
GPT
Pred nadaljevanjem določite ime /dev/sdX, ki ustreza novemu disku, saj ga orodja za particioniranje potrebujejo:
lsblk -o NAME,SIZE,MODEL,SERIAL
Pred kopiranjem particijske tabele odstranite vse stare podpise z nadomestnega diska:
wipefs -a /dev/disk/by-id/<new-disk>
wipefs -a trajno odstrani vse podpise datotečnih sistemov in particij z diska. Pred izvedbo ukaza se prepričajte, da je naveden pravilen identifikator diska.
Naslednji ukaz kopira particijsko tabelo iz /dev/sda (vir) v /dev/sdb (cilj):
sgdisk -R /dev/sdb /dev/sda
Pri ukazu sgdisk -R je prvi argument ciljni disk, drugi pa izvorni disk. Če argumenta zamenjate, boste prepisali particijsko tabelo na delujočem disku.
Če je nadomestni disk večji od izvirnega, razširite GPT, da bo uporabljena celotna zmogljivost diska:
sgdisk -e /dev/sdb
Nato nadomestnemu disku dodelite nov edinstven UUID:
sgdisk -G /dev/sdb
sgdisk -G dodeli nove UUID-je vsem particijam na nadomestnem disku. Če /etc/fstab vsebuje vnose, ki temeljijo na UUID-jih za katero koli od teh particij, se sistem morda ne bo zagnal. Po končanem resilveringu preverite, ali /etc/fstab uporablja identifikatorje /dev/disk/by-id/ namesto UUID-jev.
Ponovno naložite particijsko tabelo, da jedro zazna novo postavitev:
udevadm trigger udevadm settle
Če je bil nadomestni disk prej uporabljen v drugem področju ZFS, odstranite stare metapodatke ZFS, da preprečite konflikte:
zpool labelclear /dev/disk/by-id/<new-disk-partX> 2>/dev/null || true
<new-disk-partX> zamenjajte z dejanskim identifikatorjem particije ZFS.
MBR
Naslednji ukaz kopira particijsko tabelo iz /dev/sda (vir) v /dev/sdb (cilj):
sfdisk -d /dev/sda | sfdisk /dev/sdb
Če nove particije po kopiranju niso vidne v sistemu, ponovno naložite particijsko tabelo:
udevadm trigger udevadm settle
6. korak: Dodajte disk v področje
Okvarjeni disk v področju zamenjajte z novim diskom. Najprej preverite natančen identifikator okvarjenega diska, kot je prikazan v področju:
zpool status rpool
V izpisu poiščite vnos okvarjenega diska na seznamu naprav področja. Prikazan bo kot celotna pot, na primer /dev/disk/by-id/ata-WDC_WD10_12345-part3, s stanjem FAULTED, UNAVAIL ali OFFLINE. To pot uporabite kot <old-device> v ukazu replace:
zpool replace rpool <old-device> /dev/disk/by-id/<new-disk-part>
<old-device> zamenjajte z identifikatorjem okvarjenega diska iz prejšnjega koraka. <new-disk-part> zamenjajte z identifikatorjem by-id particije nadomestnega diska in uporabite isto številko particije kot pri delujočem disku, na primer -part3 ali -part4. Pravilen identifikator poiščite z ukazom ls -l /dev/disk/by-id/.
Če stari disk ni več v celoti dostopen (UNAVAIL) in zpool replace vrne napako, dodajte zastavico -f, da vsilite zamenjavo:
zpool replace -f rpool <old-device> /dev/disk/by-id/<new-disk-part>
Po izvedbi zpool replace preverite, ali se je resilvering začel in ali je novi disk prikazan kot ONLINE:
zpool status
Resilvering se bo samodejno nadaljeval v ozadju.
7. korak: Spremljajte resilvering
Napredek resilveringa spremljajte z:
zpool status -v
Izpis prikazuje napredek, hitrost in predvideni preostali čas. Pred nadaljevanjem počakajte, da stanje prikaže state: ONLINE in da je resilvering končan. Odvisno od velikosti diska lahko to traja več ur.
8. korak: Preverite zagonski dataset
Pred namestitvijo zagonskega nalagalnika preverite, ali je v področju konfiguriran pravilen zagonski dataset:
zpool get bootfs rpool
Izpis mora prikazati pot do dataseta, na primer rpool/ROOT/debian. Če je vrednost none ali kaže na napačen dataset, jo nastavite ročno:
zpool set bootfs=rpool/ROOT/debian rpool
rpool/ROOT/debian zamenjajte z dejanskim imenom korenskega dataseta v vašem sistemu. Za seznam razpoložljivih datasetov zaženite zfs list.
9. korak: Namestite zagonski nalagalnik
Po končanem resilveringu namestite zagonski nalagalnik na nadomestni disk. Sistem med resilveringom še naprej deluje z izvirnega diska, zato je ta korak varno izvesti, ko je področje ponovno zdravo.
BIOS (Legacy)
grub-install /dev/disk/by-id/<new-whole-disk>
V nekaterih sistemih grub-install morda ne sprejme poti by-id. V tem primeru /dev/disk/by-id/<new-whole-disk> zamenjajte z ustreznim imenom naprave, na primer /dev/sdb.
UEFI
Pred zagonom grub-install namestite particijo EFI z nadomestnega diska v začasni imenik. S tem preprečite prekrivanje trenutno aktivne particije EFI:
mkdir -p /mnt/new_efi mount /dev/disk/by-id/<new-disk-part1> /mnt/new_efi
<new-disk-part1> zamenjajte z dejanskim identifikatorjem particije EFI (običajno -part1 ali -part2; vrsta particije EF00). Če niste prepričani, preverite z ukazom ls -l /dev/disk/by-id/.
Če je particija EFI prazna, pred zagonom grub-install kopirajte vsebino obstoječe particije EFI:
cp -r /boot/efi/* /mnt/new_efi/
Namestite zagonski nalagalnik:
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 zamenjajte z imenom, ki ustreza vaši distribuciji, na primer ubuntu ali debian. /dev/disk/by-id/<new-whole-disk> zamenjajte z identifikatorjem by-id celotnega nadomestnega diska, ne posamezne particije.
Zagon ukaza update-initramfs zagotovi, da začetni ramdisk vsebuje trenutne module ZFS in prepozna novo postavitev področja. Brez tega koraka se sistem po zamenjavi morda ne bo mogel zagnati.
Po namestitvi odklopite particijo EFI:
umount /mnt/new_efi
Preverite zagonske vnose EFI:
efibootmgr -v
V sistemih s korenskim sistemom ZFS lahko grub-install ne uspe ali zahteva dodatne zastavice, odvisno od različice GRUB in konfiguracije sistema. Nekateri sistemi na primer zahtevajo namestitev GRUB z moduli za podporo ZFS ali izvajanje ukaza iz okolja chroot. Če ukaz vrne napako, preverite dokumentacijo svoje distribucije za navodila za namestitev GRUB s podporo za ZFS.
V Proxmox VE je grub-install onemogočen. Namesto njega uporabite proxmox-boot-tool. Spodnji primer uporablja /dev/sdb2 — zamenjajte ga z dejansko particijo EFI v svojem sistemu:
proxmox-boot-tool format /dev/sdb2 proxmox-boot-tool init /dev/sdb2
Zaključek
Po namestitvi zagonskega nalagalnika znova zaženite strežnik in preverite, ali se sistem normalno zažene. Zaženite scrub, da preverite morebitne napake pri branju/pisanju, ki so se lahko pojavile med resilveringom:
zpool scrub rpool
Nato preverite stanje področja:
zpool status -v
Področje mora biti v stanju online in brez napak. Če se med postopkom pojavijo težave, preverite sistemske dnevnike z ukazom journalctl -xe, da pridobite dodatne informacije.
Preden zavržete okvarjeni disk, ki ste ga odstranili v 3. koraku, znova zaženite strežnik in preverite, ali se sistem normalno zažene z nadomestnega diska. Okvarjeni disk shranite kot rezervno možnost, dokler ne potrdite uspešnega zagona sistema.