ฉันจะกำหนดค่า Raspberry Pi ให้บู๊ตด้วยรูท NFS ได้อย่างไร?


25

ฉันจะทำให้ Raspberry Pi ของฉันใช้เซิร์ฟเวอร์ NFS สำหรับระบบไฟล์รูทแทนที่จะเป็นการ์ด SD ได้อย่างไร

ฉันต้องการตั้งค่า Raspberry Pi ของฉันให้มีระบบไฟล์รูทบนเครื่องระยะไกลผ่าน NFS เพื่อวัตถุประสงค์ด้านประสิทธิภาพ / สำรอง / พัฒนา ฉันจะทำสิ่งนี้ได้อย่างไร


ขอบคุณมากสำหรับเคล็ดลับในการแสดงความคิดเห็น #iface eth0 inet dhcp จาก (/ mnt / rpi-root / etc / network / interfaces) หากไม่มีการเปลี่ยนแปลงฉันก็ไม่สามารถเริ่มการบู๊ต NFS ครั้งแรกได้เป็นเวลาเกือบหนึ่งสัปดาห์ ไม่ได้อ่านชิ้นอาหารอันโอชะที่อื่น ขอบคุณมาก

คำตอบ:


24

รุ่นสั้น ๆ

  1. คุณต้องเตรียมรูทและส่งออกจากเครื่อง NFS
  2. คุณต้องกำหนดค่าการเริ่มต้นระบบก่อนเพื่อใช้สิ่งนั้น

คุณจะต้องใช้การ์ด SD สำหรับการบู๊ตในช่วงแรก แต่หลังจากนั้นไม่มีอะไรยกเว้น / การบู๊ตจะต้องใช้การ์ด SD

รายละเอียด

ฉันทำสิ่งนี้บนเครื่อง Linux เท่านั้น ในทางทฤษฎีมันเป็นไปได้ในเครื่องใด ๆ ที่สามารถส่งออกระบบไฟล์ NFS ได้

  1. วิธีที่ง่ายที่สุดในการเตรียมระบบไฟล์รูทคือการคัดลอกระบบไฟล์ที่มีอยู่ในรูปภาพ ฉันใช้ภาพ Debian 6 อย่างเป็นทางการเป็นจุดเริ่มต้นของฉัน:

    1. ดาวน์โหลดรูปภาพแตกไฟล์. zip ตอนนี้คุณควรมี debian6-19-04-2012.img อยู่ที่ไหนสักแห่ง
    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
      
      
      อุปกรณ์เริ่มต้นเริ่มระบบ 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 #
      
    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)
      

      ลงใน / etc / exports บนเซิร์ฟเวอร์ NFS โดยที่ 192.168.1.2 เป็นที่อยู่ของ Raspberry Pi หลังจากเพิ่มการเรียกใช้นั้นexportfs -rvเพื่ออ่านรายการการส่งออกอีกครั้ง (ดูการส่งออก (5)สำหรับตัวเลือกขั้นสูงเพิ่มเติมรวมถึงไวด์การ์ด / ซับเน็ตแทนการโฮสต์แต่ละรายการ)

    multistrapหรือคุณอาจจะข้ามขั้นตอนนี้และสร้างระบบแฟ้มรากจากรอยขีดข่วนใช้สิ่งที่ต้องการ

  2. ตอนนี้เราจำเป็นต้องสร้างการ์ด 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, ระบบสำรอง ฯลฯ )

สิ่งที่เป็นตัวเลือก

  • การตั้งค่า RAMRUN และ RAMLOCK เป็น yes ใน / etc / default / rcS เป็นสาเหตุให้ / var / run และ / var / lock ตามลำดับเพื่อติดตั้งเป็น tmpfs (เช่น ramdisk) - นี่อาจจะคุ้มค่าแม้ว่าคุณจะมีเพียงหนึ่งอุปกรณ์ที่บูทจาก ระบบไฟล์ NFS
  • หากคุณใช้ ip = dhcp คุณอาจต้องแสดงความคิดเห็นในบรรทัด:

    #iface eth0 inet dhcp
    

    ใน / etc / network / interfaces (/ mnt / rpi-root / etc / network / interfaces) เพื่อหลีกเลี่ยงสถานการณ์ที่การสลับระหว่าง DHCP สำหรับการบูทก่อนหน้าและปกติภายหลังจะทำให้เกิดข้อความดังนี้:

    nfs: เซิร์ฟเวอร์ 192.168.1.1 ไม่ตอบสนองยังคงพยายาม

  • หากคุณต้องการบู๊ตอุปกรณ์จำนวนมากจากรูทเดียวกันคุณจะต้องจัดเตรียม "โลคัล" / tmp (อาจเป็น tmpfs) และรายละเอียดปลีกย่อยอื่น ๆ เพื่อหลีกเลี่ยงปัญหากับหลาย ๆ เครื่องที่พยายามเขียนลงไฟล์เดียวกัน


ขอบคุณสำหรับการกวดวิชารายละเอียดนี้ ฉันทำงานได้อย่างสมบูรณ์แบบกับภาพสุดท้าย ตอนนี้เมื่อฉันพยายามทำตามขั้นตอนเดียวกันทุกประการสำหรับภาพใหม่ที่เผยแพร่เมื่อสองวันก่อนฉันพบข้อผิดพลาด การตรวจสอบระบบไฟล์รูทล้มเหลวโดยมีข้อผิดพลาดดังต่อไปนี้: fsck.ext4: ไม่มีอุปกรณ์หรือที่อยู่ดังกล่าวขณะที่พยายามเปิด / run / rootdev อาจเป็นไปได้ว่าอุปกรณ์ไม่มีอยู่หรือแลกเปลี่ยน fsck ตายด้วยสถานะออก 8 ข้อเสนอแนะใด? Klaus

ฉันไม่สามารถเข้าถึงอุปกรณ์เพื่อตรวจสอบได้ในขณะนี้ เสียงเหมือนเคอร์เนลอาจถูกสร้างขึ้นโดยไม่รองรับรูท nfs
เฟล็กโซ

1
ดูเหมือนว่าฉันได้พบวิธีแก้ปัญหา ฉันได้แก้ไข fstab: ค่าเริ่มต้นของ proc / proc 0 0 / dev / mmcblk0p1 / boot ค่าเริ่มต้น vfat 0 2 # / dev / mmcblk0p2 / ค่าเริ่มต้น ext4, noatime 0 1 คำถามคือทำไมมันใช้กับภาพก่อนหน้า มันล้มเหลวในการดำเนินการ: S05checkroot.sh BTW: คุณมีความคิดวิธีจัดการพาร์ติชั่นสว็อปไหม เราต้องการมันไหม

เป็นไปได้หรือไม่ที่จะแบ่งครึ่งและใช้ NFS กับทุกสิ่ง? กล่าวคือ การส่งออกของโฮสต์/home/user/Documents/raspisRootFolderและของลูกค้าfstabเพียงแค่เมาท์สิ่งทั้งหมดที่/?
puk

คำตอบที่ดีมากประกันตัวฉันจากการ์ด SD ที่ล้มเหลว ย้ายสิ่งทั้งหมดไปยังเซิร์ฟเวอร์ NAS ของฉัน ฉันยังออกความเห็น/dev/mmcblk0p2 / ext4 defaults,noatime 0 1จาก/etc/fstabแต่ฉันคิดว่ามันจะล้มเหลวไม่ก่อให้เกิดปัญหาใด ๆ ถ้าคุณปล่อยให้มันอยู่ใน.
TomG
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.