古い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
他に注意すべきことはありますか?再起動以外に何かできることはありますか?
これはZoLでの意図しない動作のようです。ZFSボックスを数日間そのままにしておき、最後にそのボックスをあきらめて再起動しました。再起動後にこれらのスナップショットを破棄することができました。
元々は、次の方法を使用してビジーなデータセットを停止し、このデータセットをエクスポートしてプールを再構築できるようにしました。/homeディレクトリにZFSデータセットを使用していますが、ビジー状態を維持するプロセスを見つけることができませんでした。データセットを使用してプロセスを見つけることができない場合にも、これはあなたのために働くはずの私の解決策です:
Canmount = noautoを設定すると、データセットが再起動時にマウントされなくなります
/ homeなどのデータセットを使用しないユーザーアカウントを作成(またはrootアカウントを使用)します。このアカウントにSudo権限を付与します。
上記のアカウント、つまり手順2で作成したアカウントを再起動してログインします。このアカウントは、手順1で変更したデータセットをマウントせずに起動するため、これらのデータセットをデーモン/プログラムに対して拒否します。
データセットは現在ビジー状態ではないため、データセットやスナップショットを破棄できます。
必ず:
(datasetxは問題のデータセットです)ブート時にマウントするデータセットに。これはzfsのデフォルトです。ベスト、フィル