NFS 루트로 부팅하도록 Raspberry Pi를 구성하려면 어떻게합니까?


25

Raspberry Pi가 SD 카드 대신 루트 파일 시스템에 NFS 서버를 사용하도록하려면 어떻게해야합니까?

성능 / 백업 / 개발 목적으로 NFS를 통해 원격 컴퓨터에 루트 파일 시스템을 갖도록 Raspberry Pi를 설정할 수 있기를 원합니다. 어떻게해야합니까?


팁이 (/ mnt / rpi-root / etc / network / interfaces)에서 #iface eth0 inet dhcp를 주석으로 처리해 주셔서 감사합니다. 그러한 변화가 없었다면 거의 일주일 동안 첫 NFS 부팅을 할 수 없었습니다. 다른 곳에서는 그 맛을 읽지 못했습니다. 정말 감사합니다

답변:


24

짧은 버전

  1. 루트를 준비하고 NFS 시스템에서 내 보내야합니다.
  2. 이를 사용하려면 초기 부팅을 구성해야합니다

초기 부팅에는 여전히 SD 카드가 필요하지만 그 후에는 / boot 이외의 SD 카드가 필요합니다.

세부

나는 이것을 Linux 컴퓨터에서만 수행했습니다. 이론적으로 NFS 파일 시스템을 내보낼 수있는 모든 시스템에서 가능합니다.

  1. 루트 파일 시스템을 준비하는 가장 쉬운 방법은 기존 이미지에서 제공 한 것을 복사하는 것입니다. 공식 데비안 6 이미지 를 시작점으로 사용했습니다 .

    1. 이미지를 다운로드하고 .zip 파일을 추출하십시오. 이제 debian6-19-04-2012.img가 있어야합니다.
    2. 루프백 장치를 사용하여 해당 이미지에서 루트 파티션을 마운트하십시오. 루트 파티션의 시작을 위해 이미지에 대한 오프셋이 필요합니다.이 경우 이미지의 두 번째 파티션입니다.

      fdisk -l debian6-19-04-2012.img
      
      디스크 debian6-19-04-2012.img : 1949MB, 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 # 
      

      두 번째 파티션은 블록 (또는 섹터) 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 루프, 오프셋 = 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
      빈 데스크탑 등 lib mnt proc sbin selinux sys usr
      부트 개발 홈 미디어 opt root sd srv tmp var
      root @ rapunzel : / tmp / debian6-19-04-2012 #
      
    3. 이미지가 마운트 된 상태에서 루프백 장치를 영원히 사용하지 않도록 영구적 인 위치에 복사 할 수 있습니다. LVM2 볼륨을 만들어 / mnt / rpi-root에 마운트 했으므로 다음과 같이했습니다.

      cp -rav / mnt / pi- 루트-루프 / * / mnt / rpi-root /
      
    4. 이제 파일 시스템을 내 보내야하므로 다음과 같은 줄을 추가해야합니다.

      / 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있습니다.

  2. 이제이 NFS 공유를 사용하여 초기 부팅 및 부팅을 수행하는 SD 카드를 구축해야합니다. 공식 이미지의 첫 번째 파티션을 가져 와서 SD 카드가 / dev / sdx 인 SD 카드에 복사 하여이 작업을 수행했습니다.

    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 스냅 샷, 백업 시스템 등) 에서 파일 시스템을 조작 할 수도 있습니다.

선택 사항

  • / etc / default / rcS에서 RAMRUN 및 RAMLOCK을 yes로 설정하면 / var / run 및 / var / lock이 각각 tmpfs (예 : 램 디스크)로 마운트됩니다. NFS 파일 시스템.
  • ip = dhcp를 사용하는 경우 다음 줄을 주석 처리해야합니다.

    #iface eth0 inet dhcp
    

    초기 부팅 DHCP와 일반적인 이후 DHCP 사이의 스와핑이 다음과 같은 메시지를 발생시키는 상황을 피하기 위해 / etc / network / interfaces (/ mnt / rpi-root / etc / network / interfaces)에서

    nfs : 서버 192.168.1.1이 응답하지 않고 여전히 시도 중

  • 동일한 루트에서 많은 장치를 부팅하려면 동일한 파일에 쓰려고하는 여러 컴퓨터의 문제를 피하기 위해 "local"/ tmp (아마도 tmpfs) 및 기타 미묘한 부분을 제공해야합니다.


이 자세한 튜토리얼에 감사드립니다. 나는 마지막 이미지로 완벽하게 일하고있었습니다. 이제 이틀 전에 출시 된 새 이미지에 대해 정확히 동일한 단계를 수행하려고 할 때 오류가 발생했습니다. fsck.ext4 : / run / rootdev를 열려고하는 동안 해당 장치 나 주소가 없거나 존재하지 않거나 스왑 장치가 있습니까? fsck가 종료 상태로 사망했습니다. 8 제안 사항이 있습니까? 클라우스

현재 확인할 장치에 액세스 할 수 없습니다. 커널과 같은 소리는 nfs 루트 지원없이 빌드 될 수 있습니다.
Flexo

1
해결책을 찾은 것 같습니다. fstab을 변경했습니다. proc / proc proc defaults 0 0 / dev / mmcblk0p1 / boot vfat defaults 0 2 # / dev / mmcblk0p2 / ext4 defaults, 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.