この記事は
ドライブやホストを跨いでバックアップする際の作業メモです。手元のどこかに書いているとそのメモの在りかが分からなくなってしまうのでここに書いています。
状況としては、普段SSH越しに利用している計算サーバ上のデータを、LAN内に置いているNASにバックアップする必要がありました(下の図)。
私個人の環境に合わせて書いているので、必要なところだけ掻い摘んで使ってください。なお、作業はMacのTerminalで行っています。
作業
1. リモートホストのファイルシステムをマウント
sshfsを予めインストールしておく。Linuxならapt-getなどで入るし、Macはbrew caskでインストール可能。
また、マウント用に、適当なディレクトリ(以下ではmountpoint)を作成しておく。
$> sshfs username@REMOTEHOST: ~/mountpoint
もし、リモートホストのホームディレクトリ(フロントサーバで初めに着地する場所)とは別のファイルシステムに置かれているファイルをsshfs越しに見る必要がある場合は、そこに予めシンボリックリンクを貼っておく。
sshfsはそのままではシンボリックリンクを読めないので、その場合は、-o follow_symlinks
をsshfsのオプションとして渡す。
# ssh接続によるリモートホストでの作業
$> ln -s /ANOTHER_DRIVE/path $HOME/link_to_another_filesystem
# 手元での作業
$> sshfs username@REMOTEHOST: ~/mountpoint -o follow_symlinks
$> cd ~/mountpoint/link_to_another_filesystem # -o follow_symlinksを渡さない場合、これが失敗する
2. バックアップ先のマウント
必要に応じて追加します。
NASのマウント
Linuxだとcifs
というツールをインストールしたらNASをマウントできるようなのだが、どうも書き込みができない。
Macだと新たに何かをインストールする必要はなく、terminalに元から入っているmount
コマンドでマウント可能。上記のsshfsと同様に、マウント用のディレクトリを作っておく(以下ではmountpoint2)。
mount -t smbfs //username@NAS_NAME/path ~/mountpoint2
3. rsync
3.1 同期するファイルを確認する
rsyncのオプションとしてn
を渡すとdry-runとなり、実際の作業はせずバックアップするファイルをリストするだけで終了する。これで、対象となるファイルを確認する。
--exclude="*.bin"
などで、バイナリなどバックアップから除外するファイルを指定する。
注意する点として、コピー元のディレクトリの指定時に、src_dir_name/
のようにセパレータ(/
)をつけた場合、コピー先のディレクトリ内(直下)に、src_dir_nameの子ディレクトリが作られる。
一方、src_dir_name
のようにセパレータを付けない場合は、コピー先のディレクトリ直下に同名のディレクトリ(ここでいうと、src_dir_name
)が作られ、その下に子ディレクトリが作られる。
rsync -avn ~/mountpoint/src_dir_name ~/mountpoint2/dst_dir_name --exclude="*.bin"
3.2 実行
上記で確認して問題なければ、n
のオプションを外して実行する。
rsync -av ~/mountpoint/src_dir_name ~/mountpoint2/dst_dir_name --exclude="*.bin"
終わりに
何か知見が増えたらここにも追加します。