web-dev-qa-db-ja.com

Linux上のZFS:スナップショットを破棄できない、データセットがビジー

古いZFSスナップショットの束を削除しようとしていますが、データセットがビジーであるというエラーが表示されます。

[root@pool-01 ~]# zfs list -t snapshot -o name -S creation | grep ^pool/nfs/public/mydir | xargs -n 1 zfs destroy -vr
will destroy pool/nfs/public/mydir@autosnap_2019-02-24_03:13:17_hourly
will reclaim 408M
cannot destroy snapshot pool/nfs/public/mydir@autosnap_2019-02-24_03:13:17_hourly: dataset is busy
will destroy pool/nfs/public/mydir@autosnap_2019-02-24_02:13:17_hourly
will reclaim 409M
 cannot destroy snapshot pool/nfs/public/mydir@autosnap_2019-02-24_02:13:17_hourly: dataset is busy
will destroy pool/nfs/public/mydir@autosnap_2019-02-24_01:13:18_hourly will reclaim 394M

lsofを実行すると、これらのスナップショットにアクセスするプロセスは表示されません。

[root@pool-01 ~]# lsof | grep pool/nfs/public/mydir

また、どのスナップショットにも保留がないようです。

[root@pool-01 ~]# zfs holds pool/nfs/public/mydir@autosnap_2019-02-24_03:13:17_hourly
NAME                                                              TAG  TIMESTAMP

他に注意すべきことはありますか?再起動以外に何かできることはありますか?

4
Katie

これはZoLでの意図しない動作のようです。ZFSボックスを数日間そのままにしておき、最後にそのボックスをあきらめて再起動しました。再起動後にこれらのスナップショットを破棄することができました。

1
Katie

元々は、次の方法を使用してビジーなデータセットを停止し、このデータセットをエクスポートしてプールを再構築できるようにしました。/homeディレクトリにZFSデータセットを使用していますが、ビジー状態を維持するプロセスを見つけることができませんでした。データセットを使用してプロセスを見つけることができない場合にも、これはあなたのために働くはずの私の解決策です:

  1. エクスポートするすべてのデータセットで(ただし、エクスポートに問題がありました)セット:

    zfs set canmount = noautoデータセット1

zfs set canmount = noauto dataset2 ...など、dataset1、dataset2などをデータセットの名前に置き換えます。

Canmount = noautoを設定すると、データセットが再起動時にマウントされなくなります

  1. / homeなどのデータセットを使用しないユーザーアカウントを作成(またはrootアカウントを使用)します。このアカウントにSudo権限を付与します。

  2. 上記のアカウント、つまり手順2で作成したアカウントを再起動してログインします。このアカウントは、手順1で変更したデータセットをマウントせずに起動するため、これらのデータセットをデーモン/プログラムに対して拒否します。

  3. データセットは現在ビジー状態ではないため、データセットやスナップショットを破棄できます。

  4. 必ず:

    zfs set canmount = on datasetx

(datasetxは問題のデータセットです)ブート時にマウントするデータセットに。これはzfsのデフォルトです。ベスト、フィル

0
Phil Marsh