首先在 ubuntu 平臺 (PC) 下做如下設置:
一:安裝 NFS 服務器
sudo apt-get install nfs-kernel-server
二:配置該服務器
sudo vi /etc/exports
在打開的空的文件中,添加想要共享的目錄
/opt/FL2440 *(rw,sync,no_root_squash)
這裏 /opt/FL2440 是 ubuntu 給其他平臺 ( 開發板,其他遠程終端等 ) 提供的共享目錄; * 表示所有客戶機都可以掛載上述共享目錄, rw 表示掛接此目錄的客戶機對該目錄有讀寫的權力, no_root_squash 表示允許掛接此目錄的客戶機享有該主機的root 身份。
三:啓動 NFS 服務
sudo /etc/init.d/nfs-kernel-server start
然後,在開發板上做如下設置:
四:打開超級終端或者 DNW ,保持串口處於通信狀態
五:通過交叉網線連接 PC 和開發板。這一步千萬不能忘, NFS 靠的就是這根線啊,線路都不通了,如何能夠配置成功?
六:確保 ubuntu 下的 IP 地址與開發板的 IP 地址在同一網段。二者皆可以通過ifconfig 查詢,以及通過它設置 IP 地址。如果不在同一網段,請手動設置爲同一網段。
以上六步已經配置好 NFS 了,下面具體測試是否通信正常:
七:在開發板的 linux 啓動後的命令行裏輸入如下指令:
mount –t nfs –o nolock 192.168.1.103:/opt/FL2440 /mnt
或者簡單點:
mount 192.168.1.103:/opt/FL2440 /mnt
其中 192.168.1.103 爲 PC 端 ubuntu 的 IP 地址。我這裏本身開發板的 IP 地址不在這一網段,通過如下命令:
ifconfig eth0 192.168.1.101
這時,開發板的 IP 就設置成 192.168.1.101 了。前面的掛載命令將會把 PC 端的ubuntu 下的 /opt/FL2440 目錄掛載到開發板的 /mnt 目錄。當然,前提是開發板的linux 系統必須具備這個目錄了。試試先在 ubuntu 的 /opt/FL2440 路徑放個文件,然後在開發板的命令行終端敲入 ls /mnt ,是不是看到剛纔所放的文件了?
八:如果第七步沒有成功,請仔細檢查以上七步,重複一到七步!
九:消了掛載
卸載文件系統使用 umount 命令,例如在ubuntu中執行:umount /mnt
=================================== 附錄 ======================================
nfs參數
1、/media目錄
共享/media目錄,允許所有客戶端訪問該目錄並只有只讀權限。
/media *(ro)
2、/nfs/public目錄
共享/nfs/public目錄,允許192.168.8.0/24和192.168.9.0/24網段的客戶端訪問,並且對此目錄只有只讀權限。
/nfs/public 192.168.8.0/24(ro) 192.168.9.0/24(ro)
3、/nfs/team1、/nfs/team2、/nfs/team3目錄
共享/nfs/team1、/nfs/team2、/nfs/team3目錄,並/nfs/team1只有team1.michael.com域成員可以訪問並有讀寫權限,/nfs/team2、/nfs/team3目錄同理哈~
/nfs/team1 *.team1.michael.com(rw)
/nfs/team1 *.team1.michael.com(rw)
/nfs/team1 *.team1.michael.com(rw)
4、/nfs/works目錄
共享/nfs/works目錄,192.168.8.0/24網段的客戶端具有隻讀權限,並且將root用戶映射成匿名用戶。
/nfs/works 192.168.8.0/24(rw,root_squash)
5、/nfs/test目錄
共享/nfs/test目錄,所有人都具有讀寫權限,但當用戶使用該共享目錄時都將帳號映射成匿名用戶,並且指定匿名用戶的UID和GID都爲65534。
/nfs/test *(rw,all_squash,anonuid=65534,anngid=65534)
6、/nfs/security目錄
共享/nfs/security目錄,僅允許192.168.8.88客戶端訪問並具有讀寫權限。
/nfs/security 192.168.8.88(rw)
注意:在發佈共享目錄的格式中除了共享目錄是必跟參數外,其他參數都是可選的。並且共享目錄與客戶端之間及客戶端與客戶端之間需要使用空格符號,但是客戶端與參數之間是不能有空格的-
cat /var/lib/nfs/etab
配置nfs固定端口
vim /etc/sysconfig/nfs
自定義以下端口,然而不能和其他端口衝突
RQUOTAD_PORT=5001
LOCKD_TCPPORT=5002
LOCKD_UDPPORT=5002
MOUNTD_PORT=5003
STATD_PORT=5004
========================================= 附錄 2 ============================================
2. mount的基本用法是?
格式:mount [-參數] [設備名稱] [掛載點]
其中常用的參數有:
-a 安裝在/etc/fstab文件中類出的所有文件系統。
-f 僞裝mount,作出檢查設備和目錄的樣子,但並不真正掛載文件系統。
-n 不把安裝記錄在/etc/mtab 文件中。
-r 講文件系統安裝爲只讀。
-v 詳細顯示安裝信息。
-w 將文件系統安裝爲可寫,爲命令默認情況。
-t <文件系統類型> 指定設備的文件系統類型,常見的有:
ext2 linux目前常用的文件系統
msdos MS-DOS的fat,就是fat16
vfat windows98常用的fat32
nfs 網絡文件系統
iso9660 CD-ROM光盤標準文件系統
ntfs windows NT/2000/XP的文件系統
auto 自動檢測文件系統
-o <選項> 指定掛載文件系統時的選項,有些也可寫到在/etc/fstab中。常用的有:
defaults 使用所有選項的默認值(auto、nouser、rw、suid)
auto/noauto 允許/不允許以 –a選項進行安裝
dev/nodev 對/不對文件系統上的特殊設備進行解釋
exec/noexec 允許/不允許執行二進制代碼
suid/nosuid 確認/不確認suid和sgid位
user /nouser 允許/不允許一般用戶掛載
codepage=XXX 代碼頁
iocharset=XXX 字符集
ro 以只讀方式掛載
rw 以讀寫方式掛載
remount 重新安裝已經安裝了的文件系統
loop 掛載迴旋設備
需要注意的是,掛載點必須是一個已經存在的目錄,這個目錄可以不爲空,但掛載後這個目錄下以前的內容將不可用,umount以後會恢復正常。使用多個-o參數的時候,-o 只用一次,參數之間用半角逗號隔開:
# mount –o remount,rw /
例如要掛載windows下文件系統爲FAT32的D盤,一般而言在Linux下這個分區對應/dev/hda5,根據具體的分區情況會有不同,這裏就以hda5來舉例說明:
# mkdir /mnt/hda5 //創建hda5的目錄作爲掛載點,位置和目錄名可自定義//
# mount -t vfat /dev/hda5 /mnt/hda5
一般而言,Linux會自動探測分區的文件系統,除非讓你指定時,否則-t vfat 可以省掉。
# mount /dev/hda5 /mnt/hda5
這樣就可以進入/mnt/hda5目錄去訪問分區中的資源了。
3. 爲什麼mount上分區後顯示不了中文文件爲問號/亂碼?
顯示問號表明你的系統中沒有可識別使用的中文字體,請先安裝中文字體。確保你的系統已經可以很好的顯示中文。顯示爲亂碼一般是mount默認使用的文件系統編碼和文件系統中文件的實際編碼不一致造成的。要想正常顯示中文文件,mount時需要用到 -o 參數裏的codepage和iocharset選項。codepage指定文件系統的代碼頁,簡體中文中文代碼是936;iocharset指定字符集,簡體中文一般用cp936或gb2312。
# mount –o iocharset=gb2312 codepage=936 /dev/hda5 /mnt/hda5
一般來說 mount –o iocharset=cp936 /dev/hda5 /mnt/hda5 就可以解決問題了。
如果這樣做了以後還有問題,請嘗試UTF-8編碼:
# mount –o iocharset=utf8 /dev/hda5 /mnt/hda5
4. 爲什麼mount上去以後分區普通用戶不可寫?
mount時加上 –o umask=000 即可:
# mount –o umask=000, iocharset=cp936 /dev/hda5 /mnt/hda5
5. 爲什麼mount上去後的分區中的文件都變成短文件名了?
這是文件系統掛錯的原因,將FAT32掛載成FAT16時就會出現這種情況,先umount,然後用 –t vfat 重新掛載即可解決問題。
# mount –t vat /dev/hda5 /mnt/hda5
7. 如何掛載U盤和mp3?
如果計算機沒有其它SCSI設備和usb外設的情況下,插入的U盤的設備路徑是 /dev/sda1,用命令:
# mkdir /mnt/u
# mount /dev/sda1 /mnt/u
掛載即可。
8. 可以直接使用iso文件嗎?
可以,就是mount的這一選項使得Linux下有免費虛擬光驅的說法,具體用法是:
# mkdir /mnt/iso
# mount –o loop linux.iso /mnt/iso
當然,掛載以後掛載點/mnt/iso也是隻讀的。
12. 如何開機自動掛載分區?
每次掛載都要輸入那麼長的命令的確是繁瑣了些,只要將分區信息寫到/etc/fstab文件中即可實現系統啓動的自動掛載,例如對於/dev/hda5的自動掛載添加如下的行即可:
/dev/hda5 /mnt/hda5 vfat defaults,iocharset=cp936, rw 0 0
13. 如何掛載samba 分區?
# mkdir /mnt/share
# mount -t smbfs -o username=root,password=abc,codepage=936,iocharset=gb2312 //192.168.1.100/share /mnt/share
如果中文顯示不正常請嘗試UTF-8編碼。當然可以寫到fstab中實現自動掛載。
14. mount --bind是什麼意思?
mount --bind 是將一個目錄中的內容掛載到另一個目錄上,用法是
# mount --bind olddir newdir
這個命令使得自己搭建的FTP要共享某個目錄的時候變得特別方便。如果要取消mount用命令:
# mount --move olddir newdir 即可。
如果mount --bind 也想寫入fstab中的話格式如下:
olddir newdir none bind 0 0
16. 爲什麼umount的時候老顯示 device busy?
這是因爲有程序正在訪問這個設備,最簡單的辦法就是讓訪問該設備的程序退出以後再umount。可能有時候用戶搞不清除究竟是什麼程序在訪問設備,如果用戶不急着umount,則可以用:
# umount -l /mnt/hda5
來卸載設備。選項 –l 並不是馬上umount,而是在該目錄空閒後再umount。還可以先用命令 ps aux 來查看佔用設備的程序PID,然後用命令kill來殺死佔用設備的進程,這樣就umount的非常放心了。
fuser 可以顯示出當前哪個程序在使用磁盤上的某個文件、掛載點、甚至網絡端口,並給出程序進程的詳細信息。
假設無法卸載的設備爲 /media/USB,運行下列命令即可:
$ fuser -m -v /media/USB/
用戶 進程號 權限 命令
/media/BAK/: galeki 335 ..c.. gqview
-m 參數顯示所有使用指定文件系統的進程,後面可以跟掛載點,或是dev設備 ( Thanks lisir :),-v 參數給出詳細的輸出,可以看出,原來是 gqview 這個程序還在霸佔着移動設備,fuser 還給出了程序的進程號,知道了進程號,你就可以隨便怎麼處置這個程序了。
另外你也可以添加一個 -k 參數:
fuser -m -k /media/USB/
這招自動把霸佔着 /media/USB/ 的程序殺死。如果你不是很明確是否要殺死所有霸佔設備的程序,你還可以加一個 -i 參數,這樣每殺死一個程序前,都會詢問:
$ fuser -m -v -i -k /media/BAK/
用戶 進程號 權限 命令
/media/BAK/: galeki 371 ..c.. gqview
殺死進程 371 ? (y/N)