6
2

NervesデバイスのストレージをホストのPCにマウント

Last updated at Posted at 2024-07-21

はじめに

Nerves ファームウエアで動くのデバイス(Raspberry Pi 4等)のストレージをホストの PC にマウントします。

やり方はいくつかあるそうですが、ここでは sshfs を使う方法に挑戦します。

環境

ホスト

Nerves

Nerves Livebook

Nerves Livebookを使用すると、何も構築せずに実際のハードウェアで Nerves プロジェクトを試すことができます。
Livebook のノートブック上でコードを実際に実行しながら進められるので、ブラウザーで快適に 楽しくNerves を学べます。例えば、ブラウザ上でターゲットデバイスの Wi-Fi の設定ができます。

有志の方々が Nerves Livebook のセットアップ方法ついてのビデオやコラムを制作してくださっています。ありがとうございます。

Nerves デバイスの読み書きできる場所

/data(/root へのシンボリックリンク) が Nerves システムの書き込み可能な部分です。
これは、vintage_net を含むいくつかのライブラリが永続化のために使用しています。

書き込み可能なパーティションは常に /root ですが、書き込み可能なパーティションを簡単に識別できるようにする目的で、シンボリックリンク/dataが追加されることになった経緯があるようです。

Nerves
iex(livebook@nerves-9bd5.local)6> ls "/"
bin       boot      data      dev       etc
lib       lib64     media     mnt       opt
proc      root      run       sbin      srv
sys       tmp       usr       var
Nerves
iex(livebook@nerves-9bd5.local)7> cmd "ls -l /root"
-rw-r--r--    1 root     root         19008 Apr  1 01:29 last_shutdown.txt
drwx------    2 root     root          3488 Apr  1 00:55 vintage_net
drwx------    2 root     root          3488 Jul 11 22:48 seedrng
drwx------    2 root     root          3488 Jul 11 22:48 livebook
drwx------    3 root     root          3488 Apr  1 00:53 nerves_ssh
0
Nerves
iex(livebook@nerves-9bd5.local)8> cmd "ls -l /data"
lrwxrwxrwx    1 root     root             4 Oct 21  2020 /data -> root
0

sshfs コマンド

sshfs コマンドは、SSH を使用してリモートのファイルシステムをホストの PC にマウントするプログラムです。多数のファイルを手早く操作したいときに非常に便利です。

ファイル共有の方法は他にもありますが、 sshfs はサーバー側の設定が不要という利点があるそうです。

デフォルトでは含まれていない場合、ホスト PC にインストールする必要があります。Debian の場合は以下のコマンドでインストールできました。

sudo apt install sshfs

使い方はsshfs --helpman sshfs で確認できます。

$ sshfs --help
usage: sshfs [user@]host:[dir] mountpoint [options]

...snip...

必要に応じて-oオプションにより、様々な SSH のオプションを指定することが可能のようです。

論より Run

やること

sshfs コマンドを使って、Nerves デバイス上の /root をホストの PC にマウントします。
これにより、Nerves デバイス上のファイルをホストの PC 上で直接、編集できるようになります。

Nerves デバイスを準備

いつも通り、Nervesで作ったファームウエアを焼いた micoSD カードが挿入されたデバイスを起動します。

ターミナルを開きます。

pingコマンドでネットワーク接続を確認します。

mnishiguchi@thinkpad:~
$ ping -c3 nerves-9bd5.local
PING nerves-9bd5.local (172.31.224.217) 56(84) bytes of data.
64 bytes from 172.31.224.217 (172.31.224.217): icmp_seq=1 ttl=64 time=0.292 ms
64 bytes from 172.31.224.217 (172.31.224.217): icmp_seq=2 ttl=64 time=0.291 ms
64 bytes from 172.31.224.217 (172.31.224.217): icmp_seq=3 ttl=64 time=0.246 ms

--- nerves-9bd5.local ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 0.246/0.276/0.292/0.021 ms

SSH 接続してみます。

mnishiguchi@thinkpad:~
$ ssh nerves-9bd5.local
Nerves Livebook
https://github.com/nerves-livebook/nerves_livebook

ssh livebook@nerves-9bd5.local # Use password "nerves"

(mnishiguchi@nerves-9bd5.local) Password:
Interactive Elixir (1.17.2) - press Ctrl+C to exit (type h() ENTER for help)
████▄▄    ▐███
█▌  ▀▀██▄▄  ▐█
█▌  ▄▄  ▀▀  ▐█   N  E  R  V  E  S
█▌  ▀▀██▄▄  ▐█
███▌    ▀▀████
nerves_livebook 0.13.0 (a623fa83-b771-5029-b281-acb8d205aea5) arm rpi4
  Serial       : 100000007e279bd5
  Uptime       : 29 minutes and 35 seconds
  Clock        : 2024-07-11 23:18:19 UTC (unsynchronized)
  Temperature  : 63.8°C

  Firmware     : Valid (B)               Applications : 111 started
  Memory usage : 209 MB (3%)             Part usage   : 288 MB (2%)
  Hostname     : nerves-9bd5             Load average : 0.05 0.06 0.04

  usb0         : 172.31.224.217/30, fe80::c082:b7ff:fe10:409b/64

Nerves CLI help: https://hexdocs.pm/nerves/iex-with-nerves.html

Toolshed imported. Run h(Toolshed) for more info.
iex(livebook@nerves-9bd5.local)1>

Nerves のストレージをホストの PC にマウントする

Nerves に SSH 接続したターミナルとは別に、新しいターミナルを開きます。

ホストの PC 上にマウントポイントとして任意の名前のディレクトリを作成し、そこへ Nerves デバイス上のディレクトリをマウントします。

例としてここでは /tmp/nerves-sshfs/をマウントポイントとします。

mnishiguchi@thinkpad:~
$ mkdir -p /tmp/nerves-sshfs

そしてそのディレクトリに Nerves デバイスの読み書き可能ストレージである /root をマウントします。

mnishiguchi@thinkpad:~
$ sshfs nerves-9bd5.local:/root /tmp/nerves-sshfs
(mnishiguchi@nerves-9bd5.local) Password:

マウントポイントの中身を見てみると、Nerves デバイス上の/rootにあるファイルが入っています。

mnishiguchi@thinkpad:~
$ ls /tmp/nerves-sshfs/
livebook/  nerves_ssh/  seedrng/  vintage_net/  last_shutdown.txt

試しにファイル操作をしてみる

Nerves デバイスのターミナルで/rootの中身を確認します。

Nerves
iex(livebook@nerves-9bd5.local)1> cmd "ls /root"
last_shutdown.txt
vintage_net
seedrng
livebook
nerves_ssh
0

ホスト側のマウントポイントで新しいファイルを作成してみます。

mnishiguchi@thinkpad:~
$ echo "元氣ですかーーーーッ!!!" > /tmp/nerves-sshfs/hello.txt

Nerves 側で/rootの中身を再度確認すると新しく作ったファイルが入っています!

Nerves
iex(livebook@nerves-9bd5.local)2> cmd "ls /root"
hello.txt #<--- これ
last_shutdown.txt
vintage_net
seedrng
livebook
nerves_ssh
0

iex(livebook@nerves-9bd5.local)3> cat "/data/hello.txt"
元氣ですかーーーーッ!!!

アンマウント

リモートのファイルシステムの使用が完了したら、fusermount コマンドでアンマウントします。

mnishiguchi@thinkpad:~
$ fusermount -u /tmp/nerves-sshfs

mnishiguchi@thinkpad:~
$ ls /tmp/nerves-sshfs/

:tada::tada::tada:

6
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
2