Bir zpool'daki ölü diskin değiştirilmesi


31

Yerel ZFS kullanarak Ubuntu Server 13.04 64-bit kullanıyorum. Bir dün öldü ve şimdi olduğu 4 sabit diskler oluşan bir zpool sahip değil artık OS veya BIOS tarafından kabul edilme.

Ne yazık ki, sorunu yalnızca bir sonraki yeniden başlatmadan sonra gördüm, bu yüzden şimdi sürücü etiketi yok ve burada ve buradaki resmi talimatları kullanarak diski değiştiremiyorum .

zpool status hermes -x

baskılar

root@zeus:~# zpool status hermes -x
  pool: hermes
 state: DEGRADED
status: One or more devices could not be used because the label is missing or
        invalid.  Sufficient replicas exist for the pool to continue
        functioning in a degraded state.
action: Replace the device using 'zpool replace'.
   see: http://zfsonlinux.org/msg/ZFS-8000-4J
  scan: scrub repaired 0 in 2h4m with 0 errors on Sun Jun  9 00:28:24 2013
config:

        NAME                         STATE     READ WRITE CKSUM
        hermes                       DEGRADED     0     0     0
          raidz1-0                   DEGRADED     0     0     0
            ata-ST3300620A_5QF0MJFP  ONLINE       0     0     0
            ata-ST3300831A_5NF0552X  UNAVAIL      0     0     0
            ata-ST3200822A_5LJ1CHMS  ONLINE       0     0     0
            ata-ST3200822A_3LJ0189C  ONLINE       0     0     0

errors: No known data errors

Zaten sürücüyü yenisiyle değiştirdim (etiketi aldım /dev/disk/by-id/ata-ST3500320AS_9QM03ATQ)

Komutlardan herhangi biri

zpool replace hermes /dev/disk/by-id/ata-ST3300831A_5NF0552X /dev/disk/by-id/ata-ST3500320AS_9QM03ATQ
zpool offline hermes /dev/disk/by-id/ata-ST3300831A_5NF0552X
zpool detatch hermes /dev/disk/by-id/ata-ST3300831A_5NF0552X

ile başarısız

root@zeus:~# zpool offline hermes /dev/disk/by-id/ata-ST3300831A_5NF0552X
cannot offline /dev/disk/by-id/ata-ST3300831A_5NF0552X: no such device in pool

çünkü ölen sürücünün etiketi artık sistemde mevcut değildir. Ayrıca, sürücünün etiketine giden boşluğu atlamak için yukarıdaki komutları da denedim.

"Hayalet" diskini nasıl değiştirebilirim?

Yanıtlar:


38

Sonsuza dek kazdıktan sonra nihayet çözümü buldum. Kısa cevap, disklerin GUID'lerini (bir sürücünün bağlantısını kestikten sonra da devam eden) zpoolkomutla kullanabilmenizdir.

Uzun cevap: zdbBana aşağıdaki çıktıyı veren komutu kullanarak diskin GUID'ini aldım.

root@zeus:/dev# zdb
hermes:
    version: 28
    name: 'hermes'
    state: 0
    txg: 162804
    pool_guid: 14829240649900366534
    hostname: 'zeus'
    vdev_children: 1
    vdev_tree:
        type: 'root'
        id: 0
        guid: 14829240649900366534
        children[0]:
            type: 'raidz'
            id: 0
            guid: 5355850150368902284
            nparity: 1
            metaslab_array: 31
            metaslab_shift: 32
            ashift: 9
            asize: 791588896768
            is_log: 0
            create_txg: 4
            children[0]:
                type: 'disk'
                id: 0
                guid: 11426107064765252810
                path: '/dev/disk/by-id/ata-ST3300620A_5QF0MJFP-part2'
                phys_path: '/dev/gptid/73b31683-537f-11e2-bad7-50465d4eb8b0'
                whole_disk: 1
                create_txg: 4
            children[1]:
                type: 'disk'
                id: 1
                guid: 15935140517898495532
                path: '/dev/disk/by-id/ata-ST3300831A_5NF0552X-part2'
                phys_path: '/dev/gptid/746c949a-537f-11e2-bad7-50465d4eb8b0'
                whole_disk: 1
                create_txg: 4
            children[2]:
                type: 'disk'
                id: 2
                guid: 7183706725091321492
                path: '/dev/disk/by-id/ata-ST3200822A_5LJ1CHMS-part2'
                phys_path: '/dev/gptid/7541115a-537f-11e2-bad7-50465d4eb8b0'
                whole_disk: 1
                create_txg: 4
            children[3]:
                type: 'disk'
                id: 3
                guid: 17196042497722925662
                path: '/dev/disk/by-id/ata-ST3200822A_3LJ0189C-part2'
                phys_path: '/dev/gptid/760a94ee-537f-11e2-bad7-50465d4eb8b0'
                whole_disk: 1
                create_txg: 4
    features_for_read:

Aradığım GUID 15935140517898495532yapmamı sağlayan şeydi.

root@zeus:/dev# zpool offline hermes 15935140517898495532
root@zeus:/dev# zpool status
  pool: hermes
 state: DEGRADED
status: One or more devices has been taken offline by the administrator.
        Sufficient replicas exist for the pool to continue functioning in a
        degraded state.
action: Online the device using 'zpool online' or replace the device with
        'zpool replace'.
  scan: scrub repaired 0 in 2h4m with 0 errors on Sun Jun  9 00:28:24 2013
config:

        NAME                         STATE     READ WRITE CKSUM
        hermes                       DEGRADED     0     0     0
          raidz1-0                   DEGRADED     0     0     0
            ata-ST3300620A_5QF0MJFP  ONLINE       0     0     0
            ata-ST3300831A_5NF0552X  OFFLINE      0     0     0
            ata-ST3200822A_5LJ1CHMS  ONLINE       0     0     0
            ata-ST3200822A_3LJ0189C  ONLINE       0     0     0

errors: No known data errors

ve sonra

root@zeus:/dev# zpool replace hermes 15935140517898495532 /dev/disk/by-id/ata-ST3500320AS_9QM03ATQ
root@zeus:/dev# zpool status
  pool: hermes
 state: DEGRADED
status: One or more devices is currently being resilvered.  The pool will
        continue to function, possibly in a degraded state.
action: Wait for the resilver to complete.
  scan: resilver in progress since Sun Jun  9 01:44:36 2013
    408M scanned out of 419G at 20,4M/s, 5h50m to go
    101M resilvered, 0,10% done
config:

        NAME                            STATE     READ WRITE CKSUM
        hermes                          DEGRADED     0     0     0
          raidz1-0                      DEGRADED     0     0     0
            ata-ST3300620A_5QF0MJFP     ONLINE       0     0     0
            replacing-1                 OFFLINE      0     0     0
              ata-ST3300831A_5NF0552X   OFFLINE      0     0     0
              ata-ST3500320AS_9QM03ATQ  ONLINE       0     0     0  (resilvering)
            ata-ST3200822A_5LJ1CHMS     ONLINE       0     0     0
            ata-ST3200822A_3LJ0189C     ONLINE       0     0     0

errors: No known data errors

Direnç tamamlandıktan sonra her şey tekrar işe yaradı. Bu bilgiyi eklemek güzel olurdu zdb, zpoolkomutla elde edilen bir diski GUID'sini zpool sayfasını kullanarak kullanabilirsiniz.

Düzenle

Altındaki durval tarafından belirtildiği gibi zdbkomut hiçbir şey vermeyebilir. O zaman kullanmayı deneyebilirsin

zdb -l /dev/<name-of-device>

Cihazla ilgili bilgileri açıkça listelemek için (zaten sistemden eksik olsa bile).


Soğuk, sonra çalıştırmadan önce -nanahtarını kullanarak ekleme , ancak aynı zamanda -ganahtar bu şekilde uuid kapmak olacaktır.
Brian Thomas

Teşekkürler Bu web etrafında alay gibi oldukça yararlı oldu ben şeyler zdb geaned alma konusunda bilgi bulamadım.
xamox

Haftalardır araştırma yapıyorum ve sonunda bu cevap işe yaradı. Ancak, zpool status(sdab gibi isimler) tarafından listelenen kimlikler, içerideki yollarla aynı değildi /dev/disk/by-id(çılgın uzun kimlik isimleri). Ancak ls -la /dev/disk/by-idbunların hepsinin bağlantıda olduğunu gösteriyor, /dev/...bu yüzden UNAVAIL (ve ardından ÇEVRİMDIŞI) diskime işaret eden bir tane buldum ve bu adımları başarıyla tamamladım. Şimdi resilvering. Teşekkür ederim!
Matt

GUID'yi almanın alternatif daha kısa bir yolu, zpool status -gher aygıt için GUID kullanan durumu gösteren durumdur. Ayrıca, @Matt için zpool status -L, uzun /dev/disk/by-idadlar yerine temel cihaz adlarını kullanarak durumu gösterecektir .
StarNamer

Çözümünle geri gelen gerçek bir MVP'sin. Bu benim için çalıştı.
extracrispy

3

Sorun, disklere aygıt tarafından değil, kimlikleriyle başvurulmasıdır.

İşte çalışması gereken bir geçici çözüm:

ln -s /dev/null /dev/ata-ST3300831A_5NF0552X
zpool export hermes
zpool import hermes
zpool status
# note the new device name that should appear here
zpool offline hermes xxxx
zpool replace hermes xxxx /dev/disk/by-id/ata-ST3500320AS_9QM03ATQ

Düzenleme: 30 saniye geciktim ...


Teşekkürler. Eksik sürücüye boş bir link oluşturmaya çalışıyordum ama söylemeye devam ediyordu no such device in pool.
Marcus

Benim önerim, yaptıklarınızla neredeyse aynı. Tek fark, aygıtı yönlendirmenin yoludur. / Dev / null zpool status
öğesine

Bu yöntemi kullanarak aslında "kusur" sürücüsünü değiştirmeden tekrar çevrimiçi duruma getirmeyi başardım (bu yüzden atladım offlineve replaceadım attım ). Boş bağlantıyı kaldırdıktan sonra ikinci kez havuza aktardım. Belki de sadece sürücü etiketinde bir sorun olmuştur? Aslında, sürücü adı aynı kaldı. Daha sonra tam bir fırçalama yaptım ve hiçbir hata bulunamadı.
Serrano,

2

@Marcus: Kendi sorunuza bu mükemmel cevabı gönderdiğiniz için teşekkür ederiz, bu bana çok yardımcı oldu.

Geçen gün sizi ilgilendirebilecek bir bükülme tespit ettim (ve gelecekte gelecekte bir sorun yaratır) (ZFS-8000-4J, "etiket eksik veya geçersiz") ve çevrimdışı olarak kaldırmaya / kaldırmaya / değiştirmeye aynı "havuzda böyle bir aygıt yok" iletisiyle aynı şekilde başarısız oldu.

Ben senin çözüm uygulamaya çalışırken AMA, (argüman olmadan) düz "ZDB" did not cihazı, çok daha az GUID sıralar.

Biraz kazı yaptıktan sonra, "zdb -l / dev / DEVICENAME" öğesinin GUID’yi listelediğini (doğrudan cihazdan ve havuz kayıtlarından aldığını) ve bu GUID’in kullanılmasının yerine koymamı sağladığını gördüm (aslında ben yaptım "zpool offline" ve ardından "zpool remove" ve sonra "mükemmel bir şekilde işe yarayan" zpool add "ifadesiyle).


Teşekkürler! Yorumunuza atıfta bulunan, kendi kabul ettiğim cevaba bir ipucu eklendi.
Marcus

Benim için zdb -l /dev/...her zaman "etiketin açılması başarısız" olduğunu gösterdi.
Matt

0

Benzer bir sorun vardı:

Sürücü, artık BIOS'a kaydolmayacak şekilde başarısız oldu (tamamen ölü). Olduğunu zpool statusbelirtti UNAVAILABLE.

Ben benzer bir kapasite sürücü koydu, ben yeni olarak tahsis başardı spareolduğunu INUSEve sürücü resilvered. Ancak, aslında zpool'un bir parçası değildi, aksine havuzun bir gün tekrar ortaya çıkacağını düşünerek, kayıp sürücünün bir hatırası vardı.

Çözüm, kayıp sürücüyü ilk önce zpool'dan çıkarmaktı:

[root@hactar ~]# zpool detach hactar_data /dev/gptid/87410b00-adb0-11e6-9193-00241d738094  

Ardından, spare-1 INUSEayrıca işaretli sürücüyü de bırakın :

[root@hactar ~]# zpool detach hactar_data /dev/gptid/f2089b59-2654-11e5-8d99-00241d738094

Bunu yaptıktan sonra, bir replacekomut yapmak zorunda kalmadan FreeNAS bunu çözdüğünü anladı gibi görünüyor , ancak sisteminiz kendini çözmezse, aşağıdaki komut bir cihazı diğeriyle değiştirmelidir:

zpool replace {your_poolname} {drive to be replaced} {new drive to take its place}

Örneğin:

zpool replace hactar_data /dev/gptid/87410b00-adb0-11e6-9193-00241d738094 /dev/gptid/87410b00-adb0-11e6-9193-00241d
738094
  • Gptids benim emrimden geldi zpool status.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.