Mengganti disk mati di zpool

31

Saya menjalankan Ubuntu Server 13.04 64-bit menggunakan ZFS asli. Saya memiliki zpool yang terdiri dari 4 hard drive yang satu mati kemarin dan sekarang tidak dikenali oleh OS atau BIOS lagi.

Sayangnya saya melihat masalah hanya setelah reboot berikutnya jadi sekarang label drive hilang dan saya tidak dapat mengganti disk menggunakan instruksi resmi di sini dan di sini .

zpool status hermes -x

cetakan

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

Saya sudah mengganti drive dengan yang baru (yang mendapat label /dev/disk/by-id/ata-ST3500320AS_9QM03ATQ)

Salah satu dari perintah itu

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

gagal dengan

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

karena label drive yang mati tidak ada dalam sistem lagi. Saya juga mencoba perintah di atas menghilangkan jalan ke label drive tidak berhasil.

Bagaimana saya bisa mengganti disk "ghost"?

Marcus
sumber

Jawaban:

38

Setelah menggali tanpa henti malam ini saya akhirnya menemukan solusinya. Jawaban singkatnya adalah bahwa Anda dapat menggunakan GUID disk (yang tetap ada bahkan setelah melepaskan drive) dengan zpoolperintah.

Jawaban panjang: Saya mendapatkan GUID disk menggunakan zdbperintah yang memberi saya output berikut

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:

GUID yang saya cari adalah 15935140517898495532yang memungkinkan saya melakukannya

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

lalu

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

Setelah resilver selesai, semuanya bekerja dengan baik lagi. Ini akan menyenangkan untuk memasukkan informasi ini, Anda dapat menggunakan disk GUID diperoleh melalui zdbdengan zpoolperintah, dengan manual dari zpool.

Edit

Seperti yang ditunjukkan oleh durval di bawah ini, zdbperintah mungkin tidak menghasilkan apa-apa. Maka Anda dapat mencoba menggunakannya

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

untuk secara eksplisit mendaftar informasi tentang perangkat (bahkan jika itu sudah hilang dari sistem).

Marcus
sumber
Keren, lalu sebelum menjalankan add menggunakan -nswitch, tetapi juga -gswitch akan mengambil uuid seperti itu juga.
Brian Thomas
Terima kasih ini cukup membantu ketika mencari-cari di web saya tidak dapat menemukan info tentang cara mendapatkan barang yang didapat dari zdb.
xamox
Saya sudah mencari selama berminggu-minggu dan akhirnya jawaban ini berhasil. Tetapi ID yang terdaftar oleh zpool status(nama-nama seperti sdab) TIDAK sama dengan jalur di /dev/disk/by-id(nama ID panjang gila). Tetapi ls -la /dev/disk/by-idmengungkapkan bahwa mereka semua tautan /dev/...sehingga saya menemukan yang menunjuk ke disk UNAVAIL saya (dan kemudian OFFLINE), dan saya berhasil menyelesaikan langkah-langkah ini. Sekarang resilver. Terima kasih!
Matt
Cara alternatif yang lebih pendek untuk mendapatkan GUID adalah zpool status -gyang menunjukkan status menggunakan GUID untuk setiap perangkat. Juga, untuk @Matt, zpool status -Lakan menampilkan status menggunakan nama perangkat dasar alih-alih /dev/disk/by-idnama panjang .
StarNamer
Anda seorang MVP sejati yang kembali dengan solusi Anda. Ini berhasil untuk saya.
extracrispy
3

Masalahnya adalah disk dirujuk oleh id dan bukan oleh perangkat.

Berikut adalah solusi yang harus berhasil:

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

Sunting: Saya terlambat 30 detik ...

Jlliagre
sumber
Terima kasih. Saya mencoba membuat tautan kosong ke drive yang hilang tetapi terus berkata no such device in pool.
Marcus
Saran saya hampir identik dengan apa yang Anda lakukan. Satu-satunya perbedaan adalah cara mendapatkan panduan perangkat. Setelah membuat symlink ke / dev / null (yang berbeda dari tautan kosong) dan mengekspor / mengimpor kumpulan, muncul dizpool status
jlliagre
Dengan menggunakan metode ini saya benar-benar berhasil mendapatkan "cacat" drive online kembali tanpa menggantinya (jadi saya melewatkan offlinedan replacelangkah - langkah). Saya mengimpor kumpulan ini untuk kedua kalinya setelah menghapus tautan nol. Mungkin itu hanya masalah dengan label drive? Bahkan, nama drive tetap sama. Saya melakukan scrub lengkap setelah itu dan tidak ada kesalahan yang ditemukan.
Serrano
2

@ Marscus: Terima kasih telah mengirim jawaban yang bagus untuk pertanyaan Anda sendiri, ini sangat membantu saya.

Suatu hari saya menemukan twist yang mungkin menarik bagi Anda (dan siapa pun yang datang ke sini-googling di masa depan): Saya memiliki perangkat cache yang dijatuhkan dari kolam (dan ditandai sebagai "UNAVAIL") karena kesalahan yang sama (ZFS-8000-4J, "label tidak ada atau tidak valid"), dan mencoba offline / menghapus / mengganti gagal dengan pesan "no device in pool" yang persis sama.

TETAPI, ketika saya mencoba menerapkan solusi Anda, "zdb" polos (tanpa argumen) tidak mencantumkan perangkat, apalagi GUID-nya.

Setelah beberapa penggalian, saya menemukan bahwa "zdb -l / dev / DEVICENAME" mendaftarkan GUID (mengambilnya langsung dari perangkat, dan bukan dari catatan kumpulan), dan menggunakan GUID itu memungkinkan saya untuk melakukan penggantian (sebenarnya saya melakukan "zpool offline" diikuti oleh "zpool remove" dan kemudian "zpool add", yang bekerja dengan sempurna).

durval
sumber
Terima kasih! A menambahkan petunjuk dalam jawaban yang saya terima sendiri dengan referensi untuk komentar Anda.
Marcus
Bagi saya, zdb -l /dev/...selalu menunjukkan "gagal membongkar label".
Matt
0

Saya memiliki masalah serupa:

Drive gagal sedemikian rupa sehingga tidak terdaftar di BIOS lagi (benar-benar mati). The zpool statusmenunjukkan bahwa itu UNAVAILABLE.

Aku meletakkan drive kapasitas yang sama, dan saya berhasil mengalokasikan sebagai baru spareyang INUSEdan resilvered drive. Tapi, itu sebenarnya bukan bagian dari zpool, melainkan kolam itu memiliki memori drive yang hilang, berpikir suatu hari nanti akan muncul lagi.

Solusinya adalah dengan pertama-tama menjatuhkan drive yang hilang dari zpool:

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

Kemudian, jatuhkan drive yang ditandai spare-1 INUSEjuga:

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

Setelah saya melakukan ini, sepertinya FreeNAS menemukan jawabannya tanpa saya harus melakukan replaceperintah, namun jika sistem Anda tidak mengetahuinya sendiri, perintah berikut harus mengganti satu perangkat dengan yang lain:

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

Sebagai contoh:

zpool replace hactar_data /dev/gptid/87410b00-adb0-11e6-9193-00241d738094 /dev/gptid/87410b00-adb0-11e6-9193-00241d
738094
  • Gptid datang dari zpool statusperintah saya .
Frood
sumber