やりたかったこと
webDAVのデータを別のサーバに移行したい
使用する端末はMac
コピー元はCentOSサーバ(テスト環境としてSynologyのNAS)
コピー先はSynologyのNAS
準備作業
Finder->移動->サーバに接続 でwebDAVをマウントする手順でマウントを考えたが
もしかしてどちらも/Volume/davにマウントされてしまうのでは?と考えて別の方法を検討
mount_webdavコマンドでマウントすれば、スクリプトにも組み込めてオペミスを防げる
mnt $ mount_webdav -i http://192.168.1.27:5005/dav ~/mnt/dav_from
Username: hoge
Password:
mnt $ ls ~/mnt/dav_from
test10Gfile
mnt $ mount_webdav -i http://192.168.1.10:5005/dav ~/mnt/dav_to
Username: hoge
Password:
mnt $ ls ~/mnt/dav_to
webdavtest.txt
ここは過去の自分のQiita記事を参考にした
rsyncでのコピー
$ rsync -ah --info=progress2 --dry-run ~/mnt/dav_from ~/mnt/dav_to # ミス スラッシュを忘れている
コピー元には大きなファイル(動画)も、小さく大量のファイルもあるので、経過は表示せず進捗状況だけ表示したかった。
実行するとSyntaxエラーでprogress2が使えない
コピー元ディレクトリの後ろにスラッシュを書いていないので、コピー先にディレクトリ(dav_from)が作成されてしまった
$ rsync -ah --info=progress2 --dry-run ~/mnt/dav_from ~/mnt/dav_to
rsync: --info=progress2: unknown option
他にも「--info=progress2」なしでとりあえず実行すると実行後にこのメッセージが表示され、これもrsyncのバージョンを新しくすると解消するらしいとのLinuxでの記事がであった
WARNING: dav_from/2023data/recordings/hoge02.mp4 failed verification -- update discarded (will try again).
sent 46.70G bytes received 3.05K bytes 18.08M bytes/sec
total size is 45.83G speedup is 0.98
rsyncのバージョンを調べると2.6.9
$ rsync --version
rsync version 2.6.9 protocol version 29
brewで新しいrsyncをインストールする
$ brew install rsync
インストール先を確認
$ brew info rsync
==> rsync: stable 3.3.0
Utility that provides fast incremental file transfer
https://rsync.samba.org/
Installed
/usr/local/Cellar/rsync/3.3.0 (12 files, 1MB) * ## <==== ここ
Built from source on 2024-11-28 at 16:56:09
From: https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/r/rsync.rb
License: GPL-3.0-or-later
==> Dependencies
Build: autoconf ✔, automake ✔
Required: lz4 ✔, openssl@3 ✔, popt ✔, xxhash ✔, zstd ✔
==> Analytics
install: 2,850 (30 days), 9,136 (90 days), 47,367 (365 days)
install-on-request: 2,766 (30 days), 8,826 (90 days), 45,746 (365 days)
build-error: 6 (30 days)
バージョンを確認すると3.3.0になっている
$ /usr/local/Cellar/rsync/3.3.0/bin/rsync --version
rsync version 3.3.0 protocol version 31
パスを追加する シェルはzshの場合の例
(パスが「/usr/local/Cellar/rsync/3.3.0/bin」ではないのは、
一般的にはbrewでインストールされたツールは/usr/local/binにシンボリックリンクが作成されて、
/usr/local/binをパスに追加するだけでbrew管理のツール全体を利用できるようにるため。)
↑ これ知らなかった
mnt $ vi ~/.zshrc
export PATH="/usr/local/bin:$PATH" # <== 最後に追記
mnt $ source ~/.zshrc
と、ここまで実行してrsyncを実行すると(コピー元のディレクトリの後ろにスラッシュを書いている)
$ rsync -ahv --info=progress2 ~/mnt/dav_from/ ~/mnt/dav_to
ざんねんなことにタイムスタンプが引き継がれていないことに気がついた。原因を調べるよりとにかくWebDAVの移行を急いでいたので、ChatGPTに対策を聞くとNFSやSMBを試すことを勧められた。
NAS側ではNFSの設定も行なってあるが、FinderでGUIでの接続時はSMBなのでそれを参考にすることができるSMBでマウントすることとした
まずはマウント
mnt $ mount_smbfs //kanri_username@192.168.1.27/dav ~/mnt/dav_from
Password for 192.168.1.27:
mnt $ mount_smbfs //kanri_userbname@192.168.1.10/dav ~/mnt/dav_to
Password for 192.168.1.10:
試しにタイムスタンプを過去のもの(2024/01/01)にしたファイルをrsyncでコピーする
mnt $ rsync -ahvt ~/mnt/dav_from/testtime.txt ~/mnt/dav_to/
sending incremental file list
testtime.txt
sent 116 bytes received 35 bytes 302.00 bytes/sec
total size is 10 speedup is 0.07
mnt $ ls -lh dav_to
total 16
-rwx------ 1 tuti staff 10B 1 1 2024 testtime.txt
-rwx------ 1 tuti staff 17B 11 12 10:44 webdavtest.txt
### 最終的なrsyncコマンド
$ rsync -aht --info=progress2 ~/mnt/dav_from/ ~/mnt/dav_to/
やっとできました