Memaksa zpool untuk menggunakan / dev / disk / by-id di Ubuntu Xenial

16

Saya sedang mencoba OpenZFS yang dibundel pada Ubuntu 16.04 Xenial.

Saat membuat kumpulan, saya selalu merujuk drive dengan serial mereka di /dev/disk/by-id/(atau /dev/disk/gptdi FreeBSD) untuk ketahanan. Drive tidak selalu dalam urutan yang sama /devketika mesin reboot, dan jika Anda memiliki drive lain di mesin, pool mungkin gagal untuk me-mount dengan benar.

Misalnya, menjalankan zpool statuspada kotak 14,04 saya mendapatkan ini:

NAME                                  STATE     READ WRITE CKSUM
tank                                  ONLINE       0     0     0
  raidz1-0                            ONLINE       0     0     0
    ata-Hitachi_HDS722020ALA330_[..]  ONLINE       0     0     0
    ata-Hitachi_HDS722020ALA330_[..]  ONLINE       0     0     0
    ata-Hitachi_HDS722020ALA330_[..]  ONLINE       0     0     0
    ata-Hitachi_HUA722020ALA330_[..]  ONLINE       0     0     0

Tetapi ketika saya membuat kolam baru pada 16,04 dengan ini (disingkat):

zpool create pool raidz \
    /dev/disk/by-id/ata-Hitachi_HDS723030ALA640_[..] \
    /dev/disk/by-id/ata-Hitachi_HDS723030ALA640_[..] \
    /dev/disk/by-id/ata-Hitachi_HDS723030ALA640_[..] \
    /dev/disk/by-id/ata-Hitachi_HDS723030ALA640_[..]

Saya mendapatkan ini dengan zpool status:

NAME        STATE     READ WRITE CKSUM
tank        ONLINE       0     0     0
  raidz1-0  ONLINE       0     0     0
    sdf     ONLINE       0     0     0
    sde     ONLINE       0     0     0
    sdd     ONLINE       0     0     0
    sda     ONLINE       0     0     0

Sepertinya zpool mengikuti symlink, daripada mereferensikannya.

Apakah ada cara untuk memaksa zpool pada 16,04 untuk menghormati referensi drive saya saat membuat kumpulan? Atau sebagai alternatif, apakah kekhawatiran saya tentang apa yang dilakukannya di sini salah tempat?

Pembaruan: Penanganan masalah

Saya menemukan utas untuk zfsonlinux di Github yang menyarankan solusi. Buat zpool Anda dengan /dev/sdXperangkat terlebih dahulu, lalu lakukan ini:

$ sudo zpool export tank
$ sudo zpool import -d /dev/disk/by-id -aN

Saya masih lebih suka untuk dapat melakukan ini dengan inisial zpool createmeskipun jika memungkinkan.

Ruben Schade
sumber
Tidak masalah bagaimana Anda membuatnya. Jika kembali ke / dev / sd? nama perangkat, zfs exportdan zfs import -dakan tetap bekerja. BTW, kecuali Anda benar - benar membutuhkan setiap byte ruang, gunakan dua pasangan cermin daripada raidz. kinerja raidz lebih baik dari raid-5 tetapi masih jauh lebih buruk daripada raid-10 atau pasangan cermin zfs. itu juga lebih mudah untuk memperluas kumpulan yang terdiri dari pasangan cermin, cukup tambahkan dua disk sekaligus ... dengan raidz, Anda harus mengganti masing-masing drive dengan drive yang lebih besar, dan hanya ketika Anda telah mengganti semuanya maka Anda akan kolam renang memiliki lebih banyak ruang tersedia.
cas
Saya masih memiliki beberapa raid-z pools, dan menyesal telah membuatnya. Ketika saya mampu membeli disk pengganti, saya akan membuat kumpulan baru dengan pasangan cermin dan digunakan zfs senduntuk menyalin data saya ke kumpulan baru. Sebenarnya, raid-z adalah OK untuk kotak mythtv saya di mana kinerja tidak kritis kecuali saya menjalankan 6 atau 8 pekerjaan transcode sekaligus. Mengubah pasangan cermin akan sangat terlihat di kolam tempat /home direktori saya tinggal.
cas
2
Mirroring dari ZIL adalah agar Anda dapat menggunakan SSD murah biasa daripada yang mahal dengan kapasitor besar untuk melindungi dari kehilangan daya. IMO, mirroring dari ZIL bukanlah opsional, tidak peduli apa pun jenis SSD yang Anda miliki - jika ZIL Anda mati, Anda kehilangan semua data yang belum ditulis di dalamnya dan berpotensi merusak kumpulan Anda. Adapun L2ARC, saya secara khusus mengatakan TIDAK untuk mencerminkan mereka ... mirroring cache L2ARC adalah buang-buang waktu, uang, dan ruang SSD yang baik (dan tidak akan melakukan apa pun untuk mencegah kehilangan cache - dari mana Anda mendapatkan ide itu?)
cas
1
:) BTW, otak saya tidak berfungsi dengan benar ketika saya menjelaskan alasan untuk mirroring ZIL. Ini bukan untuk menjaga dari kehilangan daya, itu omong kosong dan aku seharusnya tidak mengatakannya. Ini untuk mencegah kegagalan drive ZIL. yaitu raid-1 mirror untuk ZIL. Secara umum, dua SSD dengan harga terjangkau lebih baik dari satu yang sangat mahal (kecuali SSD yang lebih mahal memiliki antarmuka yang jauh lebih cepat, seperti PCI-e vs SATA). dan UPS sangat penting ... perlindungan murah terhadap kehilangan daya.
cas
1
@cas Mirrored ZIL melindungi terhadap kegagalan perangkat SLOG pada saat yang sama dengan pematian yang tidak terduga. Di bawah operasi normal, ZIL adalah hanya-tulis, dan menulis ke penyimpanan persisten adalah dari RAM (ARC). Jika sistem dimatikan secara tak terduga, log maksud (ZIL, SLOG) digunakan untuk menyelesaikan penulisan yang terputus. Hanya jika shutdown yang tidak terduga bertepatan dengan kegagalan perangkat SLOG Anda perlu redudant SLOG untuk memulihkan penulisan yang terputus. Untuk sebagian besar beban kerja non-server (dan banyak server), SLOG berlebihan, karena ZIL benar-benar hanya berperan dengan penulisan sinkron.
CVn

Jawaban:

1

Sekali-sekali, zpool import -d /dev/disk/by-idtidak berhasil.

Saya perhatikan ini di lebih dari satu lingkungan. Saya memiliki skrip impor yang, selain melakukan beberapa logika ajaib dan menunjukkan perangkat ZFS yang terlampir secara fisik, juga melakukan hal berikut:

zpool import -d /dev/disk/by-id POOL
zpool export POOL
zpool import POOL

Kali kedua, bahkan tanpa -dsakelar, impor oleh ID perangkat meskipun itu bukan kali pertama dengan perintah eksplisit.

Mungkin saja ini hanya karena bug ZFS selama rentang waktu beberapa minggu atau bulan (satu atau dua tahun lalu), dan ini tidak lagi diperlukan. Saya kira saya seharusnya telah mengajukan laporan bug, tapi itu sepele untuk dikerjakan.

Jim
sumber
1

Saya tahu utas ini agak basi, tetapi ada jawaban. Anda perlu memperbarui file cache Anda setelah Anda mengimpor. Contoh ini menunjukkan lokasi default untuk file cache.

$> sudo zpool export POOL
$> sudo zpool import -d /dev/disk/by-id POOL
$> sudo zpool import -c /etc/zfs/zpool.cache
$> sudo zpool status POOL
NAME                                  STATE     READ WRITE CKSUM
POOL                                  ONLINE       0     0     0
  raidz1-0                            ONLINE       0     0     0
    ata-Hitachi_HDS722020ALA330_[..]  ONLINE       0     0     0
    ata-Hitachi_HDS722020ALA330_[..]  ONLINE       0     0     0
    ata-Hitachi_HDS722020ALA330_[..]  ONLINE       0     0     0
    ata-Hitachi_HUA722020ALA330_[..]  ONLINE       0     0     0
Steve O
sumber