Windows Subsystem for Linuxの「rsync」コマンドでバックアップをする

2018-05-11

Windows Subsystem for LinuxでLinuxのコマンドを利用できるので、Googleフォトにある画像ファイルをローカルのディスクとネットワークドライブとして使用しているNASに「rsync」でバックアップする事にしてみました。シェルスクリプトも使えるのでバックアップも簡単になります。

Windows Subsystem for Linuxでは「Ubuntu」を利用しています

バックアップスクリプトを作るのにいくつかの問題点がでてきました。これば「Windows Subsystem for Linux」の仕様の関係と思いますが、まずは「Google ドライブ」のあるディレクトリがLinuxからのパス「 /mnt/c/Users/(ユーザ名)/Google ドライブ」となりますが、コマンドラインだと問題なく利用できますが、シェルスクリプトだとエラーになります。空白を¥でエスケープしても駄目でした

もう一個が、NASですが私はPlayStation機器のnasneを利用しています。このNASですがログイン時にユーザーログインが必要でその関係でLinuxからマウントできません

Windows Subsystem for Linuxで空白を含む日本語フォルダを取り扱う

Windows Subsystem for Linuxで「Google ドライブ」のような、日本語でしかも空白があるフォルダのアクセスですが、通常であれば「/mnt/c/Users/(ユーザ名)/Google\ ドライブ」で使用できますがシェルスクリプトだと「failed: No such file or directory」エラーになります。

解決策ですが、シンボリックリンクを作って対応しました。

Windows Subsystem for Linuxでネットワークドライブをマウントする

Windows Subsystem for Linuxでネットワークドライブをマウントするには「mount -t drvfs Z: /mnt/share」のようなコマンドでマウントできます。事前にネットワークドライブとしてZドライブにネットワークドライブを割当する必要があります。

ネットワークドライブに割り当するには、対象のネットワークドライブのフォルダを右クリックして「ネットワークドライブの割り当て」を選択します

割り当てするドライブを選択して、「サインイン時に再接続する」のオプションにチェックして「完了」をクリックします

ネットワークドライブの割り当てが終わりましたら、Windows Subsystem for Linuxで実際にマウントします。マウントする前に「 /mnt/share」を作成しておく必要があるのでmkdirコマンドで作成してからマウントして「df」コマンドでマウントしてるか確認したのが下記です

 

Windows Subsystem for Linuxでrsyncを利用したシェルスクリプト

使用される環境でディレクトリが異なりますが、私の場合は以下のようなシェルスクリプトを作りました。
ネットワークドライブですが削除ができたり出来なかったりして不安定ですが一様rsyncコマンドは走ってコピーはしているようです