一、建立NFS檔案共享
1、安裝NFS 服務
:~$ sudo apt-get install nfs-kernel-server
2、建立NFS 共享目錄
假設 NFS 共享目錄是/home/nfs
~$ sudo mkdir /home/nfs
3、配置NFS
:~$ vi /etc/exports
在/etc/exports 檔案末尾加入下面一行:
/home/nfs *(rw,sync,no_subtree_check,no_root_squash)
允許所有使用者通路 NFS 共享目錄
重新開機伺服器:
-
sudo /etc/init.d/portmap start
- sudo /etc/init.d/nfs-kernel-server start
- 若是找不到portmap有可能ubuntu是64位的沒有這個東東(自己猜的),需要重新開機這個指令(sudo /etc/init.d/rpcbind restart),再打開步驟2就ok了。
注:如果開發闆不能挂載到主控端可以試下以下方式:
:~$ sudo exportfs –a
:~$ sudo /etc/init.d/portmap restart
:~$ sudo /etc/init.d/nfs-kernel-server restart
5、本地驗證NFS
:~$ ls /home/nfs
helloworld.c
$sudo mount localhost:/home/nfs /mnt
$ls /mnt
helloworld.c
$sudo umont /mnt
開發闆挂載:
[[email protected] ]#mount -t nfs -o nolock 192.168.200.123:/home/nfs /mnt
[[email protected] ]#cd /mnt
[[email protected] mnt]#ls
led_test zyr-hello.ko
[[email protected] mnt]#insmod zyr-hello.ko
[ 5299.759382] misc-register led_core
[[email protected] mnt]#./led_test
Start led test.
[ 5309.324907] GPIO LED set low.
[ 5310.338522] GPIO LED set high.
[ 5311.342169] GPIO LED set low.
[ 5312.345413] GPIO LED set high.
二、設定linx遠端根檔案系統:
修改在/etc/exports 檔案,在末尾加入修改檔案系統路徑:
/home/root/targetNFS/ *(rw,sync,no_subtree_check,no_root_squash)
setenv serverip 192.168.1.122
setenv server_ip 192.168.1.122
setenv gw_ip 192.168.1.1
setenv client_ip 192.168.1.2
setenv root_dir /home/root/targetNFS/
setenv fdtfile am335x-boneblack.dtb
printenv server_ip client_ip root_dir fdtfile
最後run nfsboot。其中有些路徑要替換成自己開環境使用的相應路徑。
注意:要保證根檔案系統中檔案的所有者,所屬使用者組為root。或者如下圖
在調試NFS根檔案系統時,出現過以下的錯誤:
設定完後,卡死在一個階段,無法運作下去,把核心的DEBUG資訊打開。即zImage替換為帶調試資訊的版本。
1. NFS無法挂載
[ 100.344551] VFS: Unable to mount root fs via NFS, trying floppy.
[ 100.351929] VFS: Cannot open root device "nfs" or unknown-block(2,0): error -6
[ 100.359382] Please append a correct "root=" boot option; here are the available partitions:
[ 100.367821] 0100 65536 ram0
[ 100.367829] (driver?)
[ 100.374781] 0101 65536 ram1
[ 100.374903] (driver?)
[ 100.381483] 0102 65536 ram2
[ 100.381491] (driver?)
[ 100.388097] 0103 65536 ram3
[ 100.388209] (driver?)
[ 100.394534] 0104 65536 ram4
[ 100.394541] (driver?)
[ 100.400912] 0105 65536 ram5
[ 100.401020] (driver?)
[ 100.407305] 0106 65536 ram6
[ 100.407312] (driver?)
[ 100.413864] 0107 65536 ram7
[ 100.413866] (driver?)
[ 100.420051] 0108 65536 ram8
[ 100.420054] (driver?)
[ 100.426187] 0109 65536 ram9
[ 100.426190] (driver?)
[ 100.432332] 010a 65536 ram10
[ 100.432334] (driver?)
[ 100.438560] 010b 65536 ram11
[ 100.438562] (driver?)
[ 100.444780] 010c 65536 ram12
[ 100.444782] (driver?)
[ 100.451026] 010d 65536 ram13
[ 100.451029] (driver?)
[ 100.457240] 010e 65536 ram14
[ 100.457243] (driver?)
[ 100.463475] 010f 65536 ram15
[ 100.463477] (driver?)
[ 100.469724] b300 15269888 mmcblk1
[ 100.469728] driver: mmcblk
[ 100.476553] b301 4194304 mmcblk1p1 3567dafc-01
[ 100.476555]
[ 100.483476] b302 11074560 mmcblk1p2 3567dafc-02
[ 100.483480]
[ 100.490361] Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(2,0)
[ 100.498670] ---[ end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(2,0) ]---
原因可能是,設定的目錄不對,或者協定不比對。解決方法如下:
【問題解決】Linux通過nfs挂載根檔案系統報錯:VFS: Unable to mount root fs via NFS, trying floppy_丨匿名使用者丨的部落格-CSDN部落格_cannot mount root
原因:
以前使用的16.04版本的ubuntu沒問題,現在更換了18.04.4版本,開始報錯。
從Ubuntu17.04開始,nfs預設隻支援協定3和協定4,而kernel中預設支援協定2。
修改 NFS 配置檔案:
sudo vim /etc/default/nfs-kernel-server
在末尾添加:
RPCNFSDOPTS="--nfs-version 2,3,4 --debug --syslog"
重新開機 NFS 服務:
sudo /etc/init.d/nfs-kernel-server restart
注:如果kernel版本較高支援nfs協定3的話,可以在Uboot傳到Kernel的bootargs參數中加入’nfsvers=3’,使kernel使用nfs協定3。
2. nfs: server 192.168.3.16 not responding. still trying.
我遇到的問題是,系統是emmc裡打包,解壓出來的,IP位址開機後有重配。是以去除IP位址重配置的功能。
systemV的配置在:/etc/network/interfaces檔案中。把IP位址配置成uboot中一樣
systemD的配置在:/etc/systemD /network/01-eth-static.network ,删除這個檔案,或IP位址配置成uboot一樣。
其他原因的解決辦法如下:
開發闆 nfs : server xxx.xxx.xxx.xxx not responding,still trying問題解決方法_BuildMyDream998的部落格-CSDN部落格
首先說說我的開發環境,闆子的IP位址是192.168.3.123,PC機WINDOSW的IP位址是192.168.3.196,而虛拟機LINUX的IP位址是192.168.3.16.
在uboot的指令模式中修改bootargs變量,輸入以下指令:
set bootargs noinitrd root=/dev/nfs nfsroot=192.168.3.16:/work/nfs_root/tmp/fs_mini_mdev
ip=192.168.3.123:192.168.3.16:192.168.3.1:255.255.255.0::eth0:off init=/linuxrc console=ttySAC0
然後儲存重新開機闆子。之後就出現以下情況:
當遇到這個問題的時候,我首先檢查了網絡,從開發闆中進行本地啟動,啟動成功之後輸入ping 192.168.3.16
結果顯示可以ping通
之後在闆子啟動後已經進入linux系統的情況下,使用以下mount指令:
mount -t nfs -o nolock,vers=2 192.168.3.16:/work/nfs_root /mnt,可以挂載上
在開發闆中:
在虛拟機LINUX中:
證明了網絡狀況沒問題。
閱讀了網上一些資料,說有可能是因為 NFS的預設傳輸協定是 UDP,而PC機與嵌入式系統通過UPD互動時就會出現嚴重的網卡丢包現象。改成TCP協定形式。是以進行了以下更改
set bootargs noinitrd root=/dev/nfs nfsroot=192.168.3.16:/work/nfs_root/tmp/fs_mini_mdev,
proto=tcp ip=192.168.3.123:192.168.3.16:192.168.3.1:255.255.255.0::eth0:off init=/linuxrc
console=ttySAC0
結果問題還是那樣。
還有就是可能
Mandag 27 november 2006 20:12 skrev Verner Kjrsgaard:
Mandag 27 november 2006 19:33 skrev John P. New:Verner,
This is a problem with NFS and 2.6 kernels, fast server NICs and
comparatively slower client NICs. This will show up when the server has
a 1000Mb card and the client a 100Mb, or when the server has a 100Mb
card and the client a 10Mb.
Essentially, you have to pass some options to the kernel on terminal
boot, and this varies depending on whether you are using etherboot or
PXE.
See
Linux Terminal Server Project … rver_not_responding
for a deeper explanation of the problem and the cure.
大概意思是說具有較高的傳送速率的NFS主機網卡和較低速率的目标機網卡之間不比對,要解決此問題需要在挂載檔案系統時添加額外的參數。
是以進行以下修改:
set bootargs noinitrd root=/dev/nfs
nfsroot=192.168.3.16:/work/nfs_root/tmp/fs_mini_mdev,flags=inir,rsize=1024,wsize=1024
ip=192.168.3.123:192.168.3.16:192.168.3.1:255.255.255.0::eth0:off init=/linuxrc console=ttySAC0
相應的參數意思:
intr – 當伺服器當機或者無法到達時,允許中斷NFS請求。rsize=xxxx 和 wsize=xxxx – 通過設定大的同時傳輸的資料塊大小(bytes),以提高NFS讀寫的速度。改變這些值時要當心,一些舊的linux核心和網卡在大的塊大小不能正常工作。
本以為這次沒問題,結果還是那樣失望。這個時候已經折騰了我兩三個小時了。
再次通過閱讀網上的一些新的解決方案。發現了一個很關鍵的提示。在加載檔案系統時,是不是進行了系統的IP配置,進而導緻了這樣的錯誤。也就是說開發闆的IP位址被改變了。立馬想到當作業系統啟動時它會立馬去加載/etc/init.d/rsC,是以立馬去虛拟機中所要挂載的檔案系統檢視這個檔案。
經過檢視:
Holy cow,第二行ifconfig eth0 192.168.1.17是導緻這個問題的罪魁禍首。
它會将闆子的IP位址修改為192.168.1.17,但是虛拟機LINUX的IP位址是192.168.3.16,闆子和虛拟機LINUX不在同一個網段上,是以就導緻通信失敗,出現nfs server not responding無應答的錯誤。
将闆子修改為192.168.3.x網段下的位址
儲存退出。重新開機開發闆。
在uboot指令模式中設定好闆子參數:
主要留意bootargs環境變量
然後儲存再次重新開機闆子。
終于解決了這個問題:
與虛拟機LINUX中的檔案目錄一緻