ネットワークドライヴ (コンピュータ -> ネットワークの場所、に表示される。) では、ゴミ箱が有効にならず、ファイルを削除すると、単に完全に削除されます。
ゴミ箱を使えるようにするいくつかの方法を紹介します。サーバが FreeBSD + Samba4サーバなら最初の方法、そうでなければ、クライアント (Windows) 側の設定でゴミ箱を有効にするのがいいでしょう。
(2017.7.27 追加)
最近思っているのは、ゴミ箱という発想がどうなのか。ゴミ箱を空にするまではファイルを復活できるが、ゴミ箱を空にしたら復活できない。
FreeBSD (またはFreeBSD由来のディストリビューション) で、ファイルシステムに ZFS を使えば、ゴミ箱ではなくスナップショットを使う方法がある。
スナップショットはほとんどディスク容量を消費しないので、頻度高くスナップショットを作り、いつでもユーザが過去からファイルを取り出せるようにする。
zfs snapshot コマンド一つでスナップショットが取れる。
ls -la /usr/home しても表示されないが, snapshot 以下はファイルシステムの機能で read-onlyになっている。書き込みもできない。
snapshotの一覧を表示する。
これをSambaユーザ (クライアント) から見えるようにリンクを張ったりすればOK.
定期的にsnapshotを取るようなスクリプトを書くのも、手間ではない。
例えば, 次のようにする;
Sambaの ZFS quota はユーザ単位に設定できる。
さらに自動レプリケーションを組み合わせて、バックアップも行う手もある。FreeBSD / ZFS 関係についてはこちら; FreeBSD
ZFSを使う方法は昔からあったが、これをデザインよく再発明したのが Apple Time Machine.
このセクションのごみ箱機能は、ユーザーインターフェイスの点から適切ではないので、有効にしないほうがいいように思う。
次のセクションで説明する, Windows標準ゴミ箱が望ましいです。
Sambaには, サーバ側ゴミ箱機能があります。ゴミ箱モジュールは、Windowsクライアントからのファイル削除の要求を横取りして、サーバのゴミ箱ディレクトリに移動します。
Sambaの設定ファイル smb.conf ファイルに設定を書きます。(man vfs_recycle)
ファイ共有セクションの「vfs objects」パラメータにrecycleモジュールを指定することで、ごみ箱機能を有効にします。
recycle:repository パラメータでゴミ箱ディレクトリを指定します。ただし, [homes]セクションのときは、自動的に「/home/ユーザ名/指定ディレクトリ」として扱われます。
recycle:keeptree パラメータがyesのときは、ゴミ箱ディレクトリの中に、削除したファイルのディレクトリツリーも復元されます。
設定ファイルを更新したら, sambaを再起動します。
しかしながら, この機能は単純にファイルを移動するだけなので、Windowsエクスプローラで元の場所に戻したり、削除した時間順に並べ替える、などのことはできません。また、ファイル削除のときのダイアログなども、ゴミ箱へ移動アイコンではなく、削除アイコンのままです。
ですので、特に、ITに通じた人だけではない場面では、ちょっと使いにくいと思います。
(2017.9.24) Windows 10でも同様にできることを確認。
Windowsの設定を変更して、ネットワークドライブでもゴミ箱が有効になるようにします。こちらのほうが使い勝手がよくなります。
[制限] このセクションの設定を行ったとしても, UNCパス (\\ホスト名\\パス名) でネットワーク越しのドライヴにアクセスしてファイルを削除した場合は、ゴミ箱を通らずに、直ちに削除されます。必ずネットワークドライブの割り当てをおこなって, そのドライブ内で操作してください。
レジストリ登録エントリファイルを作ります。ドライブごとに, ランダムな GUID を用意します。
スタートメニューから, PowerShell を起動して次のようにする。ドライブの数だけ作ります。
サンプルは、次のようになります。ドライブが一つだけのときは 一つ目: 管理者権限で投入.
二つ目: ゴミ箱を使いたいユーザで投入。GUID は一つ目と揃える.
これらを拡張子 一つ目は管理者権限でレジストリエディタを開き, インポートします。二つ目はエクスプローラでファイルを開いてインポートさせます。
設定の考え方:
しかし、ここにはネットワークドライヴのエントリがありません。
そこで, Known Folder の機能を使ってネットワークドライヴを登録し, そのフォルダにゴミ箱を作る、という二段構えで対応します。Known Folders (Windows)
一般ユーザでログインしなおすか, 単にエクスプローラを再起動すれば反映されます。デスクトップのゴミ箱のプロパティで、次のようにネットワークドライブが表示されれば成功です。
Windows 10でも、同様に動きます;
Windows側の設定は上のとおりですが、若干、注意点があります。
Sambaサーバ上のファイルを初めて削除したときに, ネットワークドライブの根 (root) として見えている場所に また、ローカルドライブと違って, _ZFS snapshotを使う
zfsコマンド
# zfs snapshot <dataset>@<snap>
zroot/usr/home
というデータセットが /usr/home
にマウントされているとして、次のようにする。
# zfs snapshot zroot/usr/home@2017-07-27
/usr/home/.zfs/snapshot
でアクセスできる.
# touch .zfs/snapshot/2017-07-27/hoge
touch: .zfs/snapshot/2017-07-27/hoge: Read-only file system
# zfs list -t snapshot
NAME USED AVAIL REFER MOUNTPOINT
zroot/usr/home@2017-07-27 316K - 2.34M -
運用
[homes]
セクションを使っている場合は、/usr/home/.zfs/snapshot/<日付>/<ユーザ名> を /usr/home/<ユーザ名>/snapshot/<日付> 辺りにシンボリックリンクを張るようにする。
_Sambaごみ箱
重要.
[homes]
comment = Home Directories
browseable = no
writeable = yes
# 以下がゴミ箱の設定
vfs objects = recycle
; recycle:repository = .recycle
recycle:keeptree = no
recycle:versions = yes
recycle:touch = no
recycle:maxsize = 0
recycle:exclude = *.tmp *~
_Windows 7/10 の設定で頑張る
GUIDの作り方
PS C:\Users\hori> [guid]::NewGUID().ToString().ToUpper()
35527C2E-D360-4607-B2B6-807495A0B25F
PS C:\Users\hori>
レジストリ登録エントリファイル
RelativePath
のドライブ名だけ変えて、そのまま使えます。複数ドライブのときは, GUID を変えて、エントリを複製してください。
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FolderDescriptions\{35527C2E-D360-4607-B2B6-807495A0B25F}]
"Name"="mySharedDrive"
"Category"=dword:00000004
"RelativePath"="P:\\"
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\BitBucket\KnownFolder\{35527C2E-D360-4607-B2B6-807495A0B25F}]
"MaxCapacity"=dword:00003ad4
"NukeOnDelete"=dword:00000000
.reg
で保存します。1行目のWindows Registry Editor Version 5.00
にも意味があります。
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\BitBucket\Volume
以下に, 各ドライヴの設定があります。MaxCapacity
はゴミ箱の最大サイズ。「ゴミ箱のプロパティ」で決めた値です。
確認
$RECYCLE.BIN
の場所、アクセス権限$RECYCLE.BIN
フォルダが自動的に作成されます。ユーザ権限でこのフォルダが作れなければなりません。あるいは最初から用意しておく。
$RECYCLE.BIN
以下に、ユーザごとのサブフォルダが作られません。なので、/home
以下などユーザごとに分かれた区画でなければ、ゴミ箱を有効にしてもいいかどうか、よく考える必要があります。
_参考リンク