Mengapa mem-boot ulang menyebabkan satu sisi cermin ZFS saya menjadi UNAVAIL?

13

Saya baru-baru ini memigrasikan kumpulan penyimpanan data massal (ZFS Di Linux 0.6.2, Debian Wheezy) dari konfigurasi vdev satu perangkat ke konfigurasi vdev cermin dua arah.

Konfigurasi kolam sebelumnya adalah:

    NAME                     STATE     READ WRITE CKSUM
    akita                    ONLINE       0     0     0
      ST4000NM0033-Z1Z1A0LQ  ONLINE       0     0     0

Semuanya baik-baik saja setelah resilver selesai (saya memulai scrub setelah resilver selesai, hanya agar sistem memeriksa semuanya sekali lagi dan memastikan semuanya baik-baik saja):

  pool: akita
 state: ONLINE
  scan: scrub repaired 0 in 6h26m with 0 errors on Sat May 17 06:16:06 2014
config:

        NAME                       STATE     READ WRITE CKSUM
        akita                      ONLINE       0     0     0
          mirror-0                 ONLINE       0     0     0
            ST4000NM0033-Z1Z1A0LQ  ONLINE       0     0     0
            ST4000NM0033-Z1Z333ZA  ONLINE       0     0     0

errors: No known data errors

Namun, setelah mem-boot ulang, saya mendapat email yang memberitahukan saya bahwa kolam itu tidak bagus dan keren. Saya telah melihat dan inilah yang saya lihat:

   pool: akita
  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 in progress since Sat May 17 14:20:15 2014
     316G scanned out of 1,80T at 77,5M/s, 5h36m to go
     0 repaired, 17,17% done
 config:

         NAME                       STATE     READ WRITE CKSUM
         akita                      DEGRADED     0     0     0
           mirror-0                 DEGRADED     0     0     0
             ST4000NM0033-Z1Z1A0LQ  ONLINE       0     0     0
             ST4000NM0033-Z1Z333ZA  UNAVAIL      0     0     0

 errors: No known data errors

Lulur diharapkan; ada pengaturan tugas cron untuk memulai scrub sistem penuh saat reboot. Namun, saya jelas tidak mengharapkan HDD baru jatuh dari cermin.

Saya mendefinisikan alias yang memetakan ke nama / dev / disk / by-id / wwn- *, dan dalam kasus kedua disk ini telah memberikan ZFS pemerintahan bebas untuk menggunakan disk penuh, termasuk menangani partisi:

# zpool history akita | grep ST4000NM0033
2013-09-12.18:03:06 zpool create -f -o ashift=12 -o autoreplace=off -m none akita ST4000NM0033-Z1Z1A0LQ
2014-05-15.15:30:59 zpool attach -o ashift=12 -f akita ST4000NM0033-Z1Z1A0LQ ST4000NM0033-Z1Z333ZA
# 

Ini adalah baris yang relevan dari /etc/zfs/vdev_id.conf (saya perhatikan sekarang bahwa Z1Z333ZA menggunakan karakter tab untuk pemisahan sedangkan garis Z1Z1A0LQ hanya menggunakan spasi, tapi saya jujur ​​tidak melihat bagaimana itu bisa relevan di sini) :

alias ST4000NM0033-Z1Z1A0LQ             /dev/disk/by-id/wwn-0x5000c500645b0fec
alias ST4000NM0033-Z1Z333ZA     /dev/disk/by-id/wwn-0x5000c50065e8414a

Ketika saya melihat, /dev/disk/by-id/wwn-0x5000c50065e8414a*ada di sana seperti yang diharapkan, tetapi /dev/disk/by-vdev/ST4000NM0033-Z1Z333ZA*tidak ada.

Penerbitan sudo udevadm triggermenyebabkan symlink muncul di / dev / disk / by-vdev. Namun, ZFS tampaknya tidak hanya menyadari bahwa mereka ada di sana (Z1Z333ZA masih menunjukkan sebagai UNAVAIL). Sebanyak itu saya kira bisa diharapkan.

Saya mencoba mengganti perangkat yang relevan, tetapi tidak berhasil:

# zpool replace akita ST4000NM0033-Z1Z333ZA
invalid vdev specification
use '-f' to override the following errors:
/dev/disk/by-vdev/ST4000NM0033-Z1Z333ZA-part1 is part of active pool 'akita'
# 

Kedua disk terdeteksi selama proses boot (output log dmesg menunjukkan drive yang relevan):

[    2.936065] ata2: SATA link up 6.0 Gbps (SStatus 133 SControl 300)
[    2.936137] ata4: SATA link up 6.0 Gbps (SStatus 133 SControl 300)
[    2.937446] ata4.00: ATA-9: ST4000NM0033-9ZM170, SN03, max UDMA/133
[    2.937453] ata4.00: 7814037168 sectors, multi 16: LBA48 NCQ (depth 31/32), AA
[    2.938516] ata4.00: configured for UDMA/133
[    2.992080] ata6: SATA link up 6.0 Gbps (SStatus 133 SControl 300)
[    3.104533] ata6.00: ATA-9: ST4000NM0033-9ZM170, SN03, max UDMA/133
[    3.104540] ata6.00: 7814037168 sectors, multi 16: LBA48 NCQ (depth 31/32), AA
[    3.105584] ata6.00: configured for UDMA/133
[    3.105792] scsi 5:0:0:0: Direct-Access     ATA      ST4000NM0033-9ZM SN03 PQ: 0 ANSI: 5
[    3.121245] sd 3:0:0:0: [sdb] 7814037168 512-byte logical blocks: (4.00 TB/3.63 TiB)
[    3.121372] sd 3:0:0:0: [sdb] Write Protect is off
[    3.121379] sd 3:0:0:0: [sdb] Mode Sense: 00 3a 00 00
[    3.121426] sd 3:0:0:0: [sdb] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
[    3.122070] sd 5:0:0:0: [sdc] 7814037168 512-byte logical blocks: (4.00 TB/3.63 TiB)
[    3.122176] sd 5:0:0:0: [sdc] Write Protect is off
[    3.122183] sd 5:0:0:0: [sdc] Mode Sense: 00 3a 00 00
[    3.122235] sd 5:0:0:0: [sdc] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA

Kedua drive terhubung langsung ke motherboard; tidak ada pengendali off-board yang terlibat.

Secara spontan, saya melakukannya:

# zpool online akita ST4000NM0033-Z1Z333ZA

yang tampaknya berhasil; Z1Z333ZA sekarang setidaknya ONLINEdan resilver. Sekitar satu jam setelah resilver, ia memindai 180G dan resilver 24G dengan 9,77% selesai, yang menunjukkan tidak melakukan resilver penuh tetapi hanya mentransfer delta dataset.

Jujur saya tidak yakin apakah masalah ini terkait dengan ZFS Di Linux atau udev (baunya sedikit seperti udev, tapi mengapa satu drive terdeteksi dengan baik tetapi tidak yang lain), tetapi pertanyaan saya adalah bagaimana saya membuat yakin hal yang sama tidak terjadi lagi pada reboot berikutnya?

Saya akan dengan senang hati memberikan lebih banyak data pada pengaturan jika perlu; beri tahu saya apa yang dibutuhkan.

sebuah CVn
sumber

Jawaban:

10

Ini adalah masalah udev yang tampaknya spesifik untuk varian Debian dan Ubuntu . Sebagian besar ZFS saya di Linux bekerja dengan CentOS / RHEL.

Utas serupa pada daftar diskusi ZFS telah menyebutkan ini.

Lihat:
entri scsi dan ata untuk hard drive yang sama di bawah / dev / disk / by-id
dan
ZFS di Linux / Ubuntu: Bantuan mengimpor zpool setelah peningkatan Ubuntu dari 13,04 menjadi 13,10, ID perangkat telah berubah

Saya tidak yakin apa pendekatan perangkat kumpulan yang paling deterministik untuk sistem Debian / Ubuntu. Untuk RHEL, saya lebih suka menggunakan WWN perangkat pada perangkat pool umum. Tetapi di lain waktu, nama perangkat / serial juga berguna. Tapi udev harus bisa mengendalikan semua ini.

# zpool status
  pool: vol1
 state: ONLINE
  scan: scrub repaired 0 in 0h32m with 0 errors on Sun Feb 16 17:34:42 2014
config:

        NAME                        STATE     READ WRITE CKSUM
        vol1                        ONLINE       0     0     0
          mirror-0                  ONLINE       0     0     0
            wwn-0x500000e014609480  ONLINE       0     0     0
            wwn-0x500000e0146097d0  ONLINE       0     0     0
          mirror-1                  ONLINE       0     0     0
            wwn-0x500000e0146090c0  ONLINE       0     0     0
            wwn-0x500000e01460fd60  ONLINE       0     0     0
putih
sumber
1
Setelah bermigrasi ke wwn-*nama telanjang , kumpulan tampaknya stabil.
CVn
1
@ MichaelKjörling dapatkah Anda merinci cara Anda bermigrasi ke nama-nama baru?
codecowboy
1
@codecowboy Tidak ada yang mewah sama sekali. zpool detach akita ST4000NM0033-Z1Z333ZAkemudian zpool attach -o ashift=12 -f akita ST4000NM0033-Z1Z1A0LQ wwn-0x5000c50065e8414akemudian zpool detach akita ST4000NM0033-Z1Z1A0LQkemudian zpool attach akita wwn-0x5000c50065e8414a wwn-0x5000c500645b0fec, memverifikasi di antara setiap langkah kolam itu stabil. Saya sangat merekomendasikan scrub menyeluruh terlebih dahulu. Anda mungkin bisa lolos zpool replacejuga tetapi karena alias menunjuk pada nama wwn dan saya memiliki redundansi plus backup, ini terasa lebih aman. Butuh beberapa hari tapi saya tidak terburu-buru.
CVn