Answers:
您仍然需要SD卡才能进行早期引导,但是之后,除了/ boot以外,什么都不需要SD卡。
我仅在Linux机器上完成了此操作。从理论上讲,虽然可以在任何可以导出NFS文件系统的计算机上使用。
准备根文件系统的最简单方法是复制现有映像提供的文件系统。我以Debian 6官方图片作为起点:
使用回送设备从该映像挂载根分区。您需要在映像中添加偏移量以作为根分区的开始,在这种情况下,它是映像中的第二个分区:
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 swap / Solaris root @ rapunzel:/ tmp / debian6-19-04-2012#
第二个分区从块(或扇区)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 引导开发者家庭媒体选择root 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
。
现在,我们需要构建一个SD卡,以使用此NFS共享进行早期启动和引导。我通过将官方映像的第一个分区复制到SD卡(其中SD卡为/ dev / sdx)来实现此目的:
dd if = / tmp / debian6-19-04-2012 / debian6-19-04-2012.img of = / dev / sdx bs = 512 count = 155647
然后,因为这仅复制了第一个分区,所以使用fdisk编辑分区表以删除两个我们没有复制的分区。
之后,我从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
,但我认为,如果你离开它,它会失败,而不会造成任何问题。