ฉันจะทำให้ Raspberry Pi ของฉันใช้เซิร์ฟเวอร์ NFS สำหรับระบบไฟล์รูทแทนที่จะเป็นการ์ด SD ได้อย่างไร
ฉันต้องการตั้งค่า Raspberry Pi ของฉันให้มีระบบไฟล์รูทบนเครื่องระยะไกลผ่าน NFS เพื่อวัตถุประสงค์ด้านประสิทธิภาพ / สำรอง / พัฒนา ฉันจะทำสิ่งนี้ได้อย่างไร
ฉันจะทำให้ Raspberry Pi ของฉันใช้เซิร์ฟเวอร์ NFS สำหรับระบบไฟล์รูทแทนที่จะเป็นการ์ด SD ได้อย่างไร
ฉันต้องการตั้งค่า Raspberry Pi ของฉันให้มีระบบไฟล์รูทบนเครื่องระยะไกลผ่าน NFS เพื่อวัตถุประสงค์ด้านประสิทธิภาพ / สำรอง / พัฒนา ฉันจะทำสิ่งนี้ได้อย่างไร
คำตอบ:
คุณจะต้องใช้การ์ด SD สำหรับการบู๊ตในช่วงแรก แต่หลังจากนั้นไม่มีอะไรยกเว้น / การบู๊ตจะต้องใช้การ์ด 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 อุปกรณ์เริ่มต้นเริ่มระบบ End Ids 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 ราก @ Rapunzel: / tmp / debian6-19-04-2012 #
พาร์ติชั่นที่สองเริ่มที่ block (หรือเซกเตอร์) 157696 ดังนั้น offset คือ (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 สื่อที่ใช้ในการบูตบ้านตัวเลือก opt sd sd srv tmp var ราก @ 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)
ลงใน / etc / exports บนเซิร์ฟเวอร์ NFS โดยที่ 192.168.1.2 เป็นที่อยู่ของ Raspberry Pi หลังจากเพิ่มการเรียกใช้นั้นexportfs -rvเพื่ออ่านรายการการส่งออกอีกครั้ง (ดูการส่งออก (5)สำหรับตัวเลือกขั้นสูงเพิ่มเติมรวมถึงไวด์การ์ด / ซับเน็ตแทนการโฮสต์แต่ละรายการ)
multistrapหรือคุณอาจจะข้ามขั้นตอนนี้และสร้างระบบแฟ้มรากจากรอยขีดข่วนใช้สิ่งที่ต้องการ
ตอนนี้เราจำเป็นต้องสร้างการ์ด SD ที่จะทำการบูทและบู๊ตในระยะเริ่มต้นโดยใช้ NFS นี้ร่วมกัน ฉันทำสิ่งนี้โดยการแบ่งพาร์ติชั่นแรกของอิมเมจอย่างเป็นทางการและคัดลอกไปยังการ์ด SD ที่ SD card คือ / dev / sdx:
วันที่ถ้า = / tmp / debian6-19-04-2012 / debian6-19-04-2012.img ของ = / dev / sdx bs = 512 จำนวน = 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 และบูต Rapsberry Pi ของคุณด้วยรูท NFS คุณยังสามารถจัดการระบบไฟล์จากฝั่งเซิร์ฟเวอร์หรือไคลเอนต์ NFS อื่น ๆ ตามที่เห็นสมควร (เช่นQEMU + binfmt_misc , สแน็ปช็อต LVM, ระบบสำรอง ฯลฯ )
หากคุณใช้ ip = dhcp คุณอาจต้องแสดงความคิดเห็นในบรรทัด:
#iface eth0 inet dhcp
ใน / etc / network / interfaces (/ mnt / rpi-root / etc / network / interfaces) เพื่อหลีกเลี่ยงสถานการณ์ที่การสลับระหว่าง DHCP สำหรับการบูทก่อนหน้าและปกติภายหลังจะทำให้เกิดข้อความดังนี้:
nfs: เซิร์ฟเวอร์ 192.168.1.1 ไม่ตอบสนองยังคงพยายาม
หากคุณต้องการบู๊ตอุปกรณ์จำนวนมากจากรูทเดียวกันคุณจะต้องจัดเตรียม "โลคัล" / tmp (อาจเป็น tmpfs) และรายละเอียดปลีกย่อยอื่น ๆ เพื่อหลีกเลี่ยงปัญหากับหลาย ๆ เครื่องที่พยายามเขียนลงไฟล์เดียวกัน
/home/user/Documents/raspisRootFolderและของลูกค้าfstabเพียงแค่เมาท์สิ่งทั้งหมดที่/?
/dev/mmcblk0p2 / ext4 defaults,noatime 0 1จาก/etc/fstabแต่ฉันคิดว่ามันจะล้มเหลวไม่ก่อให้เกิดปัญหาใด ๆ ถ้าคุณปล่อยให้มันอยู่ใน.