Raspberry Pi가 SD 카드 대신 루트 파일 시스템에 NFS 서버를 사용하도록하려면 어떻게해야합니까?
성능 / 백업 / 개발 목적으로 NFS를 통해 원격 컴퓨터에 루트 파일 시스템을 갖도록 Raspberry Pi를 설정할 수 있기를 원합니다. 어떻게해야합니까?
Raspberry Pi가 SD 카드 대신 루트 파일 시스템에 NFS 서버를 사용하도록하려면 어떻게해야합니까?
성능 / 백업 / 개발 목적으로 NFS를 통해 원격 컴퓨터에 루트 파일 시스템을 갖도록 Raspberry Pi를 설정할 수 있기를 원합니다. 어떻게해야합니까?
답변:
초기 부팅에는 여전히 SD 카드가 필요하지만 그 후에는 / boot 이외의 SD 카드가 필요합니다.
나는 이것을 Linux 컴퓨터에서만 수행했습니다. 이론적으로 NFS 파일 시스템을 내보낼 수있는 모든 시스템에서 가능합니다.
루트 파일 시스템을 준비하는 가장 쉬운 방법은 기존 이미지에서 제공 한 것을 복사하는 것입니다. 공식 데비안 6 이미지 를 시작점으로 사용했습니다 .
루프백 장치를 사용하여 해당 이미지에서 루트 파티션을 마운트하십시오. 루트 파티션의 시작을 위해 이미지에 대한 오프셋이 필요합니다.이 경우 이미지의 두 번째 파티션입니다.
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 #
이미지가 마운트 된 상태에서 루프백 장치를 영원히 사용하지 않도록 영구적 인 위치에 복사 할 수 있습니다. LVM2 볼륨을 만들어 / mnt / rpi-root에 마운트 했으므로 다음과 같이했습니다.
cp -rav / mnt / pi- 루트-루프 / * / 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
있습니다.
이제이 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 스냅 샷, 백업 시스템 등) 에서 파일 시스템을 조작 할 수도 있습니다.
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) 및 기타 미묘한 부분을 제공해야합니다.
/home/user/Documents/raspisRootFolder
및 클라이언트 fstab
는 모든 것을 /
?
/dev/mmcblk0p2 / ext4 defaults,noatime 0 1
에서 언급했다 /etc/fstab
.