Raspberry Piで、SDカードの代わりにルートファイルシステムにNFSサーバーを使用するにはどうすればよいですか?
パフォーマンス/バックアップ/開発の目的で、Raspberry Piをセットアップして、NFSを介してリモートマシンにルートファイルシステムを配置できるようにしたいと思います。これどうやってするの?
Raspberry Piで、SDカードの代わりにルートファイルシステムにNFSサーバーを使用するにはどうすればよいですか?
パフォーマンス/バックアップ/開発の目的で、Raspberry Piをセットアップして、NFSを介してリモートマシンにルートファイルシステムを配置できるようにしたいと思います。これどうやってするの?
回答:
初期段階のブートにはまだSDカードが必要ですが、その後は/ boot以外はSDカードを必要としません。
これはLinuxマシンでのみ行いました。理論的には、NFSファイルシステムをエクスポートできるマシンであれば可能です。
ルートファイルシステムを準備する最も簡単な方法は、既存のイメージによって提供されるものをコピーすることです。私は出発点として公式のDebian 6イメージを使用しました:
ループバックデバイスを使用して、そのイメージからルートパーティションをマウントします。ルートパーティションを開始するには、イメージへのオフセットが必要です。この例では、イメージの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#
イメージをマウントしたら、ループバックデバイスを永久に使用することを避けるために、おそらくこれをより永続的な場所にコピーする必要があります。LVM2ボリュームを作成し、/ mnt / rpi-rootにマウントしたので、次のようにしました。
cp -rav / mnt / pi-root-loop / * / mnt / rpi-root /
ここでファイルシステムをエクスポートする必要があるため、次のような行を追加する必要があります。
/ 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
。
ここで、初期段階のブートを行い、この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スナップショット、バックアップシステムなど)
ip = dhcpを使用している場合、おそらく次の行をコメントアウトする必要があります。
#iface eth0 inet dhcp
/ etc / network / interfaces(/ mnt / rpi-root / etc / network / interfaces)で、初期ブートDHCPと通常のDHCPとの間でスワップすると次のようなメッセージが表示される状況を回避します。
nfs:サーバー192.168.1.1が応答しない、まだ試行中
同じルートから多くのデバイスを起動したい場合は、複数のマシンが同じファイルに書き込もうとする問題を回避するために、「ローカル」/ tmp(おそらくtmpfs)およびその他の微妙な点を提供する必要があります。
/home/user/Documents/raspisRootFolder
、クライアントfstab
は全体をマウントし/
ますか?
/dev/mmcblk0p2 / ext4 defaults,noatime 0 1
からコメントアウトしましたが/etc/fstab
、そのままにしておくと問題が発生せずに失敗すると思います。