Làm cách nào để định cấu hình Raspberry Pi để khởi động với root NFS?


25

Làm cách nào để Raspberry Pi sử dụng máy chủ NFS cho hệ thống tập tin gốc, thay vì thẻ SD?

Tôi muốn có thể thiết lập Raspberry Pi của mình để có hệ thống tệp gốc trên máy từ xa thông qua NFS cho mục đích hiệu năng / sao lưu / phát triển. Tôi có thể làm cái này như thế nào?


Cảm ơn rất nhiều về mẹo để nhận xét #iface eth0 inet dhcp từ (/ mnt / rpi-root / etc / network / giao diện). Nếu không có sự thay đổi đó, tôi đã không thể có được khởi động NFS hoạt động đầu tiên trong gần một tuần thử. Không đọc mẩu tin đó ở bất cứ nơi nào khác. Cảm ơn rất nhiều

Câu trả lời:


24

Phiên bản ngắn

  1. Bạn cần chuẩn bị một root và xuất nó từ máy NFS
  2. Bạn cần cấu hình khởi động giai đoạn đầu để sử dụng

Bạn vẫn sẽ cần thẻ SD để khởi động ở giai đoạn đầu, nhưng sau đó, không có gì ngoại trừ / boot sẽ cần thẻ SD.

Chi tiết

Tôi chỉ thực hiện điều này trên máy Linux. Về lý thuyết, có thể trên bất kỳ máy nào có thể xuất các hệ thống tệp NFS.

  1. Cách dễ nhất để chuẩn bị một hệ thống tập tin gốc là sao chép một hệ thống được cung cấp bởi các hình ảnh hiện có. Tôi đã sử dụng hình ảnh Debian 6 chính thức làm điểm khởi đầu:

    1. Tải về hình ảnh, giải nén tập tin .zip. Bây giờ bạn sẽ có debian6-19-04-2012.img ở đâu đó
    2. Gắn kết phân vùng gốc từ hình ảnh đó bằng thiết bị loopback. Bạn sẽ cần phần bù vào hình ảnh để bắt đầu phân vùng gốc, trong trường hợp này là phân vùng thứ hai trong ảnh:

      fdisk -l debian6-19-04-2012.img
      
      Đĩa debian6-19-04-2012.img: 1949 MB, 1949999616 byte
      4 đầu, 32 ngành / theo dõi, 29754 xi lanh, tổng số 3808593 ngành
      Đơn vị = các lĩnh vực 1 * 512 = 512 byte
      Kích thước ngành (logic / vật lý): 512 byte / 512 byte
      Kích thước I / O (tối thiểu / tối ưu): 512 byte / 512 byte
      Định danh đĩa: 0x000ee283
      
      
      Khởi động thiết bị Khối kết thúc khối Id Hệ thống
      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 Trao đổi Linux / Solaris
      root @ rapunzel: / tmp / debian6-19-04-2012 # 
      

      Phân vùng thứ hai bắt đầu tại khối (hoặc sector) 157696 nên phần bù là (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- vòng lặp
      root @ rapunzel: / tmp / debian6-19-04-2012 # ls / mnt / pi-root-loop
      bin Máy tính để bàn vv lib mnt Proc sbin selinux sys usr
      boot dev home media opt root sd srv tmp var
      root @ rapunzel: / tmp / debian6-19-04-2012 #
      
    3. Với hình ảnh được gắn, có lẽ bạn muốn sao chép nó ở đâu đó lâu dài hơn để tránh sử dụng thiết bị loopback mãi mãi. Tôi đã tạo một khối LVM2 và gắn nó ở / mnt / rpi-root, vì vậy tôi đã làm:

      cp -rav / mnt / pi-root-loop / * / mnt / rpi-root /
      
    4. Chúng ta cần xuất hệ thống tập tin ngay bây giờ, vì vậy chúng ta cần thêm một dòng như:

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

      vào / etc / export trên máy chủ NFS, trong đó 192.168.1.2 là địa chỉ của Raspberry Pi. Sau khi thêm mà chạy exportfs -rvđể đọc lại danh sách xuất khẩu. (Xem xuất (5) để biết các tùy chọn nâng cao hơn bao gồm ký tự đại diện / mạng con thay vì máy chủ riêng lẻ)

    Bạn có thể thay thế bỏ qua bước này và xây dựng một hệ thống tập tin gốc từ đầu bằng cách sử dụng một cái gì đó như multistrap.

  2. Bây giờ chúng ta cần xây dựng một thẻ SD thực hiện khởi động và khởi động giai đoạn đầu bằng cách sử dụng chia sẻ NFS này. Tôi đã làm điều này bằng cách lấy phân vùng đầu tiên của hình ảnh chính thức và sao chép nó vào thẻ SD, trong đó thẻ SD là / dev / sdx:

    dd if = / tmp / debian6-19-04-2012 / debian6-19-04-2012.img của = / dev / sdx bs = 512 đếm = 155647
    

    và sau đó vì điều này chỉ sao chép phân vùng đầu tiên chỉnh sửa bảng phân vùng bằng fdisk để xóa hai phân vùng mà chúng tôi không sao chép.

    Sau đó, tôi gắn phân vùng từ thẻ SD và chỉnh sửa tệp cmdline.txt từ đó để đọc:

    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 rootfst
    

    Trong đó 192.168.1.1 là địa chỉ của máy chủ NFS. Nếu bạn không muốn sử dụng DHCP, bạn có thể đặt các cách thay thế địa chỉ IP, xem tài liệu này để biết thêm chi tiết.

    Khi điều này được thực hiện, bạn có thể ngắt kết nối thẻ SD và khởi động Rapsberry Pi của bạn bằng root NFS. Bạn cũng có thể thao tác hệ thống tệp từ phía máy chủ hoặc các máy khách NFS khác khi bạn thấy phù hợp (ví dụ: QEMU + binfmt_misc , ảnh chụp nhanh LVM, hệ thống sao lưu, v.v.)

Những thứ tùy chọn

  • Đặt RAMRUN và RAMLOCK thành có trong / etc / default / rcS khiến / var / run và / var / lock tương ứng được gắn dưới dạng tmpfs (tức là ramdisk) - điều này có thể đáng giá, ngay cả khi bạn chỉ có một thiết bị khởi động từ Hệ thống tập tin NFS.
  • Nếu bạn đang sử dụng ip = dhcp, có lẽ bạn cần phải nhận xét dòng này:

    #iface eth0 inet dhcp
    

    trong / etc / mạng / giao diện (/ mnt / rpi-root / etc / network / giao diện) để tránh tình huống hoán đổi giữa DHCP khởi động sớm và thông thường sau này gây ra một thông báo như:

    nfs: máy chủ 192.168.1.1 không phản hồi, vẫn đang thử

  • Nếu bạn muốn khởi động nhiều thiết bị từ cùng một gốc, bạn sẽ cần phải cung cấp "cục bộ" / tmp (có thể là tmpfs) và các phần phụ khác để tránh sự cố với nhiều máy đang cố ghi vào cùng một tệp.


cảm ơn vì hướng dẫn chi tiết này Tôi đã làm việc hoàn hảo với hình ảnh cuối cùng. Bây giờ khi tôi cố gắng làm theo chính xác các bước tương tự cho hình ảnh mới được phát hành hai ngày trước, tôi đã gặp lỗi. Kiểm tra hệ thống tập tin gốc không thành công với lỗi sau: fsck.ext4: Không có thiết bị hoặc địa chỉ như vậy trong khi cố gắng mở / chạy / rootdev Có thể không tồn tại hoặc trao đổi thiết bị? fsck chết với trạng thái thoát 8 Có đề xuất nào không? Klaus

Tôi không có quyền truy cập vào một thiết bị để kiểm tra ngay bây giờ. Âm thanh như kernel có thể được xây dựng mà không cần hỗ trợ root nfs.
Flexo

1
Có vẻ như tôi đã tìm thấy giải pháp. Tôi đã thay đổi fstab: Proc / Proc Proc mặc định 0 0 / dev / mmcblk0p1 / boot vfat mặc định 0 2 # / dev / mmcblk0p2 / ext4 mặc định, noatime 0 1 Câu hỏi là tại sao nó được sử dụng để làm việc với hình ảnh trước đó. Nó chỉ thất bại khi thực hiện: S05checkroot.sh. BTW: Bạn có biết cách quản lý phân vùng trao đổi không. Chúng ta có cần nó không?

Có thể một nửa ass nó và chỉ NFS toàn bộ? I E. xuất khẩu máy chủ /home/user/Documents/raspisRootFoldervà khách hàng fstabchỉ gắn kết toàn bộ tại /?
puk

Câu trả lời tuyệt vời, đã cứu tôi ra khỏi thẻ SD bị lỗi; chuyển toàn bộ lên máy chủ NAS của tôi. Tôi cũng đã nhận xét /dev/mmcblk0p2 / ext4 defaults,noatime 0 1từ /etc/fstab, mặc dù tôi nghĩ rằng nó sẽ thất bại mà không gây ra vấn đề gì nếu bạn để nó vào.
TomG
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.