古い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
他に知っておくべきことはありますか?再ルートする以外にできることはありますか?
ベストアンサー1
最初は、プールの再構築のためにエクスポートできるように、忙しいデータセットを停止するために、次の方法を使用しました。私のディレクトリはZFSデータセットを使用します/home
が、それを使用するプロセスを見つけることができません。データセットを使用してプロセスが見つからない場合、私の解決策は次のとおりです。あなたにも役立つでしょう。
エクスポートするすべてのデータセットに設定します(エクスポートに問題があります)。
zfs set canmount=noauto dataset1 zfs set canmount=noauto dataset2 ... # and so on where you substitute your datasets' names for dataset1, dataset2, ...
設定により、
canmount=noauto
再起動時にデータセットがマウントされないようにするデータセットを使用しない(またはルートアカウントを使用する)ユーザーアカウントを作成します。
/home
このアカウントにsudo権限を付与します。再起動後、手順2で作成した上記のアカウントでログインしてください。手順1で変更したデータセットをインストールせずにアカウントを起動する必要があるため、デーモン/プログラムはこれらのデータセットを使用する機能を拒否します。
これでデータセットが使用されていないため、そのデータセットおよび/またはそのスナップショットを削除できるようになりました。
確かに:
zfs set canmount=on dataset1 zfs set canmount=on dataset2 ...
起動時にインストールするデータセットに追加します。これが zfs デフォルトです。