ロリポップサーバのWebDAVと相性悪いSynology NAS
BackWPupプラグインのバックアップファイルはWebサーバ上に保存されているので、このままではサーバ障害時に活用することが出来ません。Webサーバとは異なる場所に保管するべく、日頃愛用しているSynology NAS DS212Jへの同期転送を考えてみます。
SynologyのNASにはさまざまなオンラインストレージサービスとファイル同期することの出来る、Cloud Syncというアプリが用意されています。当初、WebサーバのWebDAVを同期先としてこのCloud Syncを使おうと試行してみましたが、
接続されてルートディレクトリは表示されるのですが、そこからサブディレクトリへ行こうとするとかたまります。別途、Ubuntu 18.04のNautilusでもWebDAVを試してみますが、またしてもサブディレクトリへの移動で「301 Moved Permanently」になってしまいます。
Windows 10のエクスプローラからは問題無く使えるので、ロリポップサーバのWebDAVが全く使えない、と言うわけでもなく、むしろLinux系とのWebDAVはあまり想定していないのかも知れません。
RcloneをSynology NASにインストール
ロリポップのライトプランではsshも使えないので、WebDAV以外でファイル転送として残されているプロトコルはFTPのみ。但し、Synology Cloud SyncはFTPをサポートしていないので、両者をFTPで同期転送する仕組みとして今回使ってみるのがこのRcloneです。
Rcloneはファイル同期やバックアップとして馴染みのrsyncを、各社オンラインストレージやクラウドなど様々な相手に拡張したような印象で、LinuxやWindowsで動作します。インストールもプラットフォームを自動識別するインストールバッチが公式より用意されているので、それを以下の要領で実行するのみ。Synology NAS DS212Jのターミナル上で、インストールバッチを実行してインストールしました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
$ curl https://rclone.org/install.sh | sudo bash % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 4491 100 4491 0 0 3622 0 0:00:01 0:00:01 --:--:-- 3624 % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 15 100 15 0 0 13 0 0:00:01 0:00:01 --:--:-- 13 % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 12.6M 100 12.6M 0 0 1420k 0 0:00:09 0:00:09 --:--:-- 2323k Everything is Ok Folders: 1 Files: 5 Size: 39265765 Compressed: 13308709mandb not found. The rclone man docs will not be installed. rclone v1.55.1 has successfully installed. Now run "rclone config" for setup. Check https://rclone.org/docs/ for more details. $ rclone version rclone v1.55.1 - os/type: linux - os/arch: arm - go/version: go1.16.3 - go/linking: static - go/tags: none |
インストールが済んだらまず、リモート接続先の登録を行います(登録せずにrclone実行時に全てオプションに指定する方法も可能ですが、ログイン情報も平文でオプションに列記することになるので非推奨)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 |
$ rclone config 2021/06/27 22:58:32 NOTICE: Config file "/var/services/homes/######/.config/rclone/rclone.conf" not found - using defaults No remotes found - make a new one n) New remote s) Set configuration password q) Quit config n/s/q> n name> Lolipop Type of storage to configure. Enter a string value. Press Enter for the default (""). Choose a number from below, or type in your own value 1 / 1Fichier \ "fichier" 2 / Alias for an existing remote \ "alias" 3 / Amazon Drive \ "amazon cloud drive" 4 / Amazon S3 Compliant Storage Providers including AWS, Alibaba, Ceph, Digital Ocean, Dreamhost, IBM COS, Minio, and Tencent COS \ "s3" 5 / Backblaze B2 \ "b2" 6 / Box \ "box" 7 / Cache a remote \ "cache" 8 / Citrix Sharefile \ "sharefile" 9 / Compress a remote \ "compress" 10 / Dropbox \ "dropbox" 11 / Encrypt/Decrypt a remote \ "crypt" 12 / Enterprise File Fabric \ "filefabric" 13 / FTP Connection \ "ftp" 14 / Google Cloud Storage (this is not Google Drive) \ "google cloud storage" 15 / Google Drive \ "drive" 16 / Google Photos \ "google photos" 17 / Hadoop distributed file system \ "hdfs" 18 / Hubic \ "hubic" 19 / In memory object storage system. \ "memory" 20 / Jottacloud \ "jottacloud" 21 / Koofr \ "koofr" 22 / Local Disk \ "local" 23 / Mail.ru Cloud \ "mailru" 24 / Mega \ "mega" 25 / Microsoft Azure Blob Storage \ "azureblob" 26 / Microsoft OneDrive \ "onedrive" 27 / OpenDrive \ "opendrive" 28 / OpenStack Swift (Rackspace Cloud Files, Memset Memstore, OVH) \ "swift" 29 / Pcloud \ "pcloud" 30 / Put.io \ "putio" 31 / QingCloud Object Storage \ "qingstor" 32 / SSH/SFTP Connection \ "sftp" 33 / Sugarsync \ "sugarsync" 34 / Tardigrade Decentralized Cloud Storage \ "tardigrade" 35 / Transparently chunk/split large files \ "chunker" 36 / Union merges the contents of several upstream fs \ "union" 37 / Webdav \ "webdav" 38 / Yandex Disk \ "yandex" 39 / Zoho \ "zoho" 40 / http Connection \ "http" 41 / premiumize.me \ "premiumizeme" 42 / seafile \ "seafile" Storage>13 ** See help for ftp backend at: https://rclone.org/ftp/ ** FTP host to connect to Enter a string value. Press Enter for the default (""). Choose a number from below, or type in your own value 1 / Connect to ftp.example.com \ "ftp.example.com" host> ftp.lolipop.jp FTP username, leave blank for current username, admin Enter a string value. Press Enter for the default (""). user> ################# FTP port, leave blank to use default (21) Enter a string value. Press Enter for the default (""). port> FTP password y) Yes type in my own password g) Generate random password y/g> y Enter the password: password: Confirm the password: password: Use Implicit FTPS (FTP over TLS) When using implicit FTP over TLS the client connects using TLS right from the start which breaks compatibility with non-TLS-aware servers. This is usually served over port 990 rather than port 21. Cannot be used in combination with explicit FTP. Enter a boolean value (true or false). Press Enter for the default ("false"). tls> Use Explicit FTPS (FTP over TLS) When using explicit FTP over TLS the client explicitly requests security from the server in order to upgrade a plain text connection to an encrypted one. Cannot be used in combination with implicit FTP. Enter a boolean value (true or false). Press Enter for the default ("false"). explicit_tls> true Edit advanced config? (y/n) y) Yes n) No (default) y/n>n Remote config -------------------- [Lolipop] type = ftp host = ftp.lolipop.jp user = ################# pass = *** ENCRYPTED *** explicit_tls = true -------------------- y) Yes this is OK (default) e) Edit this remote d) Delete this remote y/e/d> y Current remotes: Name Type ==== ==== Lolipop ftp e) Edit existing remote n) New remote d) Delete remote r) Rename remote c) Copy remote s) Set configuration password q) Quit config e/n/d/r/c/s/q> q |
2023.05.24追記)
FTPサーバ側の挙動が変わったのか、rcloneが接続しようとすると、次のメッセージで異常終了するようになりました。
123 Failed to create file system for "Lolipop:": NewFs:failed to make FTP connection to "ftp.lolipop.jp:21":I can't deal with you (proxy error for user)デバッグオプションを付けて確認してみると、 AUTH TLS が怪しそう。
1234567891011 admin@nas06:~$ rclone lsf Lolipop: -vv --dump bodies2023/05/24 12:04:41 DEBUG : rclone: Version "v1.55.1" starting with parameters ["rclone" "lsf" "Lolipop:" "-vv" "--dump" "bodies"]2023/05/24 12:04:41 DEBUG : Creating backend with remote "Lolipop:"2023/05/24 12:04:41 DEBUG : ftp://ftp.lolipop.jp:21: Connecting to FTP server2023/05/24 12:04:41 DEBUG : FTP Rx: "220 Lolipop FTP server ready"2023/05/24 12:04:41 DEBUG : FTP Tx: "AUTH TLS"2023/05/24 12:04:41 DEBUG : FTP Rx: "234 AUTH command ok. Expecting TLS Negotiation."2023/05/24 12:04:41 DEBUG : FTP Tx: "USER #################"2023/05/24 12:04:42 DEBUG : FTP Rx: "530 I can't deal with you (proxy error for user)"2023/05/24 12:04:42 DEBUG : FTP Tx: "QUIT"2023/05/24 12:04:42 Failed to create file system for "Lolipop:": NewFs: failed to make FTP connection to "ftp.lolipop.jp:21": I can't deal with you (proxy error for user)色々試した結果、当初は true にしていた explicit_tls を false に変えて、正常動作に復帰しました。
12345678910 --------------------[Lolipop]type = ftphost = ftp.lolipop.jpuser = #################pass = *** ENCRYPTED ***explicit_tls = falsetls = falseno_check_certificate = false--------------------追記ここまで。
設定中に促されたRcloneをFTPでの使い方と注意事項について確認してみると、同期に際しハッシュによるファイル比較はサポートしておらず、ファイルサイズで判断するとのことですが、今回のような用途には支障は無いでしょう。
Rcloneを試行して手動同期
Rcloneのリモート接続先の設定を終えたので、公式サイトのドキュメントを確認しながら、リモート接続先に対していくつかコマンドを発行してみます。まず、BackWPupがWebサーバ上に作成したバックアップ・アーカイブを収めたディレクトリの一覧を要求してみます。
1 2 3 4 5 6 7 8 9 10 11 |
$ rclone lsf Lolipop:/blog/wp-content/uploads/backwpup-######-backups/ .donotbackup .htaccess 20210623_231839_DM5Q33NF01.tar.gz 20210623_232320_OM5Q33PK02.tar.gz 20210624_111544_CE5Q33J503.tar.gz 20210625_020709_V45Q33M603.tar.gz 20210626_020548_DI5Q33NC03.tar.gz 20210627_021631_JM5Q33M203.tar.gz 20210628_023340_U45Q33NP03.tar.gz index.php |
ls 関連はこちらのページに詳細があります。 ls -l のようなことをするのは、 lsl で良さそうです。
1 2 3 4 5 6 7 8 9 10 11 12 |
$ rclone lsl Lolipop:/blog/wp-content/uploads/backwpup-######-backups/ 139 2021-06-23 23:18:39.000000000 .donotbackup 221 2021-06-23 23:18:39.000000000 .htaccess 621130703 2021-06-23 23:19:21.000000000 20210623_231839_DM5Q33NF01.tar.gz 1999681 2021-06-23 23:23:21.000000000 20210623_232320_OM5Q33PK02.tar.gz 623691378 2021-06-24 11:16:14.000000000 20210624_111544_CE5Q33J503.tar.gz 626419653 2021-06-25 02:07:39.000000000 20210625_020709_V45Q33M603.tar.gz 628619188 2021-06-26 02:06:20.000000000 20210626_020548_DI5Q33NC03.tar.gz 628625353 2021-06-27 02:17:04.000000000 20210627_021631_JM5Q33M203.tar.gz 628618595 2021-06-28 02:34:19.000000000 20210628_023340_U45Q33NP03.tar.gz 628616521 2021-06-29 02:17:50.000000000 20210629_021718_3E5Q33MJ03.tar.gz 99 2021-06-23 23:18:39.000000000 index.php |
バックアップ・アーカイブのみを抽出した一覧にするには、フィルタリング機能を使います。
1 2 3 4 5 6 7 8 9 |
$ rclone lsl --include="*.tar.gz" Lolipop:/blog/wp-content/uploads/backwpup-######-backups/ 621130703 2021-06-23 23:19:21.000000000 20210623_231839_DM5Q33NF01.tar.gz 1999681 2021-06-23 23:23:21.000000000 20210623_232320_OM5Q33PK02.tar.gz 623691378 2021-06-24 11:16:14.000000000 20210624_111544_CE5Q33J503.tar.gz 626419653 2021-06-25 02:07:39.000000000 20210625_020709_V45Q33M603.tar.gz 628619188 2021-06-26 02:06:20.000000000 20210626_020548_DI5Q33NC03.tar.gz 628625353 2021-06-27 02:17:04.000000000 20210627_021631_JM5Q33M203.tar.gz 628618595 2021-06-28 02:34:19.000000000 20210628_023340_U45Q33NP03.tar.gz 628616521 2021-06-29 02:17:50.000000000 20210629_021718_3E5Q33MJ03.tar.gz |
それでは同期転送を試してみましょう。まずはdry-runモードで挙動を確認します。
1 2 3 4 5 6 7 8 9 10 11 |
$ rclone sync -Pn --include="*.tar.gz" Lolipop:/blog/wp-content/uploads/backwpup-######-backups /volume1/gadget/BackWPup_svcan 2021-06-28 09:56:12 NOTICE: 20210623_231839_DM5Q33NF01.tar.gz: Skipped copy as --dry-run is set (size 592.356M) 2021-06-28 09:56:12 NOTICE: 20210623_232320_OM5Q33PK02.tar.gz: Skipped copy as --dry-run is set (size 1.907M) 2021-06-28 09:56:12 NOTICE: 20210624_111544_CE5Q33J503.tar.gz: Skipped copy as --dry-run is set (size 594.798M) 2021-06-28 09:56:12 NOTICE: 20210625_020709_V45Q33M603.tar.gz: Skipped copy as --dry-run is set (size 597.400M) 2021-06-28 09:56:12 NOTICE: 20210626_020548_DI5Q33NC03.tar.gz: Skipped copy as --dry-run is set (size 599.498M) 2021-06-28 09:56:12 NOTICE: 20210627_021631_JM5Q33M203.tar.gz: Skipped copy as --dry-run is set (size 599.504M) 2021-06-28 09:56:12 NOTICE: 20210628_023340_U45Q33NP03.tar.gz: Skipped copy as --dry-run is set (size 599.497M) Transferred: 3.501G / 3.501 GBytes, 100%, 610.985 GBytes/s, ETA 0s Transferred: 7 / 7, 100% Elapsed time: 2.4s |
問題無いので、dry-runを外して実行してみます。デフォルトではマルチスレッドが有効で、同時に4本の転送が並列に進行します。
1 |
$ rclone sync -P --include="*.tar.gz" Lolipop:/blog/wp-content/uploads/backwpup-######-backups /volume1/gadget/BackWPup_svcan |
実際に同期してみると、進捗99%になると必ずリセットがかかり、再び0%からやり直しを延々と繰り返します。
-vv オプションを追記してデバッグしてみると、マルチスレッド転送に原因がありそうに思えます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
DEBUG : 20210623_231839_DM5Q33NF01.tar.gz: multi-thread copy: stream 1/2 failed: 450 Transfer aborted. Link to file server lost DEBUG : ftp://ftp.lolipop.jp:21/blog/wp-content/uploads/backwpup--######--backups: Connecting to FTP server ERROR : 20210623_231839_DM5Q33NF01.tar.gz: Failed to copy: 450 Transfer aborted. Link to file server lost DEBUG : 20210627_021631_JM5Q33M203.tar.gz: Starting multi-thread copy with 2 parts of size 299.812M DEBUG : 20210627_021631_JM5Q33M203.tar.gz: multi-thread copy: stream 2/2 (314376192-628625353) size 299.691M starting DEBUG : 20210627_021631_JM5Q33M203.tar.gz: multi-thread copy: stream 1/2 (0-314376192) size 299.812M starting DEBUG : 20210624_111544_CE5Q33J503.tar.gz: multi-thread copy: stream 2/2 (311885824-623691378) size 297.361M finished DEBUG : 20210624_111544_CE5Q33J503.tar.gz: multi-thread copy: stream 1/2 (0-311885824) size 297.438M finished DEBUG : 20210624_111544_CE5Q33J503.tar.gz: multi-thread copy: stream 1/2 failed: 450 Transfer aborted. Link to file server lost DEBUG : ftp://ftp.lolipop.jp:21/blog/wp-content/uploads/backwpup-######-backups: Connecting to FTP server ERROR : 20210624_111544_CE5Q33J503.tar.gz: Failed to copy: 450 Transfer aborted. Link to file server lost DEBUG : 20210628_023340_U45Q33NP03.tar.gz: Starting multi-thread copy with 2 parts of size 299.750M DEBUG : 20210628_023340_U45Q33NP03.tar.gz: multi-thread copy: stream 2/2 (314310656-628618595) size 299.747M starting DEBUG : 20210628_023340_U45Q33NP03.tar.gz: multi-thread copy: stream 1/2 (0-314310656) size 299.750M starting |
そこでマルチスレッドを無効とし、さらにFTP同時接続数も絞り、1つずつ確実に転送する手法に変えてみます。
1 |
$ rclone sync -P --multi-thread-streams=0 --ftp-concurrency 1 --include="*.tar.gz" Lolipop:/blog/wp-content/uploads/backwpup-######-backups /volume1/gadget/BackWPup_svcan |
進捗では1つずつ転送することでリセットすることなく同期完走することが確認出来ました。
次ページでは、出来上がったRcloneスクリプトをNASのタスク・スケジューラへ登録して定期運用するようにします。