Bagaimana cara mengganti disk dalam kumpulan ZFS yang tidak berlebihan?

8

Saya telah melakukan sedikit pembacaan, dan sepertinya ZFS tidak suka disk yang dihapus dari array non-redundan :

Anda dapat menggunakan zpool detachperintah untuk melepaskan perangkat dari kolam penyimpanan cermin. Sebagai contoh:

# zpool detach zeepool c2t1d0

Namun, operasi ini ditolak jika tidak ada replika data yang valid. Sebagai contoh:

# zpool detach newpool c1t2d0
cannot detach c1t2d0: only applicable to mirror and replacing vdevs

Masalah dasarnya dapat dimengerti: menghapus satu-satunya salinan sepotong data (apakah data metadata atau payload) dari sebuah array akan membuat data tersebut tidak tersedia.

Contoh untuk mengganti perangkat di kumpulan penyimpanan ZFS memberikan uraian langkah demi langkah dasar untuk cara mengganti perangkat di kumpulan penyimpanan: offline disk, keluarkan disk, masukkan disk pengganti, jalankan zpool replaceuntuk memberi tahu ZFS tentang perubahan dan online disk. Ini jelas membutuhkan bahwa array tidak bergantung pada disk yang diganti, maka array harus memiliki redundansi; jika tergantung pada drive yang dimaksud, pendekatan ini menyajikan masalah yang sama seperti di atas.

Apa cara yang disarankan untuk mengganti disk dalam larik ZFS yang tidak berlebihan ?

Asumsikan bahwa disk yang ada berfungsi dengan benar, dan asumsikan bahwa disk pengganti setidaknya berukuran sama dengan disk yang diganti. (Jika disk yang ada telah gagal, jelas yang bisa dilakukan adalah menambah disk baru dan mengembalikan semua file yang terpengaruh oleh kegagalan disk dari cadangan.)

sebuah CVn
sumber

Jawaban:

3

Tidak tahu apakah ada yang berbeda pada `13 tetapi 'zfs replace' bekerja pada kolam yang tidak berlebihan. Anda hanya menjalankan perintah 1 alih-alih melepaskan dulu.

d1 adalah 1G, d2 adalah 2G, keduanya file kosong di / tmp:

/t/test #> zpool create test /tmp/test/d1
/t/test #> zpool set autoexpand=on test
/t/test #> zpool status
  pool: test
 state: ONLINE
  scan: none requested
config:

    NAME            STATE     READ WRITE CKSUM
    test            ONLINE       0     0     0
      /tmp/test/d1  ONLINE       0     0     0

errors: No known data errors
/t/test #> zpool list
NAME    SIZE  ALLOC   FREE  EXPANDSZ   FRAG    CAP  DEDUP  HEALTH  ALTROOT
test   1008M   258K  1008M         -     0%     0%  1.00x  ONLINE  -


/t/test #> zpool replace test /tmp/test/d1 /tmp/test/d2


/t/test #> zpool status
  pool: test
 state: ONLINE
  scan: resilvered 61K in 0h0m with 0 errors on Sun Sep 18 18:55:32 2016
config:

    NAME            STATE     READ WRITE CKSUM
    test            ONLINE       0     0     0
      /tmp/test/d2  ONLINE       0     0     0

errors: No known data errors
/t/test #> zpool list
NAME    SIZE  ALLOC   FREE  EXPANDSZ   FRAG    CAP  DEDUP  HEALTH  ALTROOT
test   1.98G   408K  1.98G         -     0%     0%  1.00x  ONLINE  -
alaricljs
sumber
12
zpool attach pool old-disk new-disk

Itu akan mengubah disk lama menjadi cermin dengan disk lama dan disk baru dan mulai resilver setelah itu Anda dapat melepaskan disk lama.

zpool detach pool old-disk

Diuji dengan perangkat loop:

# truncate -s 1G a b
# truncate -s 1200M c
# losetup  /dev/loop0 a
# losetup  /dev/loop1 b
# losetup  /dev/loop2 c
# zpool create test loop{0,1}
# zpool attach test loop1 loop2
# zpool status
      pool: test
 state: ONLINE
  scan: resilvered 62K in 0h0m with 0 errors on Wed Jul 31 13:43:19 2013
config:

        NAME        STATE     READ WRITE CKSUM
        test        ONLINE       0     0     0
          loop0     ONLINE       0     0     0
          mirror-1  ONLINE       0     0     0
            loop1   ONLINE       0     0     0
            loop2   ONLINE       0     0     0
# zpool detach test loop1
# zpool status
  pool: test
 state: ONLINE
  scan: resilvered 62K in 0h0m with 0 errors on Wed Jul 31 13:43:19 2013
config:

        NAME        STATE     READ WRITE CKSUM
        test        ONLINE       0     0     0
          loop0     ONLINE       0     0     0
          loop2     ONLINE       0     0     0
Stéphane Chazelas
sumber
Jadi Anda mengatakan bahwa ZFS tidak mendukung operasi seperti itu secara asli? Sepertinya aneh. ( Tampaknya semua yang diperlukan adalah memiliki kedua drive yang terhubung dan kemudian memberi tahu ZFS bahwa drive lama akan diambil offline, sehingga memberikan kesempatan untuk memigrasikan data di dalamnya ke drive lain sama seperti yang akan dilakukan jika itu adalah resilver dalam array yang berlebihan.)
CVn
@ MichaelKjörling, saya tidak mengatakan itu. Saya hanya mengatakan hal di atas harus berfungsi karena saya tidak dapat melihat alasan mengapa tidak seharusnya.
Stéphane Chazelas
Karena itu, sepertinya ZFS mendukungnya. Jawaban diperbarui.
Stéphane Chazelas
Bagus! Ini adalah jawaban yang saya cari dan saya harapkan. Akan memberi Anda +1 lainnya untuk mencobanya jika saya bisa.
CVn