Linux 마운트 NFS 공유

Linux 마운트 NFS 공유

매우 엄격한 제한 사항이 있는 임베디드 장치(mips)에서 Linux를 실행하고 싶습니다.

  • 16MB의 저장 공간
  • 유선 이더넷 없음(Wi-Fi만 가능)

좋은 소식:

  • 작동하는 부트로더가 있습니다(u-부팅)
  • 작동하는 커널도 있습니다(버전 3.10.14 #2 PREEMPT).
  • 작동하는 루트 파일 시스템이 있습니다(리눅스를 시작하고 로그인할 수 있습니다).

이제 문제는 이 하드웨어에서 사용자 응용 프로그램을 실행할 공간이 더 이상 남아 있지 않다는 것입니다. 이것이 바로 NFS로 전환하고 싶은 이유입니다.

여기서는 절차가 확실하지 않습니다.

앞서 언급한 것처럼 부팅 프로세스는 U-boot에 의해 처리됩니다. 하지만 U-boot는 Wi-Fi를 초기화할 수 없습니다. 따라서 이 목적을 위해서는 작은 Linux OS가 필요합니다.

주요 아이디어

  1. U-boot가 커널을 로드하고 시작합니다.
  2. 커널에는 Wi-Fi 칩용 드라이버가 포함되어 있으며 rootfs를 마운트합니다.
  3. rootfs에는 AP에 연결하는 데 필요한 파일(비밀번호, ssid 등)이 포함되어 있습니다.
  4. 연결이 설정되면 NFS는 원격 fs를 ​​/opt 등에 마운트합니다.

루트(/) 파일 시스템을 NFS에 있는 파일 시스템으로 바꾸는 것이 가능합니까? (Wi-Fi 구성이 연결을 시작하는 데 필요한 이 파티션에 저장되어 있음에도 불구하고)

업데이트

mips용 nfs 클라이언트 프로그램을 성공적으로 컴파일했으며 이제 장치는 nfs를 통해 일부 디렉토리에 새 rootfs를 마운트할 수 있습니다.피벗_루트실패:

# mount -o nolock IPADDRESS:/srv/fs /tmp/nfs
# ls /tmp/nfs
bin
etc
...
# ls /tmp
nfs
old
# pivot_root /tmp/nfs /tmp/old
pivot_root: Invalid argument
# pivot_root
BusyBox v1.29.0.git (2018-06-23 20:08:52 CEST) multi-call binary.

Usage: pivot_root NEW_ROOT PUT_OLD

Move the current root file system to PUT_OLD and make NEW_ROOT the new root file system

답변1

그렇습니다. 기본적으로 Linux PC에서 initramfs가 수행하는 것과 동일한 작업을 수행하고 있습니다. initramfs는 메모리 내 /rootfs의 일반 루트 파일 시스템처럼 시작됩니다. 그런 다음 /mnt 또는 /real 어딘가에 실제 루트 파일 시스템을 마운트합니다.

(이것은 실제로 커널의 내장 NFS 지원이 불충분한 상황(예: Kerberos가 필요한 경우)에서 서버에 NFS 루트를 구현하는 데 자주 사용됩니다.)

  • 중요한 단계는피벗_루트()syscall을 사용하여 현재 루트를 새로 마운트된 루트로 교체합니다. 호출 후 원래 rootfs는 여전히 마운트된 상태로 유지되지만 더 이상 /에 있지 않습니다. 호출은 마운트를 "새" rootfs의 하위 디렉터리로 이동합니다.

    또 한있다pivot_root프로그램Busybox(util-linux도 포함)에 있으며 초기화 프로세스가 쉘스크립트인 경우(종종 그렇듯이) 사용할 수 있습니다. 링크된 util-linux 매뉴얼 페이지에는 사용법 예제가 있습니다.

  • 또는에 따르면리누스, 간단히 말해서 충분할 수 있습니다chroot()새로 마운트된 루트에 추가합니다. 즉, 원래 루트에 더 이상 액세스할 필요가 없는 경우입니다. chroot이를 위한 명령줄 도구도 있습니다 .


참고: 그렇지 않습니다.필요이를 달성하기 위해 initramfs를 구축하고 사용합니다. 함수는 initrd 이미지에서 호출되는지 실제 rootfs에서 호출되는지 상관하지 않습니다.

switch_root그러나 "일반" initramfs는 임시 메모리 내 압축이 풀린 파일 시스템에서 실행되기 때문에 새 루트로 전환하기 직전에 모든 initramfs 파일을 삭제하는 것과 같은 도구에서는 일반적입니다 . 그러나 온디스크 파일 시스템에서 직접 부팅하는 경우에는 아마도~ 아니다원하는 것이므로 도구를 사용하지 switch_root말고 pivot_root.

관련 정보