zpool は縮小できないって認識だったんだけど、ふと「zfs pool shrink」でググってみたところ以下のページを見つけた。
曰く、新しい小さな vdev を add して stripe を拡張した後、古い大きな vdev を remove すれば stripe が縮小出来るよと。
え?マジですか!?
と思い、Ubuntu 16.04.7 LTS で試してみた所
やっぱ出来んじゃん!
と思いつつ、上記の例示では出来てるのでバージョンの問題か?と思い、Ubuntu 20.04.3 LTS で試してみた所、出来るじゃないですか!!!
しかも、例示では mirror 組んでるけど mirror なしで生の vdev でも出来る。
もしや、attach する vdev も小さいの与えると自動的に pool を縮小してくれるのでは?と期待したがこちらは
とりあえず stripe 間で全データ移動するので send, recv で clone するのと時間的には変わらん気がするけど、オンラインで移動出来るのはメリットだろう。
それぞれの環境で ZFS のバージョンはこんな感じだった。
- StackExchange / ask ubuntu / 2020-04-26: How can I shrink a zfs volume on ubuntu 18.04?
曰く、新しい小さな vdev を add して stripe を拡張した後、古い大きな vdev を remove すれば stripe が縮小出来るよと。
え?マジですか!?
と思い、Ubuntu 16.04.7 LTS で試してみた所
$ sudo zpool remove shrinktest mirror-0 cannot remove mirror-0: only inactive hot spares, cache, top-level, or log devices can be removedみたいに言われて失敗。
やっぱ出来んじゃん!
と思いつつ、上記の例示では出来てるのでバージョンの問題か?と思い、Ubuntu 20.04.3 LTS で試してみた所、出来るじゃないですか!!!
しかも、例示では mirror 組んでるけど mirror なしで生の vdev でも出来る。
もしや、attach する vdev も小さいの与えると自動的に pool を縮小してくれるのでは?と期待したがこちらは
$ sudo zpool attach shrinktest /tmp/zpool/a_2g /tmp/zpool/a_1g cannot attach /tmp/zpool/a_1g to /tmp/zpool/a_2g: device is too smallみたいに言われてしまった。
とりあえず stripe 間で全データ移動するので send, recv で clone するのと時間的には変わらん気がするけど、オンラインで移動出来るのはメリットだろう。
それぞれの環境で ZFS のバージョンはこんな感じだった。
$ # Ubuntu 16.04.7 LTS $ dpkg -l|grep zfsutils ii zfsutils-linux 0.6.5.6-0ubuntu29 amd64 Native OpenZFS management utilities for Linux
$ # Ubuntu 20.04.3 LTS $ dpkg -l | grep zfsutils ii zfsutils-linux 0.8.3-1ubuntu12.12 amd64 command-line tools to manage OpenZFS filesystems
タグ
コメントをかく