Web更新

UnuntuでZFSを使ってみよう 第9回 Ubuntu 20.04 LTSのZFS boot で変わる機能(zsysd/zsysctl)

前回は、ZFS bootを採用することで変更されたGrubの機能追加について説明しました。今回は、Ubuntu20.04で導入されたzsysdと、zfsdを使用してzfsの情報を取得するzfsctlについて説明します。

zsysd(ZFS SYStem integration daemon)

zsysd は、Ubuntu 20.04 上でZFSを用意に使用するためのデーモンです。同一マシン上で複数の ZFS システムの並列実行、自動スナップショット、ユーザデータ・システムデータ・永続データを分離した複雑な ZFS データセットレイアウトを管理します。

前回説明した、apt によるパッケージインストール時にZFS スナップショットを自動的に登録するのは、このzsysd が行います。zsysd はサービスとして登録されているので、systemctlで動作状況を確認できます。

$ systemctl status zsysd.service
● zsysd.service - ZSYS daemon service
     Loaded: loaded (/lib/systemd/system/zsysd.service; static; vendor preset: enabled)
     Active: inactive (dead) since Sat 2020-07-11 16:54:22 JST; 3min 23s ago
TriggeredBy: ● zsysd.socket
    Process: 7692 ExecStart=/sbin/zsysd (code=exited, status=0/SUCCESS)
   Main PID: 7692 (code=exited, status=0/SUCCESS)

 7月 11 16:53:21 ubuntu2004 systemd[1]: Starting ZSYS daemon service...
 7月 11 16:53:22 ubuntu2004 systemd[1]: Started ZSYS daemon service.
 7月 11 16:53:22 ubuntu2004 zsysd[7692]: user
 7月 11 16:54:22 ubuntu2004 systemd[1]: zsysd.service: Succeeded.

zsysctl( ZFS SYStem integration control zsys daemon)

zsysctl コマンドはzsysdと通信して、サブコマンドを使用してzsysdがコントローする各情報を取得できます。

zsysctl completion

zsysctl completion を実行すると、zsysctl 用のbash 補完設定を出力します。以下のコマンドでbash補完設定が有効になるため、コンソールで実行するか、.bashrcなどに追記しましょう。

. <(zsysctl completion)

zsysctl list / zsysctl machine list

動作マシン上でbootされる、zpoolの情報を表示します。

$ zsysctl list
ID                        ZSys  Last Used
--                        ----  ---------
rpool/ROOT/ubuntu_gytpxh  true  current

zsysctl show / zsysctl machine show

動作マシン上の、すべての情報を表示します。どのようなスナップショットをとっているかなどの情報を取得します。

$ zsysctl show
Name:           rpool/ROOT/ubuntu_gytpxh
ZSys:           true
Last Used:      current
History:
  - Name:       rpool/ROOT/ubuntu_gytpxh@autozsys_kcm2c7
    Created on: 2020-07-10 19:15:34
  - Name:       rpool/ROOT/ubuntu_gytpxh@autozsys_gd3u3u
    Created on: 2020-07-10 19:13:51
  - Name:       rpool/ROOT/ubuntu_gytpxh@autozsys_zzmdyv
    Created on: 2020-07-10 19:12:49
Users:
  - Name:    root
    History:
     - rpool/USERDATA/root_8cj8ac@autozsys_kcm2c7 (2020-07-10 19:15:35)
     - rpool/USERDATA/root_8cj8ac@autozsys_gd3u3u (2020-07-10 19:13:52)
     - rpool/USERDATA/root_8cj8ac@autozsys_zzmdyv (2020-07-10 19:12:50)
  - Name:    user
    History:
     - rpool/USERDATA/user_8cj8ac@autozsys_u274pl (2020-07-11 16:53:22)
     - rpool/USERDATA/user_8cj8ac@autozsys_0t8bmw (2020-07-10 19:24:18)
     - rpool/USERDATA/user_8cj8ac@autozsys_kcm2c7 (2020-07-10 19:15:35)
     - rpool/USERDATA/user_8cj8ac@autozsys_gd3u3u (2020-07-10 19:13:52)
     - rpool/USERDATA/user_8cj8ac@autozsys_zzmdyv (2020-07-10 19:12:50)
     - rpool/USERDATA/user_8cj8ac@autozsys_vpkxx1 (2020-07-10 19:08:40)

zsysctl service status

zsysd サービスの状態を表示します。

$ sudo  zsysctl service status
OK

zsysctl service dump

zsys サービスの現状をjson形式で出力します。

# zsysctl service dump | head -30
{
   "All": {
      "rpool/ROOT/ubuntu_gytpxh": {
         "IsZsys": true,
         "ID": "rpool/ROOT/ubuntu_gytpxh",
         "LastUsed": "2020-07-11T16:51:27+09:00",
         "Datasets": {
            "bpool/BOOT/ubuntu_gytpxh": [
               {
                  "Name": "bpool/BOOT/ubuntu_gytpxh",
                  "Mountpoint": "/boot",
                  "CanMount": "on",
                  "Mounted": true,
                  "LastUsed": 1594453887
               }
            ],
            "rpool/ROOT/ubuntu_gytpxh": [
               {
                  "Name": "rpool/ROOT/ubuntu_gytpxh",
                  "Mountpoint": "/",
                  "CanMount": "on",
                  "Mounted": true,
                  "BootFS": true,
                  "LastUsed": 1594453887,
                  "LastBootedKernel": "vmlinuz-5.4.0-40-generic"
               },
               {
                  "Name": "rpool/ROOT/ubuntu_gytpxh/srv",
                  "Mountpoint": "/srv",
                  "CanMount": "on",
  (以下略)

zsys service gc

zsysのガベージコレクションを行い、自動的取得した古いスナップショットを削除します。

$ zsysctl service gc -vv
DEBUG /zsys.Zsys/GC() call logged as [4fb13688:e1d24da6]
DEBUG Check if grpc request peer is authorized
DEBUG Any user always authorized
INFO Requesting zsys daemon to garbage collect
DEBUG calculating buckets
DEBUG bucket keep all: start:2020-07-10 00:00:00 +0900 JST, end:2020-07-11 17:19:38.365830192 +0900 JST m=+6.228857130, samples:-1
DEBUG Rule PreviousDay, buckets: 1, length, 1
DEBUG   -  start:2020-07-09 00:00:00 +0900 JST end:2020-07-10 00:00:00 +0900 JST samples:3
DEBUG Rule PreviousWeek, buckets: 5, length, 1
DEBUG   -  start:2020-07-08 00:00:00 +0900 JST end:2020-07-09 00:00:00 +0900 JST samples:1
DEBUG   -  start:2020-07-07 00:00:00 +0900 JST end:2020-07-08 00:00:00 +0900 JST samples:1
DEBUG   -  start:2020-07-06 00:00:00 +0900 JST end:2020-07-07 00:00:00 +0900 JST samples:1
DEBUG   -  start:2020-07-05 00:00:00 +0900 JST end:2020-07-06 00:00:00 +0900 JST samples:1
DEBUG   -  start:2020-07-04 00:00:00 +0900 JST end:2020-07-05 00:00:00 +0900 JST samples:1
DEBUG Rule PreviousMonth, buckets: 4, length, 7
DEBUG   -  start:2020-06-27 00:00:00 +0900 JST end:2020-07-04 00:00:00 +0900 JST samples:1
DEBUG   -  start:2020-06-20 00:00:00 +0900 JST end:2020-06-27 00:00:00 +0900 JST samples:1
DEBUG   -  start:2020-06-13 00:00:00 +0900 JST end:2020-06-20 00:00:00 +0900 JST samples:1
DEBUG   -  start:2020-06-06 00:00:00 +0900 JST end:2020-06-13 00:00:00 +0900 JST samples:1
DEBUG Rule PreviousYear, buckets: 11, length, 30
DEBUG   -  start:2020-05-07 00:00:00 +0900 JST end:2020-06-06 00:00:00 +0900 JST samples:1
DEBUG   -  start:2020-04-07 00:00:00 +0900 JST end:2020-05-07 00:00:00 +0900 JST samples:1
DEBUG   -  start:2020-03-08 00:00:00 +0900 JST end:2020-04-07 00:00:00 +0900 JST samples:1
DEBUG   -  start:2020-02-07 00:00:00 +0900 JST end:2020-03-08 00:00:00 +0900 JST samples:1
DEBUG   -  start:2020-01-08 00:00:00 +0900 JST end:2020-02-07 00:00:00 +0900 JST samples:1
DEBUG   -  start:2019-12-09 00:00:00 +0900 JST end:2020-01-08 00:00:00 +0900 JST samples:1
DEBUG   -  start:2019-11-09 00:00:00 +0900 JST end:2019-12-09 00:00:00 +0900 JST samples:1
DEBUG   -  start:2019-10-10 00:00:00 +0900 JST end:2019-11-09 00:00:00 +0900 JST samples:1
DEBUG   -  start:2019-09-10 00:00:00 +0900 JST end:2019-10-10 00:00:00 +0900 JST samples:1
DEBUG   -  start:2019-08-11 00:00:00 +0900 JST end:2019-09-10 00:00:00 +0900 JST samples:1
DEBUG   -  start:2019-07-12 00:00:00 +0900 JST end:2019-08-11 00:00:00 +0900 JST samples:1
DEBUG Rule Previous2Years, buckets: 1, length, 365
DEBUG   -  start:2018-07-12 00:00:00 +0900 JST end:2019-07-12 00:00:00 +0900 JST samples:2
DEBUG bucket oldest: start:0001-01-01 00:00:00 +0000 UTC end:2018-07-12 00:00:00 +0900 JST samples:0
DEBUG Collect datasets
DEBUG GC System Pass #1
DEBUG bucket start: 2020-07-10 00:00:00 end:2020-07-11 17:19:38 samples: -1
DEBUG current state: rpool/ROOT/ubuntu_gytpxh@autozsys_kcm2c7
DEBUG First state matching for this bucket: rpool/ROOT/ubuntu_gytpxh@autozsys_zzmdyv (2020-07-10 19:12:49)

DEBUG Keeping all snapshots for this bucket
DEBUG bucket start: 2020-07-09 00:00:00 end:2020-07-10 00:00:00 samples: 3
DEBUG No more system states left for pass #1.
DEBUG GC User Pass #1
DEBUG bucket start: 2020-07-10 00:00:00 end:2020-07-11 17:19:38 samples: -1
DEBUG current state: rpool/USERDATA/s-miyaza_8cj8ac@autozsys_u274pl
DEBUG First state matching for this bucket: rpool/USERDATA/s-miyaza_8cj8ac@autozsys_vpkxx1 (2020-07-10 19:08:40)
DEBUG Keeping all snapshots for this bucket
DEBUG bucket start: 2020-07-09 00:00:00 end:2020-07-10 00:00:00 samples: 3
DEBUG No more user states left for pass #1.
DEBUG bucket start: 2020-07-10 00:00:00 end:2020-07-11 17:19:38 samples: -1
DEBUG current state: rpool/USERDATA/root_8cj8ac@autozsys_kcm2c7
DEBUG First state matching for this bucket: rpool/USERDATA/root_8cj8ac@autozsys_zzmdyv (2020-07-10 19:12:50)
DEBUG Keeping all snapshots for this bucket
DEBUG bucket start: 2020-07-09 00:00:00 end:2020-07-10 00:00:00 samples: 3
DEBUG No more user states left for pass #1.
DEBUG Unmanaged past user datasets GC
DEBUG GC Unmanaged user Pass #0

zsysctl service stop/reload

zsysd サービスの停止、設定ファイルのリロードを実施します。

$ sudo zsysctl service stop -vv
DEBUG /zsys.Zsys/DaemonStop() call logged as [6a311542:a130e7a4]
DEBUG Check if grpc request peer is authorized
DEBUG Authorized as being administrator
INFO Requesting zsys daemon stop

zsysctl state save/remove

zsysdを使用して現在の環境を保存もしくは削除します。

$ sudo zsysctl state save
Successfully saved as "autozsys_cxzzex"
$ sudo zsysctl state remove autozsys_cxzzex

zsysctl service trace

zsysdの、CPUもしくはメモリのプロファイルを行います。現状うまくプロファイルを取得できていません。

zsys userdata

zsys userdata サブコマンドで、ユーザに割り当てる領域を設定できます。

  • create ユーザ名 ディレクトリ名で、新しいユーザ領域(zfs ファイルシステム)をrpool/USERDATA以下に作成し、ユーザに割り当てます。
  • set-home OLD_HOME NEW_HOMEで、ユーザ領域をOLD_HOMEからNEW_HOMEへ切り替えます。
  • dissociate ユーザ名で、現在のユーザ領域をユーザ名から切り離します

zsysctl boot

zsysctl boot は、次回ブートする際のデータセットを設定します。

終わりに

今回は、zsysdとそれを使用するzsysctl の機能について説明しました。次回は自動的にスナップショットを取得してくれる、auto-snapshot 機能について説明します。次回をお楽しみに。

さて、このコラムを掲載いただいているデジタル・ヒュージ・テクノロジー社は老舗のOSSインテグレーターです。特にLinuxは強く、OSSを活用した業務システムの実績も多いです。興味がある方は以下のページもご覧ください。
DHT OSS導入コンサルティングサービス

関連記事一覧