9
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

FreeBSDAdvent Calendar 2021

Day 1

データを活かしたままZFSプールサイズを拡張する

Last updated at Posted at 2021-11-30

はじめに

ZFSには保存済みデータに影響なくプールサイズ(パーティションサイズ)を拡張する機能が用意されていて、autoexpandプロパティを設定して拡張できます。これを実際に操作してみます。

ここでは1台のディスク内でプールサイズを20GBから30GBに拡張します。

テスト環境

以下のテストは手元の実験用サーバーで、内蔵120GBのSSDの前半(60GB程)にWindowsがインストールしてあるものを使いました。

ディスクはGPTでパーティション管理を行なっていて、FreeBSDのデータ用に20GB確保しました。パーティションインデックスは 6 です。

$ gpart show ada0
=>       34  250069613  ada0  GPT  (119G)
         34       2014        - free -  (1.0M)
       2048     102400     1  ms-basic-data  (50M)
     104448  121270272     2  ms-basic-data  (58G)
  121374720     204800     3  efi  (100M)
  121579520    1300480     4  ms-recovery  (635M)
  122880000   16777216     5  freebsd-swap  (8.0G)
  139657216   41943040     6  freebsd-zfs  (20G)
  181600256   68469391        - free -  (33G)

GPTのパーティション名を確認すると次の通りで、work0 と設定してあります。

$ gpart show -l ada0
=>       34  250069613  ada0  GPT  (119G)
         34       2014        - free -  (1.0M)
       2048     102400     1  (null)  (50M)
     104448  121270272     2  (null)  (58G)
  121374720     204800     3  (null)  (100M)
  121579520    1300480     4  (null)  (635M)
  122880000   16777216     5  swap0  (8.0G)
  139657216   41943040     6  work0  (20G)
  181600256   68469391        - free -  (33G)

ZFSプールはすでに作成済で、zpool list -v zworkを見ると次の通りgpt/work0を使った20GBのプールがあることがわかります。


$ zpool list -v zwork
NAME          SIZE  ALLOC   FREE  CKPOINT  EXPANDSZ   FRAG    CAP  DEDUP    HEALTH  ALTROOT
zwork        19.5G  1.24G  18.3G        -         -     0%     6%  1.00x    ONLINE  -
  gpt/work0  19.5G  1.24G  18.3G        -         -     0%  6.33%      -  ONLINE

このZFSプールを30GBに変更します。

パーティションの拡張

まずディスクパーティションのサイズ変更を行います。gpart resizeを使ってパーティションサイズを20GBから30GBに拡張します。

$ gpart resize  -i 6 -s 30g ada0
ada0p6 resized

$ gpart show ada0
=>       34  250069613  ada0  GPT  (119G)
         34       2014        - free -  (1.0M)
       2048     102400     1  ms-basic-data  (50M)
     104448  121270272     2  ms-basic-data  (58G)
  121374720     204800     3  efi  (100M)
  121579520    1300480     4  ms-recovery  (635M)
  122880000   16777216     5  freebsd-swap  (8.0G)
  139657216   62914560     6  freebsd-zfs  (30G)
  202571776   47497871        - free -  (23G)

この通りパーティションは拡張できました。次にZFSプールの操作になりますが、今の段階ではまだ20GBのままです。

$ zpool list -v zwork
NAME          SIZE  ALLOC   FREE  CKPOINT  EXPANDSZ   FRAG    CAP  DEDUP    HEALTH  ALTROOT
zwork        19.5G  1.24G  18.3G        -         -     0%     6%  1.00x    ONLINE  -
  gpt/work0  19.5G  1.24G  18.3G        -         -     0%  6.33%      -  ONLINE

autoexpandプロパティをonに設定しても、それだけではプールサイズは変わりません。

$ zpool set autoexpand=on zwork

$ zpool list -v zwork
NAME          SIZE  ALLOC   FREE  CKPOINT  EXPANDSZ   FRAG    CAP  DEDUP    HEALTH  ALTROOT
zwork        19.5G  1.24G  18.3G        -         -     0%     6%  1.00x    ONLINE  -
  gpt/work0  19.5G  1.24G  18.3G        -         -     0%  6.33%      -  ONLINE

実際に拡張するためには、zpool online -e を使用します。

$ zpool online -e zwork gpt/work0

$ zpool list -v zwork
NAME          SIZE  ALLOC   FREE  CKPOINT  EXPANDSZ   FRAG    CAP  DEDUP    HEALTH  ALTROOT
zwork        29.5G  1.24G  28.3G        -         -     0%     4%  1.00x    ONLINE  -
  gpt/work0  29.5G  1.24G  28.3G        -         -     0%  4.18%      -  ONLINE

このとおり zwork は、30GBになりました。

autoexpandプロパティによる自動でのプールサイズの拡張

ここでは実験としてautoexpandプロパティを設定して1台のディスクの中でパーティションサイズの変更を行ったわけですが、実際の使用例としては、すでに使用しているミラーやRAID構成のZFSの容量のディスク交換による容量の拡張でしょう。

たとえば2TBのディスクを2台ミラー構成で使っていて残容量が少なくなって4TBのディスクに交換する場合、次の手順で既存のデータを活かしたままプールサイズの拡張ができます。

  1. プールのautoexpandプロパティをonに設定する
  2. ミラー構成の片方を4TBのものと交換する1
  3. ミラーの同期を待つ。なお同期が完了してもこの時点では片側が2TBであるためプールの容量は変わりません。もちろん同期を待つ間もデータの読み書きはできます。
  4. 残りの2TBのものを4TBに交換する。
  5. ミラーの同期が完了すると、4TBのプールに自動的に拡張される

RAID-Zの構成であっても、同様に1台づつディスクを交換することで、全体の容量を増やすことができます。

まとめ

以上の通りで、ZFSではストレージ容量の拡張も比較的簡単に操作できるようになっています。ディスクのホットスワップをサポートしているハードウェアであれば、サーバーは無停止でディスクの拡張ができます。

Linuxの場合

ここではFreeBSDで説明しましたが、LinuxでもUbuntuでは標準でZFSをサポートしていますし、ZFS on Linuxを利用すると他のLinuxディストリビューションでもZFSが利用できます。

Linuxの場合での操作方法ですが、本記事と内容は変わりません。ディスクのパーティション操作についてはFreeBSDとLinuxによる差異がありますが、ZFS部分の機能と操作はまったく同じものとなります。

  1. ZFSのRAIDZの修復とついでに拡張する」が参考になるでしょう。以前はこの脚注に「ミラーの場合は一旦zpool detachで1台を外し、attachを使って新たなディスクを追加します。壊れた場合やRAID-Zでは(offlineと)replaceを使うことになります。」という文章が記載してありましたがこれは行わず交換してreplaceを行う方が望ましいです。

9
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?