NFS (Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block) 에러 뜨는 경우 해결 방법

보통 임베디드 장비를 디버깅할 때, nfs를 이용하여 리눅스에 설정된 특정 디렉토리를 이용한다. 이때, nfs의 서버를 리눅스로 설정 해야 하는데, 설정 관련 내용은 이 포스팅에서 정리하지 않겠다.

그럼, 이 포스팅을 쓰는 이유는 무엇이냐.. 가끔씩 제목에 쓴 것처럼 Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block 라는 에러가 뜨는 경우에 해결 하는 방법을 정리해보려 한다. 당연히, 위에 에러가 한 가지 문제일 경우에만 출력 되는 것은 아니다. 그러므로, 이 포스팅에서 말하는 방법으로 해결이 안되면 다른 방법을 찾아야 한다.


보통, 나는 이런 에러 메시지가 자주 발생하였다.

VFS: Unable to mount root fs via NFS, trying floppy.

VFS: Cannot open root device "nfs" or unknown-block(2,0): error -6

Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block

그 외, Call Trace ... 

end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block


위 메시지로 구글링해봐도 전혀 다른 내용의 이야기 밖에 없었고, 포스팅에 있는 해결 방법으로 조치해봐도 해결 되지 않았다

 

#  NFS가 동작하는 지 확인해보자.

그래서, 일단 NFS가 제대로 동작은 하는 것인지 확인을 하기로 했다. 자신의 NFS 설정 디렉토리로 직접 마운트가 가능한지 확인을 해보면 된다.

 NFS 테스트 방법은 아래와 같다.

mount -t nfs [호스트명 또는 ip]:[/공유디렉토리] [/마운트 디렉토리]


위처럼 해보니 실패하였다고, 이때, 뭔가 nfs 동작 자체가 문제가 있다는 것을 알 수 있었다. 실패 메시지는 아래와 같았다.

mount.nfs: requested NFS version or transport protocol is not supported

 

뭔가 nfs 설정이 잘못 되었기 때문에 위처럼 메시지가 나온 것이 아닐까라는 의문이 생겼고, 바로 구글링해보니 /etc/exports에서 문제가 발생하는 경우 위와 같은 문제가 발생한다는 것을 알 수 있었다. 또한, 아래 명령어로 nfs server의 상태를 확인할 수도 있다는 것을 알 수 있었다.

sudo systemctl status nfs-kernel-server


위의 명령어를 입력해보니, 여기서 문제가 발생했다는 것을 확인할 수 있었다. 에러 메시지는 아래와 같았다.

● nfs-server.service - NFS server and services

Loaded: loaded (/lib/systemd/system/nfs-server.service; enabled; vendor preset: enabled)

Drop-In: /run/systemd/generator/nfs-server.service.d

          └─order-with-mounts.conf

Active: failed (Result: exit-code) since Mon 2020-11-09 12:16:10 KST; 5min ago

Process: 978 ExecStartPre=/usr/sbin/exportfs -r (code=exited, status=1/FAILURE)

Process: 983 ExecStopPost=/usr/sbin/exportfs -au (code=exited, status=0/SUCCESS)

Process: 985 ExecStopPost=/usr/sbin/exportfs -f (code=exited, status=0/SUCCESS)

systemd[1]: Starting NFS server and services...

exportfs[978]: exportfs: Failed to stat /nfs/~~: No such file or directory

systemd[1]: nfs-server.service: Control process exited, code=exited,

systemd[1]: nfs-server.service: Failed with result 'exit-code'.

ystemd[1]: Stopped NFS server and services. 


위처럼 에러가 발생하였고, /etc/exports에 없는 디렉토리 경로가 있었기 때문에 문제가 발생한 것이라는 것을 알 수 있었다. 그래서 경로를 삭제하고, nfs server를 재시작한 후, 상태를 다시 보니 제대로 동작하는 것을 확인할 수 있었다.

nfs server 재시작 방법은 아래와 같다.

sudo systemctl restart nfs-kernel-server

이후, 상태 보는 방법은 아래와 같다.

sudo systemctl status nfs-kernel-server


이제 nfs가 제대로 동작하는 것을 확인할 수 있었디. 혹시나 나와 같은 문제가 발생한다면, 도움이 되었기를 바란다...해결이 안된다면 다른 방법을 찾아야겠지만..



댓글