NFSルートで起動するようにRaspberry Piを構成するにはどうすればよいですか?


25

Raspberry Piで、SDカードの代わりにルートファイルシステムにNFSサーバーを使用するにはどうすればよいですか?

パフォーマンス/バックアップ/開発の目的で、Raspberry Piをセットアップして、NFSを介してリモートマシンにルートファイルシステムを配置できるようにしたいと思います。これどうやってするの?


(/ mnt / rpi-root / etc / network / interfaces)から#iface eth0 inet dhcpをコメントアウトするヒントをありがとう。その変更がなければ、ほぼ1週間試してみても、最初に動作するNFSブートを取得できませんでした。それ以外の場所では、この情報を読んでいませんでした。本当にありがとうございました

回答:


24

ショートバージョン

  1. ルートを準備して、NFSマシンからエクスポートする必要があります
  2. それを使用するには、初期ブートを設定する必要があります

初期段階のブートにはまだSDカードが必要ですが、その後は/ boot以外はSDカードを必要としません。

詳細

これはLinuxマシンでのみ行いました。理論的には、NFSファイルシステムをエクスポートできるマシンであれば可能です。

  1. ルートファイルシステムを準備する最も簡単な方法は、既存のイメージによって提供されるものをコピーすることです。私は出発点として公式のDebian 6イメージを使用しました:

    1. イメージをダウンロードし、.zipファイルを抽出します。debian6-19-04-2012.imgがどこかにあるはずです。
    2. ループバックデバイスを使用して、そのイメージからルートパーティションをマウントします。ルートパーティションを開始するには、イメージへのオフセットが必要です。この例では、イメージの2番目のパーティションです。

      fdisk -l debian6-19-04-2012.img
      
      ディスクdebian6-19-04-2012.img:1949 MB、1949999616バイト
      4ヘッド、32セクター/トラック、29754シリンダー、合計3808593セクター
      単位= 1 * 512 = 512バイトのセクター
      セクターサイズ(論理/物理):512バイト/ 512バイト
      I / Oサイズ(最小/最適):512バイト/ 512バイト
      ディスク識別子:0x000ee283
      
      
      デバイスブートスタートエンドブロックIDシステム
      debian6-19-04-2012.img1 2048 155647 76800 c W95 FAT32(LBA)
      debian6-19-04-2012.img2 157696 3414015 1628160 83 Linux
      debian6-19-04-2012.img3 3416064 3807231 195584 82 Linuxスワップ/ Solaris
      root @ rapunzel:/ tmp / debian6-19-04-2012# 
      

      2番目のパーティションはブロック(またはセクター)157696から始まるため、オフセットは(512 * 157696)= 80740352です。

      root @ rapunzel:/ tmp / debian6-19-04-2012#mkdir / mnt / pi-root-loop
      root @ rapunzel:/ tmp / debian6-19-04-2012#mount -o loop、offset = 80740352 /tmp/debian6-19-04-2012/debian6-19-04-2012.img / mnt / pi-root-ループ
      root @ rapunzel:/ tmp / debian6-19-04-2012#ls / mnt / pi-root-loop
      binデスクトップなどlib mnt proc sbin selinux sys usr
      ブートdevホームメディアoptルートsd srv tmp var
      root @ rapunzel:/ tmp / debian6-19-04-2012#
      
    3. イメージをマウントしたら、ループバックデバイスを永久に使用することを避けるために、おそらくこれをより永続的な場所にコピーする必要があります。LVM2ボリュームを作成し、/ mnt / rpi-rootにマウントしたので、次のようにしました。

      cp -rav / mnt / pi-root-loop / * / mnt / rpi-root /
      
    4. ここでファイルシステムをエクスポートする必要があるため、次のような行を追加する必要があります。

      / mnt / rpi-root 192.168.1.2(rw、no_root_squash)
      

      NFSサーバーの/ etc / exportsに移動します。ここで、192.168.1.2はRaspberry Piのアドレスです。その実行exportfs -rvを追加して、エクスポートのリストを再読み取りした後。(個々のホストではなく、ワイルドカード/サブネットを含むより高度なオプションについては、exports(5)を参照してください)

    または、この手順をスキップして、のようなものを使用してゼロからルートファイルシステムを構築することもできますmultistrap

  2. ここで、初期段階のブートを行い、このNFS共有を使用してブートするSDカードを作成する必要があります。これを行うには、公式イメージの最初のパーティションをSDカードにコピーします。SDカードは/ dev / sdxです。

    dd if = / tmp / debian6-19-04-2012 / debian6-19-04-2012.img of = / dev / sdx bs = 512 count = 155647
    

    そして、これはfdiskでパーティションテーブルを編集して最初のパーティションをコピーしただけなので、コピーしなかった2つのパーティションを削除します。

    その後、SDカードからパーティションをマウントし、そこからファイルcmdline.txtを編集して読み取りました。

    dwc_otg.lpm_enable = 0 console = ttyAMA0,115200 kgdboc = ttyAMA0,115200 console = tty1 root = / dev / nfs nfsroot = 192.168.1.1:/ mnt / rpi-root ip = dhcp rootfstype = nfs
    

    ここで、192.168.1.1はNFSサーバーのアドレスです。DHCPを使用したくない場合は、IPアドレスを別の方法で設定できます。詳細については、このドキュメントを参照してください。

    これが完了したら、SDカードをアンマウントし、NFSルートでRapsberry Piを起動できます。また、サーバー側からファイルシステムを操作することも、他のNFSクライアントを適切に操作することもできます(例:QEMU + binfmt_misc、LVMスナップショット、バックアップシステムなど)

オプションのもの

  • / etc / default / rcSでRAMRUNとRAMLOCKをyesに設定すると、/ var / runと/ var / lockがそれぞれtmpfs(つまりramdisk)としてマウントされます。 NFSファイルシステム。
  • ip = dhcpを使用している場合、おそらく次の行をコメントアウトする必要があります。

    #iface eth0 inet dhcp
    

    / etc / network / interfaces(/ mnt / rpi-root / etc / network / interfaces)で、初期ブートDHCPと通常のDHCPとの間でスワップすると次のようなメッセージが表示される状況を回避します。

    nfs:サーバー192.168.1.1が応答しない、まだ試行中

  • 同じルートから多くのデバイスを起動したい場合は、複数のマシンが同じファイルに書き込もうとする問題を回避するために、「ローカル」/ tmp(おそらくtmpfs)およびその他の微妙な点を提供する必要があります。


この詳細なチュートリアルをありがとう。私は最後の画像で完璧に働いていました。2日前にリリースされた新しいイメージに対してまったく同じ手順を実行しようとしたときに、エラーに遭遇しました。ルートファイルシステムのチェックは次のエラーで失敗します:fsck.ext4:/ run / rootdevを開こうとしているときにそのようなデバイスまたはアドレスがありません。fsckは終了ステータス8で死亡しました。クラウス

現在、確認するデバイスにアクセスできません。カーネルのようなサウンドは、nfsルートのサポートなしでビルドされる場合があります。
フレキソ

1
私は解決策を見つけたようです。私はfstabを変更しました:proc / proc proc defaults 0 0 / dev / mmcblk0p1 / boot vfat defaults 0 2#/ dev / mmcblk0p2 / ext4 defaults、noatime 0 1質問はなぜそれが前のイメージで動作するために使用されたのですか?S05checkroot.shの実行に失敗しました。ところで:スワップパーティションを管理する方法はありますか?必要ですか?

それを半分にして、NFSだけを全部することは可能ですか?すなわち。ホストはエクスポートし/home/user/Documents/raspisRootFolder、クライアントfstabは全体をマウントし/ますか?
プーク

素晴らしい答え、失敗したSDカードから私を救った。すべてをNASサーバーに移動しました。/dev/mmcblk0p2 / ext4 defaults,noatime 0 1からコメントアウトしましたが/etc/fstab、そのままにしておくと問題が発生せずに失敗すると思います。
TomG14年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.