ZFS kök dizininde arızalı bir diski değiştirme | INTROSERV
EUR
european

EUR

usa

USD

Turkish Tr
Ex. VAT Ex. VAT 0%

ZFS kök dizininde arızalı bir diski değiştirme

Bu kılavuz, Linux üzerinde ZFS mirror havuzundaki arızalı bir diskin nasıl değiştirileceğini açıklar. Prosedür; diski çevrimdışı duruma getirmeyi, bölüm tablosunu yedek diske kopyalamayı, diski havuza yeniden eklemeyi ve resilvering işlemi tamamlandıktan sonra önyükleyiciyi yüklemeyi kapsar.

Ön koşullar

Root yetkileri gereklidir. Aşağıdaki örneklerde iki diske sahip bir sunucu varsayılmıştır: /dev/sda (çalışan) ve /dev/sdb (arızalı). Aygıt adlarını kendi yapılandırmanıza göre değiştirin.

Warning

Devam etmeden önce tüm önemli verilerin yedeğini alın. Root diski değiştirmek yüksek riskli bir işlemdir. Herhangi bir adımda yapılacak bir hata veri kaybına veya sistemin önyüklenememesine neden olabilir. ZFS komutlarında /dev/sdX aygıt adlarını kullanmaktan kaçının. Aygıt adları yeniden başlatma sonrasında değişebilir. Bunun yerine /dev/disk/by-id/ gibi kararlı tanımlayıcıları kullanın. Aşağıdaki örneklerde bölümleme araçlarıyla çalışırken basitlik amacıyla /dev/sdX kullanılmıştır. ZFS komutlarında her zaman /dev/disk/by-id/ kullanılmalıdır.

1. Adım: Havuzun durumunu kontrol edin

Herhangi bir değişiklik yapmadan önce havuzun mevcut durumunu kontrol edin:

zpool status -v

Çıktı, hangi diskin arızalı olduğunu ve havuzdaki tanımlayıcısını gösterecektir.

2. Adım: Arızalı diski çevrimdışı duruma getirin

Disk ONLINE durumundaysa ancak arıza belirtileri gösteriyorsa, fiziksel olarak değiştirmeden önce diski çevrimdışı duruma getirin:

zpool offline rpool <failed-device>

ZFS, fiziksel değiştirme işleminden önce arızalı diski kullanmaya çalışmayı durduracaktır. <failed-device> yerine zpool status -v komutunda gösterilen tanımlayıcıyı yazın. Disk zaten FAULTED veya REMOVED durumundaysa bu adımı atlayıp doğrudan 3. adıma geçin.

3. Adım: Diski fiziksel olarak değiştirin

Sunucunuz hot swap özelliğini destekliyorsa diski sistemi kapatmadan değiştirebilirsiniz.

Aksi durumda sistemi kapatın:

poweroff

Yedek diski taktıktan sonra sunucuyu başlatın ve yeni diskin görüldüğünü doğrulayın:

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

Sonraki adımlarda yeni diskin by-id tanımlayıcısını kullanın.

4. Adım: Bölüm tablosu türünü belirleyin

Kurulu değilse gdisk'i yükleyin:

apt install gdisk -y

Çalışan diskteki bölüm tablosu türünü kontrol edin:

gdisk -l /dev/sda

Çıktıda Partition table scan bölümünü bulun. MBR için sonuç MBR: MBR only ve GPT: not present şeklinde olacaktır. GPT için ise MBR: protective ve GPT: present gösterilecektir.

5. Adım: Bölüm tablosunu hazırlayın ve yeni diske kopyalayın

Çoğu ZFS root kurulumu GPT bölümleme kullanır. MBR yöntemi eski sistemler için dahil edilmiştir.

GPT

Devam etmeden önce yeni diske karşılık gelen /dev/sdX adını belirleyin; bölümleme araçları bu adı gerektirir:

lsblk -o NAME,SIZE,MODEL,SERIAL

Bölüm tablosunu kopyalamadan önce yedek disk üzerindeki eski imzaları temizleyin:

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

Warning

wipefs -a, diskteki tüm dosya sistemi ve bölüm imzalarını kalıcı olarak siler. Bu komutu çalıştırmadan önce doğru disk tanımlayıcısının belirtildiğinden emin olun.

Aşağıdaki komut bölüm tablosunu /dev/sda (kaynak) üzerinden /dev/sdb (hedef) diskine kopyalar:

sgdisk -R /dev/sdb /dev/sda

Warning

sgdisk -R komutunda ilk argüman hedef diski, ikinci argüman ise kaynak diski belirtir. Argümanların ters yazılması, çalışan diskteki bölüm tablosunun üzerine yazılmasına neden olur.

Yedek disk orijinal diskten daha büyükse, GPT'yi genişleterek diskin tamamının kullanılmasını sağlayın:

sgdisk -e /dev/sdb

Ardından yedek diske yeni ve benzersiz bir UUID atayın:

sgdisk -G /dev/sdb

Warning

sgdisk -G, yedek diskteki tüm bölümlere yeni UUID'ler atar. /etc/fstab içinde bu bölümlerden herhangi biri için UUID tabanlı girişler varsa sistem önyüklenemeyebilir. Resilvering tamamlandıktan sonra /etc/fstab dosyasının UUID yerine /dev/disk/by-id/ tanımlayıcılarını kullandığını doğrulayın.

Çekirdeğin yeni bölüm düzenini algılaması için bölüm tablosunu yeniden yükleyin:

udevadm trigger udevadm settle

Yedek disk daha önce başka bir ZFS havuzunda kullanıldıysa çakışmaları önlemek için eski ZFS meta verilerini temizleyin:

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

<new-disk-partX> yerine gerçek ZFS bölüm tanımlayıcısını yazın.

MBR

Aşağıdaki komut bölüm tablosunu /dev/sda (kaynak) üzerinden /dev/sdb (hedef) diskine kopyalar:

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

Kopyalama sonrasında yeni bölümler sistemde görünmüyorsa bölüm tablosunu yeniden yükleyin:

udevadm trigger udevadm settle

6. Adım: Diski havuza ekleyin

Havuzdaki arızalı disk girişini yeni diskle değiştirin. Öncelikle havuzda görünen arızalı diskin tam tanımlayıcısını kontrol edin:

zpool status rpool

Çıktıda havuzun aygıt listesi altında arızalı disk girişini bulun. Disk, örneğin /dev/disk/by-id/ata-WDC_WD10_12345-part3 gibi tam bir yol ile ve FAULTED, UNAVAIL veya OFFLINE durumlarından biriyle gösterilecektir. Bu yolu replace komutunda <old-device> olarak kullanın:

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

<old-device> yerine önceki adımda bulunan arızalı diskin tanımlayıcısını yazın. <new-disk-part> yerine yedek disk bölümünün by-id tanımlayıcısını yazın ve çalışan diskte kullanılan bölüm numarasının aynısını kullanın (örneğin -part3 veya -part4). Doğru tanımlayıcıyı bulmak için ls -l /dev/disk/by-id/ komutunu çalıştırın.

Eski disk tamamen kullanılamıyorsa (UNAVAIL) ve zpool replace bir hata döndürüyorsa, değişimi zorlamak için -f seçeneğini ekleyin:

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

zpool replace komutunu çalıştırdıktan sonra resilvering işleminin başladığını ve yeni diskin ONLINE olarak göründüğünü doğrulayın:

zpool status

Resilvering arka planda otomatik olarak devam eder.

7. Adım: Resilvering işlemini izleyin

Resilvering ilerlemesini şu komutla takip edin:

zpool status -v

Çıktı ilerlemeyi, hızı ve tahmini kalan süreyi gösterir. Devam etmeden önce durumun state: ONLINE olarak görünmesini ve resilvering işleminin tamamlanmasını bekleyin. Disk boyutuna bağlı olarak bu işlem birkaç saat sürebilir.

8. Adım: Önyükleme dataset'ini doğrulayın

Önyükleyiciyi yüklemeden önce havuzda doğru önyükleme dataset'inin yapılandırıldığını doğrulayın:

zpool get bootfs rpool

Çıktıda rpool/ROOT/debian gibi bir dataset yolu görünmelidir. Değer none ise veya yanlış dataset'i gösteriyorsa manuel olarak ayarlayın:

zpool set bootfs=rpool/ROOT/debian rpool

rpool/ROOT/debian yerine sisteminizdeki gerçek root dataset adını yazın. Kullanılabilir dataset'leri listelemek için zfs list komutunu çalıştırın.

9. Adım: Önyükleyiciyi yükleyin

Resilvering tamamlandıktan sonra önyükleyiciyi yedek diske yükleyin. Resilvering sırasında sistem orijinal diskten çalışmaya devam eder; bu nedenle havuz sağlıklı duruma geldikten sonra bu adımı güvenle gerçekleştirebilirsiniz.

BIOS (Legacy)

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

Bazı sistemlerde grub-install by-id yolunu kabul etmeyebilir. Bu durumda /dev/disk/by-id/<new-whole-disk> yerine ilgili aygıt adını, örneğin /dev/sdb, kullanın.

UEFI

grub-install komutunu çalıştırmadan önce yedek diskteki EFI bölümünü geçici bir dizine bağlayın. Bu, hâlihazırda etkin olan EFI bölümünün üzerine yazılmasını önler:

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

<new-disk-part1> yerine gerçek EFI bölüm tanımlayıcısını yazın (genellikle -part1 veya -part2; bölüm türü EF00). Emin değilseniz ls -l /dev/disk/by-id/ komutuyla kontrol edin.

EFI bölümü boşsa grub-install komutunu çalıştırmadan önce mevcut EFI bölümünün içeriğini kopyalayın:

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

Önyükleyiciyi yükleyin:

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 değerini dağıtımınıza uygun adla değiştirin (örneğin ubuntu veya debian). /dev/disk/by-id/<new-whole-disk> yerine bölümün değil, yedek diskin tamamının by-id tanımlayıcısını yazın.

update-initramfs komutunun çalıştırılması, başlangıç RAM diskinde güncel ZFS modüllerinin bulunmasını ve yeni havuz düzeninin tanınmasını sağlar. Bu adım olmadan sistem, disk değişiminden sonra önyükleme yapamayabilir.

Kurulumdan sonra EFI bölümünün bağlantısını kaldırın:

umount /mnt/new_efi

EFI önyükleme girişlerini doğrulayın:

efibootmgr -v

Warning

ZFS root kullanılan sistemlerde grub-install, GRUB sürümüne ve sistem yapılandırmasına bağlı olarak başarısız olabilir veya ek seçenekler gerektirebilir. Örneğin bazı sistemlerde GRUB'un ZFS destek modülleriyle yüklenmesi veya komutun bir chroot ortamından çalıştırılması gerekebilir. Komut bir hata döndürürse ZFS'e özel GRUB kurulum talimatları için kullandığınız dağıtımın belgelerine başvurun.

Info

Proxmox VE'de grub-install devre dışıdır. Bunun yerine proxmox-boot-tool kullanın. Aşağıdaki örnekte /dev/sdb2 kullanılmıştır — bunu sisteminizdeki gerçek EFI bölümüyle değiştirin:

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

Sonuç

Önyükleyiciyi yükledikten sonra sunucuyu yeniden başlatın ve sistemin normal şekilde açıldığını doğrulayın. Resilvering sırasında oluşmuş olabilecek okuma/yazma hatalarını kontrol etmek için bir scrub işlemi başlatın:

zpool scrub rpool

Ardından havuzun durumunu kontrol edin:

zpool status -v

Havuz online durumda ve hatasız olmalıdır. İşlem sırasında herhangi bir sorun ortaya çıkarsa daha fazla ayrıntı için journalctl -xe komutuyla sistem günlüklerini kontrol edin.

Warning

3. adımda çıkardığınız arızalı diski elden çıkarmadan önce sunucuyu yeniden başlatın ve sistemin yedek diskten normal şekilde önyükleme yaptığını doğrulayın. Önyüklemenin başarılı olduğu kesinleşene kadar arızalı diski yedek seçenek olarak saklayın.

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