Samba 4サーバでWindows標準ゴミ箱を有効にする

ネットワークドライブ (コンピュータ -> ネットワークの場所、に表示される。) では、ゴミ箱が有効にならず、ファイルを削除すると、単に完全に削除されます。

Samba4サーバで、Windows標準のゴミ箱を使えるようにします。

@ Sambaごみ箱

重要.

このセクションのごみ箱機能は、ユーザーインターフェイスの点から適切ではないので、有効にしないほうがいいように思う。

次のセクションで説明する, Windows標準ゴミ箱が望ましいです。

Sambaには, サーバ側ゴミ箱機能があります。ゴミ箱モジュールは、Windowsクライアントからのファイル削除の要求を横取りして、サーバのゴミ箱ディレクトリに移動します。

Sambaの設定ファイル smb.conf ファイルに設定を書きます。(man vfs_recycle)

ファイ共有セクションの「vfs objects」パラメータにrecycleモジュールを指定することで、ごみ箱機能を有効にします。

recycle:repository パラメータでゴミ箱ディレクトリを指定します。ただし, [homes]セクションのときは、自動的に「/home/ユーザ名/指定ディレクトリ」として扱われます。

recycle:keeptree パラメータがyesのときは、ゴミ箱ディレクトリの中に、削除したファイルのディレクトリツリーも復元されます。

[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 *~

設定ファイルを更新したら, sambaを再起動します。

しかしながら, この機能は単純にファイルを移動するだけなので、Windowsエクスプローラで元の場所に戻したり、削除した時間順に並べ替える、などのことはできません。また、ファイル削除のときのダイアログなども、ゴミ箱へ移動アイコンではなく、削除アイコンのままです。

ですので、特に、ITに通じた人だけではない場面では、ちょっと使いにくいと思います。

Windows 7の設定で頑張る

Windowsの設定を変更して、ネットワークドライブでもゴミ箱が有効になるようにします。こちらのほうが使い勝手がよくなります。

[制限] UNCパス (\\ホスト名\\パス名) でネットワーク越しのドライブにアクセスしてファイルを削除した場合は、ゴミ箱を通るようにできません。必ずネットワークドライブの割り当てをおこなって, そのドライブ内で操作してください。

レジストリ登録エントリファイルを作ります。サンプルは、次のようになります。RelativePathのドライブ名だけ変えて、そのまま使えます。

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:\\"

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\BitBucket\KnownFolder\{35527C2E-D360-4607-B2B6-807495A0B25F}]
"MaxCapacity"=dword:00003ad4
"NukeOnDelete"=dword:00000000

これを拡張子.reg で保存します。管理者権限で, レジストリエディタでインポートするか、エクスプローラでファイルを開いてインポートさせます。

一般ユーザでログインしなおして、デスクトップのゴミ箱のプロパティで、次のようにネットワークドライブが表示されれば成功です。

(参考) GUIDの作り方:

スタートメニューから, PowerShell を起動して次のようにする。

PS C:\Users\hori> [guid]::NewGUID().ToString().ToUpper()
35527C2E-D360-4607-B2B6-807495A0B25F
PS C:\Users\hori>

Windows側の設定は上のとおりですが、若干、注意点があります。

$RECYCLE.BIN の場所、アクセス権限

Sambaサーバ上のファイルを初めて削除したときに, ネットワークドライブの根(root)として見えている場所に $RECYCLE.BIN フォルダが自動的に作成されます。ユーザ権限でこのフォルダを作れる場所が、ネットワークドライブのrootでなければなりません。

また、ローカルドライブと違って, $RECYCLE.BIN 以下に、ユーザごとのサブフォルダが作られません。なので、/home 以下などユーザごとに分かれた区画でなければ、ゴミ箱を有効にしてもいいかどうか、よく考える必要があります。

参考