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

2021-06-30

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」エラーになります。

# vim rsync.sh
SRC01="/mnt/c/Users/test/Google\ ドライブ/Google\ フォト/"
DECT01="/mnt/e/backup/Google フォト/"

rsync -avz --delete $SRC01 $DECT01

# sh rsync.sh
sending incremental file list
rsync: link_stat "/mnt/d/Users/test/Google\" failed: No such file or directory (2)
rsync: change_dir "/mnt/e/backup/Google\" failed: No such file or directory (2)

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

# ln -s /mnt/c/Users/test/Google\ ドライブ/Google\ フォト/ /mnt/c/Users/test/script/Photo

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

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

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

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

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

# mkdir /mnt/share

# mount -t drvfs Z: /mnt/share

# df
Filesystem      1K-blocks      Used  Available Use% Mounted on
rootfs          311939044 196387488  115551556  63% /
root            311939044 196387488  115551556  63% /root
home            311939044 196387488  115551556  63% /home
data            311939044 196387488  115551556  63% /data
cache           311939044 196387488  115551556  63% /cache
mnt             311939044 196387488  115551556  63% /mnt
none            311939044 196387488  115551556  63% /dev
none            311939044 196387488  115551556  63% /run
none            311939044 196387488  115551556  63% /run/lock
none            311939044 196387488  115551556  63% /run/shm
none            311939044 196387488  115551556  63% /run/user
C:              311939044 196387488  115551556  63% /mnt/c
D:              976759804 159047752  817712052  17% /mnt/d
E:             2930265084 426871852 2503393232  15% /mnt/e
Z:              974974548 252266716  722707832  26% /mnt/share

 

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

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

#!/bin/bash

mount -t drvfs Z: /mnt/share

#「Google ドライブ」フォルダの空白が取り扱えないのでシンボリックリンクで対応
SRC11="/mnt/c/Users/test/script/Photo/"
DECT11="/mnt/e/01_Backup/Google_Photo/"
DECT12="/mnt/share/PHOTO/"

rsync -avz --delete $SRC11 $DECT11
rsync -avz --delete $SRC11 $DECT12