sshfsでリモートファイルをマウントしファイルコピーを迅速に行う

2017年7月3日

先日アップしたグラフ作成で、出来上がったHTMLファイルを、ローカルファイルから直接ブログのフォルダにコピーすることを書きました。

このローカルファイルをブログのフォルダに割り付けるコマンドが sshfs コマンドです。

ラズパイには色々便利なコマンドがありますが、知らないと膨大な作業を強いられる場合があるので注意が必要です。

スポンサーリンク

コマンド sshfs

このコマンド sshfs は、SSHを使用して他のサーバのディレクトリをマウントする(リモートシステムをローカルフォルダにマウントする)ものです。

一度 sshfs でマウントしてしまえば、データをコピーする際に scp などのコマンドを使わずに、cpコマンドでデータをコピーすることができます。

言葉だけだとイメージしづらいので図にしてみました。

ローカルにあるディレクトリ /tmp をリモートの /home/pi/ にマウントします。

すると、ローカルで /tmp に操作したことが、リモートの /home/pi/ に操作したことになるのです。

即ち、/tmp にあるファイルをコピーすると、そのファイルはマウントされたリモートの /home/pi/ にコピーされるのです。


sshfs のインストールとマウント

インストール

もし、sshfs がインストールされていない場合には、下記のようにインストールしてください。

$ sudo apt-get install sshfs

マウント

さて、これからマウントを行う訳ですが、以降の処理は root で実行しましょう。そうしないと、思いも寄らないエラーが出てしまいます。

60爺は、root で実施しなかったため無駄な時間を食ってしまいましたので、老婆心ながら一言言わせていただきます。root に入るコマンドは次の通りです。

pi@raspberrypi:~ $ su -
パスワード:

それでは、sshfs でマウントを実施します。

ブログのフォルダ(サーバ 192.168.xxx.yyy のフォルダ/var/www/hxxx/)を ローカルの /home/pi/Raspi にマウントします。

Raspi フォルダは事前に作成しておきます。

以下のように sshfs コマンドを指定することで簡単にサーバのフォルダをマウントすることが出来ます。

$ sshfs xxxxxxx@192.168.xxx.yyy:/var/www/hxxx/ /home/pi/Raspi
192.168.xxx.yyy の PSW 入力

マウントの状況を見るには、下記のコマンドで実行できます。

root@raspbian:~# df -h

上記で指定したマウントがきちんと設定されている(最後の行を見てください)ことがわかります。

ファイルシス サイズ 使用 残り 使用% マウント位置
/dev/root 14G 5.8G 6.6G 47% /
devtmpfs 426M 0 426M 0% /dev
tmpfs 430M 0 430M 0% /dev/shm
tmpfs 430M 44M 387M 11% /run
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs 430M 0 430M 0% /sys/fs/cgroup
/dev/mmcblk0p6 66M 22M 45M 32% /boot
tmpfs 86M 4.0K 86M 1% /run/user/1000
/dev/mmcblk0p5 30M 398K 28M 2% /media/pi/SETTINGS
mizutan@192.168.XXX.yyy:/var/www/hXXX 14G 7.6G 5.0G 61% /home/pi/Raspi

マウント結果の確認

ファイルのコピーを行い、マウントが正しく行われているか確認しましょう。

始めに、リモートのラズパイにログインして、/var/www/hXXX の内容を確認します。

mizutan@raspberrypi:~ $ cd /var/www/hXXX
mizutan@raspberrypi:/var/www/hxxx $ ls
html index.html.bk

それでは、ファイルのコピーを行います。xxxxxxxx_display.html をマウントした /home/pi/Raspi にコピーします。

$ cp /xxxxxxx/python_pg/graph_data/xxxxxxxx_display.html /home/pi/Raspi

再度、リモートのラズパイの /var/www/hXXX の内容を確認してみます。

mizutan@raspberrypi:~ $ cd /var/www/hXXX
mizutan@raspberrypi:/var/www/hxxx $ ls
html index.html.bk xxxxxxxx_display.html

きちんと、コピーした xxxxxxxx_display.html がリモートのマウントしたディレクトリに保管されました。

電源オン/オフの対策

停電その他でラズパイの電源が落ちるとマウントは解消されてしまいます。

このような場合、再度、マウントを実施する必要があるのですが、毎回毎回実施してもいられないので、起動時に上記コマンドを実施する方法がないか調べてみました。

その結果、起動時に /etc/rc.local に、コマンドを記入しておけばよいとのことがわかりましたので、次のコマンドを作成してフォルダに設定しました。

なお、パスワード指定が必要になりますので、パスワードをパイプでつなぐ形を取っています。

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
# Print the IP address
_IP=$(hostname -I) || true
if [ "$_IP" ]; then
printf "My IP address is %s\n" "$_IP"
fi# 起動時に実行したい処理
cd /home/pi/Raspi
rm *
echo XXXXXXXXXXXX | sshfs -o password_stdin /home/pi/Raspi/ mizutan@192.168.XXX.yyy:/var/www/hXXX
exit 0

最後に

リモートファイルをマウントして、外にあるファイルを、あたかも自分のファイルであるかのように使用できるのがマウントです。

ラズパイには色々便利なコマンドがありますが、知らないと膨大な作業を強いられる場合があります。

今回のsshfsも非常に便利なんですが、瞬電などが起きるとマウントが知らない間に解除されているので万能ではありません。

そのため、バックアップなどでは注意が必要ですね。

参考
sshでリモートサーバーをマウント、便利にsshfs

スポンサーリンク
この記事を書いた人

60爺

60路を越え、RaspberryPi と出会い、その関係でブログ開設(2017/2~)となりました。始めてみると、コツコツやるのが性に合ってしまい、漢字の記事から家の補修・将棋・windows10関係・別名・言い方などジャンルを拡大して今に至ってます。まだまだ、元気なので新たな話題を見つけて皆様に提供できればと思っています。「プロフィールはこちら

コマンド

Posted by 60爺