SSHFSとRaspberry Piを使用したネットワークハードドライブ





みなさんこんにちは!



Raspberry Piでネットワークハードドライブを作成した経験を共有したいと思います。 私の記事は、メインOSとしてLinuxを使用している人に最適です。 ここでは、SSHFSを積極的に使用しています。



猫に興味がある人は誰でも聞いてください。



ステップ0。準備



必要なもの:





ステップ1.インストール



まず、Raspberry PiにRaspbianまたはArch Linux ARMをインストールする必要があります。

この記事では、Raspbianを使用します。

  1. Raspberry Pi Webサイトのダウンロードセクションに移動し、Raspbianイメージをダウンロードします
  2. アーカイブを解凍します
  3. ターミナルを開き、画像のあるフォルダーに移動します
  4. メモリカードをコンピューターに挿入します
  5. ターミナルでdf -hと入力して、出力を確認します。 出力には、/ dev / mmcblk0p1または/ dev / sdd1が含まれている必要があります。 私の場合、これは/ dev / mmcblk0p1です。 p1(または、カードが/ dev / sdd1と表示される場合は1)がパーティション番号であり、カードに複数のパーティションがある場合、出力は/ dev / mmcblk0p2または/ dev / sdd2のままです。 出力のエントリの数は、パーティションの数によって異なります。
  6. そのため、システムでのカードの表示方法を確認した後、画像記録に進みます。

    1. ターミナルで、umount / dev / mmcblk0p1(またはumount / dev / sdd1)を実行します。 複数のパーティションがある場合は、すべてのマウントを解除する必要があります。
    2. dcflddプログラムを使用して、カードに画像を書き込みます。 dcflddプログラムはddと同じように機能しますが、すでに書き込まれた量を定期的に報告します。 次のコマンドを端末に入力します。



      $ sudo dcfldd bs=4M if=___.img of=___
            
            





      私の場合、コマンドは次のようになります。



       $ sudo dcfldd bs=4M if=2014-12-24-wheezy-raspbian.img of=/dev/mmcblk0
            
            





      マップへのパスにセクション番号を指定する必要はありません(セクション番号が1つであっても)。 画像はカード全体に記録されます。

      bs-ブロックサイズ-カードに書き込まれる1ブロックのサイズ。 4Mをインストールした状態で録音が機能しない場合は、1Mを設定する必要がありますが、これにより録音時間が長くなります。
    3. 画像が記録されたら、次のコマンドを実行します。



       $ sync
            
            





      これにより、すべてのデータがカードに書き込まれ、バッファがクリアされます。
  7. それだけです カードを取り外して、Raspberry Piに挿入できます。




ステップ2.最初の開始



  1. カードをRaspberry Piに挿入します。
  2. Raspberry Piインターネット、モニター、キーボードに接続します。
  3. Raspberry Piの電源を入れます。
  4. システムが起動すると、Raspberry Piソフトウェア構成ツールウィンドウが表示されます。

    1. 「ファイルシステムの展開」を選択して、Enterキーを押します。 これにより、OSがカードのボリューム全体にアクセスできるようになります。
    2. 次に、ステップ2-ユーザーパスワードの変更に進み、新しいパスワードを入力します。
    3. ステップ3-ブートを有効にする...に進み、コンソールテキストコンソールを選択します。
    4. ステップ4-国際化オプションに進み、ロケールの変更に進み、リストでru_RU.UTF-8 UTF-8を探し、スペースでマークしてEnterを押します。 次に、システムはデフォルトで使用するロケールを尋ねます。 ロシア語を選択してEnterキーを押します。
    5. 再び国際化オプションに移動してから、タイムゾーンの変更に移動します。 ヨーロッパを選択し、リストから都市を探します。 次に、Enterを押します。
    6. ステップ7-オーバークロック(赤ちゃんを少しオーバークロック)に進み、中レベルを選択します。
    7. ステップ8-詳細オプションに進み、ステップA2-ホスト名に進みます。 ローカルネットワークで赤ちゃんを表示する名前を入力して、Enterキーを押します。
    8. もう一度[詳細オプション]に進み、ステップA4-SSHに進んでSSHをオンにします。
    9. ここで、Raspberry Piソフトウェア構成ツールでの冒険は終わりです。 右矢印をクリックして終了します。
  5. このプログラムに再度アクセスする必要がある場合は、次を入力する必要があります。



     $ sudo raspi-config
          
          



  6. 次に、システムを再起動する必要があります。 コンソールで、次のコマンドを入力します。



     $ sudo reboot
          
          



  7. システムの再起動後、アカウントに移動します。 ログインpiパスワードは、以前に入力したものです。
  8. 次に、OSを更新する必要があります。 これを行うには、次を入力します。

     $ sudo rpi-update
          
          



    そしてその後

     $ sudo apt-get update
          
          



    そして

     $ sudo apt-get upgrade
          
          









ステップ3. SSHを構成する



  1. まず、キーを生成する必要があります(まだ生成されていない場合)。 これを行うには、メインOSで次を実行します。



     $ ssh-keygen -t rsa -C "your_email@example.com"
          
          



  2. その後、キーをRaspberry Piにコピーする必要があります。

    1. これを行うには、赤ちゃんがオンラインになっているIPの下で見つける必要があります。 これは、たとえばルーターにアクセスするか、次のコマンドを使用して見つけることができます。

       $ ifconfig
            
            





      IP 192.168.0.102があります。
    2. 次に、メインOSでコマンドを実行します。



       $ ssh-copy-id pi@192.168.0.102
            
            





      接続を続行するには、同意を入力するよう求められます。 yesと入力する必要があります。 その後、Raspberry Piのアカウントのパスワードを入力するよう求められます。 それも紹介します。
  3. これで、sshを介してRaspberry Piに接続できます。 これを行うには、メインマシンで次のように入力します。



     $ ssh pi@192.168.0.102
          
          



  4. あいさつメッセージが表示されたら、歓声を上げてログインしています
  5. これで、モニターとキーボードをRaspberry Piから切断できます。 SSHを介してすべての追加アクションを実行します




ステップ4. Raspberry Piを組み合わせる



  1. まず、ルートのパスワードを設定する必要があります デフォルトでは存在しません。 これを行うには、次を実行します。

     $ sudo passwd root
          
          



    そして、ルートの新しいパスワードを入力します
  2. vimエディターをインストールします。

     $ sudo apt-get install vim
          
          



    既にインストールされているnanoエディターを使用することもできます。 しかし、私はvimを好む。
  3. 次に、ユーザー名を変更します。 これを行うには、exitコマンドを使用して終了します。 sshで再度ログインしますが、すでにルートの下にあります。

     $ ssh root@192.168.0.102
          
          



    コマンドを実行します:

     $ usermod -l _ -d /home/_ -m pi
          
          



    新しい名前としてinn0kentyを使用します。 私の場合、コマンドは次のようになります。

     $ usermod -l inn0kenty -d /home/inn0kenty -m pi
          
          









ステップ5.静的IP



DHCPは私のために機能するので、Raspberry Piをホームネットワークに接続するたびに新しいIPアドレスが与えられますが、これはもちろん私には適していません。 IPを静的にするには、次のことを行う必要があります。

  1. ターミナルに入る

     $ sudo vim /etc/network/interfaces
          
          



    。 開いたファイルで、変更

     iface eth0 inet dhcp
          
          





     iface eth0 inet static address 192.168.0.98 netmask 255.255.255.0 network 192.168.0.0 broadcast 192.168.0.255 gateway 192.168.0.1
          
          



    ネットワークのパラメーターを指定します。 コマンドを使用してネットマスクとブロードキャストを見つけることができます

     $ sudo ifconfig
          
          





    およびゲートウェイを使用して

     $ sudo route -nee
          
          



  2. 次に、sudo rebootコマンドでRaspberry Piを再起動します
  3. ここで、shh経由でRaspberry Piに接続するには、入力する必要があります

     $ ssh inn0kenty@192.168.0.98
          
          







ステップ6. SSHを組み合わせる



このステップでは、ssh接続を単純化し、より安全にする方法を示します。

  1. まず、次のコマンドでssh構成ファイルを開きます。

     $ sudo vim /etc/ssh/sshd_config
          
          



    そして、sshにrootとしてログインし、パスワード認証をオフにするように禁止を設定しました。

     PasswordAuthentication no PermitRootLogin no
          
          



    また、ポートを変更します

     Port 22226 ()
          
          



  2. 次に、Raspberry Piを再起動します

     $ sudo reboot
          
          



  3. ここで、Raspberry Piに接続するには、ポート22226を指定する必要があります

     $ ssh -p 22226 inn0kenty@192.168.0.98
          
          



    しかし、このような長いチームは簡素化および最小化できます。 これを行うには、メインOSで構成ファイルを編集します。 ホームディレクトリで、次の操作を行います。

     $ vim .ssh/config
          
          



    次の行をそこに貼り付けます:

     Host 192.168.0.98 Hostname 192.168.0.98 User inn0kenty Port 22226
          
          





    その後、Raspberry Piに接続するには、ダイヤルするだけです

     $ ssh 192.168.0.98
          
          









ステップ7.外部からRaspberry Piに接続します。



このセクションでは、ローカルネットワークからだけでなく、外部からもsshを介してRaspberry Piに接続する方法を説明します。

外部IPが静的な場合、乾杯、スチームバスを浴びる必要はありません。 外部IPから内部IPにリダイレクトするだけで十分です。

しかし、あなたが、私のように外部IPダイナミックを持っているなら、ダイナミックDNSが私たちの助けになります。

個人的に、私はnoip.comを使用しています 無料ですが、定期的にサイトにアクセスし、提供されたアドレスを引き続き使用することを確認する必要があります。

そこで、そこに登録して、ホストの追加に進みます。

  1. ホスト名に、外部からの接続に使用するアドレスを入力し、他の何も変更せずに[ホストの追加]ボタンをクリックします
  2. ここで、ipが変更されたときにnoipが知っている必要があります。 2つの方法があります。 まず、ルーターがダイナミックドメインネームシステム(DDNS)機能をサポートしている場合は、ルーター設定でアカウント情報とドメイン名を入力するだけです。 その後、ルーターはIPアドレスの変更についてnoipに通知します。 次に、メインコンピューターにプログラムをインストールする必要があります。 Noipには動的DNS更新クライアントがあります。 ここから取ることができます
  3. 次のステップ:外部IPからローカルIPへのリダイレクトを行う必要があります。

    これを行うには、ルーターで[転送]-> [仮想サーバー]に移動し、次のエントリを追加します。

    サービスポート:22226

    内港:22226

    IPアドレス:192.168.0.98

    プロトコル:すべて

  4. 次に、メインOSのssh設定ファイルに外部ログイン情報を追加する必要があります。

    設定ファイルを開きます

     $ vim .ssh/config
          
          



    そしてそこに追加します

     Host _ Hostname _ User inn0kenty Port 22226
          
          



    保存します。

  5. それだけです 自宅からだけでなく、Raspberry Piに接続できるようになりました




ステップ8. HDDを接続する



  1. まず、HDDをマウントするRaspberry Piにフォルダーを作成する必要があります

     $ mkdir hdd
          
          



  2. 次に、ハードドライブをRaspberry Piに接続し、コマンドを入力します

     $ sudo blkid
          
          



    出力は次のようになります。

     /dev/mmcblk0p1: SEC_TYPE="msdos" LABEL="boot" UUID="936C-7154" TYPE="vfat" /dev/mmcblk0p2: UUID="c1398422-7a7c-4863-8a8f-45a1db26b4f2" TYPE="ext4" /dev/sda1: LABEL="Seagate Expansion Drive" UUID="7CD8E7DCD8E792A6" TYPE="ntfs"
          
          



    最後の行は、まさに必要なものです。 UUIDを覚えておいてください。
  3. 次に、ファイルシステムサポートをインストールする必要があります

     $ sudo apt-get install ntfs-3g
          
          



  4. fstabファイルを開きます

     $ sudo vim /etc/fstab
          
          



  5. そこに次の行を追加します。

     UUID="*" ** ntfs-3g rw,force,exec,users 0 0  * -   UUID (  7CD8E7DCD8E792A6)  ** -       (  /home/inn0kenty/hdd)
          
          



  6. Raspberry Piを保存して再起動する
  7. 再起動後、ハードドライブのすべてのファイルとフォルダーがhddフォルダーに表示されます。




ステップ9. SSHFS



  1. メインOS sshfsにインストールする

     $ sudo apt-get install sshfs
          
          



  2. Raspberry Piをマウントするホームディレクトリにフォルダーを作成します。

     $ mkdir pi
          
          



  3. このフォルダーにRaspberry Piをマウントします。

     $ sshfs 192.168.0.98:/home/inn0kenty/hdd pi
          
          



    それだけです ハードドライブからのすべてのファイルは、メインマシンのpiフォルダーにありました。
  4. Raspberry Piをアンマウントするには、コマンドを入力する必要があります

     $ sudo umount pi
          
          



    または

     $ fusermount -u pi
          
          



  5. 外部から同じことを行うには、コマンドを少し変更します。

     $ sshfs _:/home/inn0kenty/hdd pi
          
          



  6. これらのコマンドはメインマシンのfstabで作成できるため、コンピューターの電源を入れるたびにインストールが実行されますが、私にとってはこれは良い選択肢ではありません。 私がラップトップを持っているメインコンピューターと、電源を入れたときのインターネットが常にあるとは限りません。 したがって、1つの短いコマンドでRaspberry Piを簡単にマウントする小さなスクリプトを使用することをお勧めします。

     #!/bin/bash ABSOLUTE_FILENAME=`readlink -e "$0"` #  #      DIRECTORY=`dirname "$ABSOLUTE_FILENAME"` if [ "x$1" = "x-nh" ] || [ "x$1" = "x-nothome" ] ; then sshfs -o nonempty _:/home/inn0kenty/hdd $DIRECTORY # -o nonempty  sshfs       #    else sshfs -o nonempty 192.168.0.98:/home/inn0kenty/hdd $DIRECTORY fi
          
          



    1. このスクリプトをmount.shに保存し、実行可能にします

       $ chmod +x mount.sh
            
            



    2. そして、それをpiフォルダーに入れます

       $ mv mount.sh pi/
            
            



    3. 次に、エイリアスを追加して、1つのコマンドでスクリプトを実行します。 bashrcを開きます(作成されていない場合は作成します)。

       $ vim .bashrc
            
            



      そしてそこに行を追加します

       alias pimount='/home/inn0kenty/pi/mount.sh'
            
            



      もちろん、データを置き換えます。

      bashを保存して再起動します。

      これで、1つのコマンドでRaspberry Piをマウントできます

       $ pimount
            
            



      さらに、-nhまたは-nothomeスイッチを指定すると、Raspberry Piはドメイン名(つまり、 Raspberry Piは、同じLANに接続していなくても最大限に活用できます。

       $ pimount -nh
            
            



      または

       $ pimount -nothome
            
            







ステップ10.大洪水



最後のステップは、急流ロッキングチェアを設置することです。 私はデリュージが好きです。

  1. コマンドを順番に入力します。

     $ sudo apt-get install deluged deluge-webui
          
          



  2. それから

     $ sudo vim /etc/default/deluge-daemon
          
          



    そしてそこに以下を入力します:

     # Configuration for /etc/init.d/deluge-daemon # The init.d script will only run if this variable non-empty. DELUGED_USER="__" # !!!CHANGE THIS!!!! # Should we run at startup? RUN_AT_STARTUP="YES"
          
          



    次に保存して閉じます
  3. そしてする:

     $ sudo vim /etc/init.d/deluge-daemon
          
          



    そしてそこに以下を入力します:

    素晴らしいスクリプト
     #!/bin/sh ### BEGIN INIT INFO # Provides: deluge-daemon # Required-Start: $local_fs $remote_fs # Required-Stop: $local_fs $remote_fs # Should-Start: $network # Should-Stop: $network # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Daemonized version of deluge and webui. # Description: Starts the deluge daemon with the user specified in # /etc/default/deluge-daemon. ### END INIT INFO # Author: Adolfo R. Brandes # Updated by: Jean-Philippe "Orax" Roemer PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin DESC="Deluge Daemon" NAME1="deluged" NAME2="deluge" DAEMON1=/usr/bin/deluged DAEMON1_ARGS="-d" # Consult `man deluged` for more options DAEMON2=/usr/bin/deluge-web DAEMON2_ARGS="" # Consult `man deluge-web` for more options PIDFILE1=/var/run/$NAME1.pid PIDFILE2=/var/run/$NAME2.pid UMASK=022 # Change this to 0 if running deluged as its own user PKGNAME=deluge-daemon SCRIPTNAME=/etc/init.d/$PKGNAME # Exit if the package is not installed [ -x "$DAEMON1" -a -x "$DAEMON2" ] || exit 0 # Read configuration variable file if it is present [ -r /etc/default/$PKGNAME ] && . /etc/default/$PKGNAME # Load the VERBOSE setting and other rcS variables [ -f /etc/default/rcS ] && . /etc/default/rcS # Define LSB log_* functions. # Depend on lsb-base (>= 3.0-6) to ensure that this file is present. . /lib/lsb/init-functions if [ -z "$RUN_AT_STARTUP" -o "$RUN_AT_STARTUP" != "YES" ] then log_warning_msg "Not starting $PKGNAME, edit /etc/default/$PKGNAME to start it." exit 0 fi if [ -z "$DELUGED_USER" ] then log_warning_msg "Not starting $PKGNAME, DELUGED_USER not set in /etc/default/$PKGNAME." exit 0 fi # # Function to verify if a pid is alive # is_alive() { pid=`cat $1` > /dev/null 2>&1 kill -0 $pid > /dev/null 2>&1 return $? } # # Function that starts the daemon/service # do_start() { # Return # 0 if daemon has been started # 1 if daemon was already running # 2 if daemon could not be started is_alive $PIDFILE1 RETVAL1="$?" if [ $RETVAL1 != 0 ]; then rm -f $PIDFILE1 start-stop-daemon --start --background --quiet --pidfile $PIDFILE1 --make-pidfile \ --exec $DAEMON1 --chuid $DELUGED_USER --user $DELUGED_USER --umask $UMASK -- $DAEMON1_ARGS RETVAL1="$?" else is_alive $PIDFILE2 RETVAL2="$?" [ "$RETVAL2" = "0" -a "$RETVAL1" = "0" ] && return 1 fi is_alive $PIDFILE2 RETVAL2="$?" if [ $RETVAL2 != 0 ]; then sleep 2 rm -f $PIDFILE2 start-stop-daemon --start --background --quiet --pidfile $PIDFILE2 --make-pidfile \ --exec $DAEMON2 --chuid $DELUGED_USER --user $DELUGED_USER --umask $UMASK -- $DAEMON2_ARGS RETVAL2="$?" fi [ "$RETVAL1" = "0" -a "$RETVAL2" = "0" ] || return 2 } # # Function that stops the daemon/service # do_stop() { # Return # 0 if daemon has been stopped # 1 if daemon was already stopped # 2 if daemon could not be stopped # other if a failure occurred start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --user $DELUGED_USER --pidfile $PIDFILE2 RETVAL2="$?" start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --user $DELUGED_USER --pidfile $PIDFILE1 RETVAL1="$?" [ "$RETVAL1" = "2" -o "$RETVAL2" = "2" ] && return 2 rm -f $PIDFILE1 $PIDFILE2 [ "$RETVAL1" = "0" -a "$RETVAL2" = "0" ] && return 0 || return 1 } case "$1" in start) [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME1" do_start case "$?" in 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; esac ;; stop) [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME1" do_stop case "$?" in 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; esac ;; restart|force-reload) log_daemon_msg "Restarting $DESC" "$NAME1" do_stop case "$?" in 0|1) do_start case "$?" in 0) log_end_msg 0 ;; 1) log_end_msg 1 ;; # Old process is still running *) log_end_msg 1 ;; # Failed to start esac ;; *) # Failed to stop log_end_msg 1 ;; esac ;; *) echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2 exit 3 ;; esac :
          
          





  4. このスクリプトを実行する権利を付与します。

     $ sudo chmod 755 /etc/init.d/deluge-daemon
          
          



  5. スタートアップに追加:

     $ sudo update-rc.d deluge-daemon defaults
          
          



  6. そして実行:

     $ sudo invoke-rc.d deluge-daemon start
          
          



  7. 次に再起動します。

    192.168.0.98:8112に移動すると、トレントダウンロードのWeb UIにアクセスできます。
  8. Web UIの外部からのアクセスを開きましょう。 これを行うには、リダイレクト->仮想サーバーでルーターに戻り、別のエントリを追加します。

    サービスポート:80

    インナーポート:8112

    IPアドレス:192.168.0.98

    プロトコル:すべて



    保存後、ブラウザのアドレスバーにドメイン名を入力するだけで、Web UIにアクセスできます。





おわりに



私の記事が少なくとも誰かに役立つことを願っています。 ご清聴ありがとうございました。



All Articles