参照先 https://wiki.samba.org/index.php/Server-Side_Copy
別にActiveDirectoryドメインコントローラになって初めて使える機能ではない。
従来のファイル共有機能だけの利用でも使える機能です。
windows7マシンで、ファイルの複製を作ってみる(Traditional File Copy)。
ここでは \\c\export にある「win12r2.iso」(4.03 GB)を選択して、右クリックから「コピー」を選択後、
同フォルダ内で「貼り付け」で複製を作った。
同一フォルダ内で複製が始まる。
っが、「タスクマネージャ」を見ると、操作した側のクライアントとの通信が発生している。
サーバ内での複製作成なので、サーバ内で対処してほしいのだが、windows7のエキスプローラ―を使う限りは一旦クライアントにデータが送られ、そして複製先のサーバに渡されている。
windows7であっても robocopy を使う限りはそのようなクライアントを経由することはない(Server-Side Copy Offload)。
下記はwindows7のコマンドプロンプトから実行した結果である。
1つのファイルを「\\c\export」フォルダ から「\\c\export\sample」フォルダにコピーしてます。
C:\Users\illya>robocopy \\c\export \\c\export\sample win12r2.iso
-------------------------------------------------------------------------------
ROBOCOPY :: Robust File Copy for Windows :: Version XP010
-------------------------------------------------------------------------------
Started : Sun Mar 22 03:59:27 2015
Source : \\c\export\
Dest : \\c\export\sample\
Files : win12r2.iso
Options : /COPY:DAT /R:1000000 /W:30
------------------------------------------------------------------------------
1 \\c\export\
100% New File 4.0 g win12r2.iso
------------------------------------------------------------------------------
Total Copied Skipped Mismatch FAILED Extras
Dirs : 1 0 1 0 0 0
Files : 1 1 0 0 0 0
Bytes : 4.037 g 4.037 g 0 0 0 0
Times : 0:02:15 0:02:15 0:00:00 0:00:00
Speed : 32055507 Bytes/sec.
Speed : 1834.230 MegaBytes/min.
Ended : Sun Mar 22 04:01:42 2015
C:\Users\illya>
32055507 Bytes/secなので、30.5MB/sec、244.6Mbps となる。
このコピーの間、「タスクマネージャ」の「ネットワーク」は静かなままであった。
(Btrfs Enhanced Server-Side Copy Offload)
サーバ側のファイルシステムが btrfs ならもっと早くなそうな
ただし、コピー元、コピー先が同一ボリュームで、smb.confで対象ボリュームに「vfs objects = btrfs」の記述が必要みたい。
[root@c ~]# vi /opt/samba/etc/smb.conf
(略)
[export]
path = /export
writable = yes
guest ok = yes
vfs objects = shadow_copy2
shadow: snapdir = .snap
shadow: basedir = /export
vfs objects = btrfs
(略)
として、sambaを再起動します
[root@c ~]# systemctl restart samba
その後、windows7のコマンドプロンプトで同じようにファイルをコピーしてみます。
C:\Users\illya>robocopy \\c\export \\c\export\sample win12r2.iso
-------------------------------------------------------------------------------
ROBOCOPY :: Robust File Copy for Windows :: Version XP010
-------------------------------------------------------------------------------
Started : Sun Mar 22 04:25:50 2015
Source : \\c\export\
Dest : \\c\export\sample\
Files : win12r2.iso
Options : /COPY:DAT /R:1000000 /W:30
------------------------------------------------------------------------------
1 \\c\export\
100% New File 4.0 g win12r2.iso
------------------------------------------------------------------------------
Total Copied Skipped Mismatch FAILED Extras
Dirs : 1 0 1 0 0 0
Files : 1 1 0 0 0 0
Bytes : 4.037 g 4.037 g 0 0 0 0
Times : 0:00:03 0:00:03 0:00:00 0:00:00
Speed : 1185010983 Bytes/sec.
Speed : 67806.872 MegaBytes/min.
Ended : Sun Mar 22 04:25:54 2015
C:\Users\illya>
1185010983 Bytes/secなので 1.1GB/sec、8.83Gbps となる
*前回のキャッシュかなと思って、\\c\export\sample2 なるフォルダへのコピーも試みたが同じ値であった
当然ながらこのコピーの間、「タスクマネージャ」の「ネットワーク」は静かなままであった。
windows7でもrobocopyなら「Server-SideCopy」が使えるが、windows8/windows2012なら
エキスプローラ―の操作でも「Server-SideCopy」が使える。
windows7でエキスプローラ―を使う限り、やはり一端データが送られ、そしてコピー先のサーバに渡されている。
下図は、windows7クライアントマシンから、\\c\exportの「win2k8r2.iso」ファイルを\\share\publicにコピーしている。
この際の「タスクマネージャ」を見ると下記になる。
2台のサーバの中継役として存在している。
次に、これをrobocopyにて行ってみる。
Z:\>robocopy \\c\export \\share\public win2k8r2.iso
-------------------------------------------------------------------------------
ROBOCOPY :: Windows の堅牢性の高いファイル コピー
-------------------------------------------------------------------------------
開始: Sun Mar 22 10:25:00 2015
コピー元 : \\c\export\
コピー先 : \\share\public\
ファイル: win2k8r2.iso
オプション: /COPY:DAT /R:1000000 /W:30
------------------------------------------------------------------------------
1 \\c\export\
100% 新しいファイル 3.0 g win2k8r2.iso
2015/03/22 10:26:23 エラー 5 (0x00000005) ファイル属性を変更しています \\share\public\
アクセスが拒否されました。
30 秒間待機しています... 再試行しています...
エラーが報告されているが、一応はコピーされた。っがServer-Side Copyではなく、クライアントを経由していた
単一サーバ内でのコピーなら有効だけど、サーバを跨ぐには機能しないみたい。