2020-08-13 NFS網(wǎng)絡(luò)操作系統(tǒng)介紹以及相關(guān)應(yīng)用

1. NFS服務(wù)簡(jiǎn)介

NFS是Network File System 的縮寫(xiě)隆嗅,中文名稱為網(wǎng)絡(luò)文件系統(tǒng)功舀,由Sun公司開(kāi)發(fā)棺棵,功能是通過(guò)網(wǎng)絡(luò)讓不同的機(jī)器谒撼、不同的操作能夠彼此分享數(shù)據(jù)食寡,讓?xiě)?yīng)用程序在客戶端通過(guò)網(wǎng)戀過(guò)訪問(wèn)位于服務(wù)器磁盤(pán)中的數(shù)據(jù),是類(lèi)Unix系統(tǒng)間實(shí)現(xiàn)磁盤(pán)文件共享的一種方法廓潜。

NFS在文件傳送或信息傳送的過(guò)程中抵皱,依賴于RPC協(xié)議。RPC(Remote Procedure Call)辩蛋,中文名為遠(yuǎn)程過(guò)程調(diào)用呻畸,它是一種能使客戶端執(zhí)行其他系統(tǒng)中程序的一種機(jī)制,可以說(shuō)NFS本身是使用RPC進(jìn)行通訊的一個(gè)程序悼院,凡是用到NFS的地方伤为,無(wú)論是NFS Server或者NFS Client,都需要開(kāi)啟RPC服務(wù)据途,這樣Server和Client才能通過(guò)RPC來(lái)實(shí)現(xiàn)PROGRAM PORT的對(duì)于绞愚,可以這么來(lái)理解,NFS是一個(gè)文件系統(tǒng)颖医,RPC是負(fù)責(zé)信息的傳輸位衩。

2. NFS安裝和配置

在Linux下,安裝NFS非常簡(jiǎn)單便脊,只需要

nfs-utils-* : 包含基本的NFS命令與監(jiān)控程序

portmap-* : 支持安全NFS RPC服務(wù)的連接

當(dāng)NFS服務(wù)啟動(dòng)后蚂四,它會(huì)有三個(gè)守護(hù)進(jìn)程來(lái)配合協(xié)調(diào)工作。

nfsd: 最基本的nfs守護(hù)進(jìn)程哪痰,主要功能是管理客戶端是否能夠登陸服務(wù)器并提供服務(wù)遂赠,使用端口為2049

mountd: RPC的守護(hù)進(jìn)程,主要功能是管理NFS文件系統(tǒng)晌杰,當(dāng)客戶端通過(guò)nfsd登陸成功NFS服務(wù)器后跷睦,還需要鑒權(quán)操作。鑒權(quán)依據(jù)NFS的配置文件

/etc/exports

portmap: 主動(dòng)進(jìn)行端口映射工作肋演,當(dāng)客戶端嘗試連接并且使用NFS時(shí)抑诸,portmap會(huì)將所管理NFS服務(wù)端口提供給客戶端烂琴,從而使客戶端可以通過(guò)該端口向服務(wù)器發(fā)出請(qǐng)求,使用端口為111蜕乡,在新版本中奸绷,portmap被rpcbind取代。

上面介紹了NFS的安裝和守護(hù)進(jìn)程层玲,一般來(lái)說(shuō)号醉,需要先配置好服務(wù)器,再配置好客戶端辛块,就可以正常工作畔派。 下面先介紹如何配置NFS服務(wù)器。

NFS的常用目錄

/etc/exports

/usr/sbin/exportfs NFS服務(wù)的管理命令

/usr/sbin/showmount 客戶端的查看命令

/var/lib/nfs/etab 記錄NFS分享出來(lái)的目錄的完整權(quán)限設(shè)定值

/var/lib/nfs/xtab 記錄曾經(jīng)登錄過(guò)的客戶端信息

NFS服務(wù)器的配置主要是對(duì)/etc/exports的配置润绵,其文件內(nèi)容格式如下:

共享目錄 有權(quán)訪問(wèn)共享目錄的主機(jī) 選項(xiàng)用來(lái)設(shè)置輸出目錄的訪問(wèn)權(quán)限(ro,rw)线椰、用戶映射等

用戶映射選項(xiàng):

  • all_squash:將遠(yuǎn)程訪問(wèn)的所有普通用戶及所屬組都映射為匿名用戶或用戶組(nfsnobody);
  • no_all_squash:與all_squash取反(默認(rèn)設(shè)置)尘盼;
  • root_squash:將root用戶及所屬組都映射為匿名用戶或用戶組(默認(rèn)設(shè)置)憨愉;
  • no_root_squash:與rootsquash取反;
  • anonuid=xxx:將遠(yuǎn)程訪問(wèn)的所有用戶都映射為匿名用戶悔叽,并指定該用戶為本地用戶(UID=xxx)莱衩;
  • anongid=xxx:將遠(yuǎn)程訪問(wèn)的所有用戶組都映射為匿名用戶組賬戶,并指定該匿名用戶組賬戶為本地用戶組賬戶(GID=xxx)娇澎;

其他選項(xiàng):

  • secure:限制客戶端只能從小于1024的tcp/ip端口連接nfs服務(wù)器(默認(rèn)設(shè)置)笨蚁;
  • insecure:允許客戶端從大于1024的tcp/ip端口連接服務(wù)器;
  • sync:將數(shù)據(jù)同步寫(xiě)入內(nèi)存緩沖區(qū)與磁盤(pán)中趟庄,效率低括细,但可以保證數(shù)據(jù)的一致性;
  • async:將數(shù)據(jù)先保存在內(nèi)存緩沖區(qū)中戚啥,必要時(shí)才寫(xiě)入磁盤(pán)奋单;
  • wdelay:檢查是否有相關(guān)的寫(xiě)操作,如果有則將這些寫(xiě)操作一起執(zhí)行猫十,這樣可以提高效率(默認(rèn)設(shè)置)览濒;
  • no_wdelay:若有寫(xiě)操作則立即執(zhí)行,應(yīng)與sync配合使用拖云;
  • subtree:若輸出目錄是一個(gè)子目錄贷笛,則nfs服務(wù)器將檢查其父目錄的權(quán)限(默認(rèn)設(shè)置);
  • no_subtree:即使輸出目錄是一個(gè)子目錄宙项,nfs服務(wù)器也不檢查其父目錄的權(quán)限乏苦,這樣可以提高效率;

例如:將NFS Server 的/home/david/ 共享給192.168.1.0/24網(wǎng)段,權(quán)限讀寫(xiě),

配置文件/etc/exports添加一行: /home/david 192.168.1.0/24(rw)

配置好exports文件后汇荐,就可以啟動(dòng)NFS服務(wù)器洞就,nfs服務(wù)器程序依賴protmap和nfs程序,所以要先啟動(dòng)他們兩個(gè)掀淘。

執(zhí)行 service portmap[nfs] start 啟動(dòng)服務(wù)旬蟋,執(zhí)行service portmap[nfs] status查看服務(wù)狀態(tài)。

凡是修改/etc/exports文件后革娄,需要先執(zhí)行service portmap restart,在執(zhí)行service nfs restart咖为,就可以使設(shè)置的參數(shù)生效。

exportfs命令可以查看當(dāng)前nfs配置文件內(nèi)容稠腊。

exportfs [-aruv]

-a 全部掛載或卸載 /etc/exports中的內(nèi)容
-r 重新讀取/etc/exports 中的信息 ,并同步更新/etc/exports鸣哀、/var/lib/nfs/xtab
-u 卸載單一目錄(和-a一起使用為卸載所有/etc/exports文件中的目錄)
-v 在export的時(shí)候架忌,將詳細(xì)的信息輸出到屏幕上。

具體例子:
exportfs -au 卸載所有共享目錄
exportfs -rv 重新共享所有目錄并輸出詳細(xì)信息

用戶可以通過(guò)nfsstat來(lái)查看nfs的運(yùn)行狀態(tài)我衬,通過(guò)rpcinfo來(lái)檢測(cè)rpc運(yùn)行情況叹放,rpcinfo –p 查看哪些程序使用的RPC端口。

showmount 查看目前有多少客戶端連接挠羔。

停止NFS服務(wù)器井仰,執(zhí)行service nfs stop,是否停止protmap看系統(tǒng)中還有誰(shuí)在使用此服務(wù)來(lái)決定破加。

服務(wù)器端的NFS設(shè)置完成后俱恶,下面來(lái)設(shè)置客戶端的NFS。

mount NFS服務(wù)器IP:共享目錄 本地掛載目錄

例如: mount 192.168.1.108:/home/hao /mnt/ 表示將108服務(wù)器下的/home/hao目錄掛載到本地mnt目錄下范舀。

將 192.168.1.108:/home/hao /mnt nfs defaults 0 0 寫(xiě)入/etc/fstab文件合是,就可以讓系統(tǒng)開(kāi)機(jī)啟動(dòng)時(shí),自動(dòng)掛載NFS文件系統(tǒng)锭环。

掛載成功之后聪全,上述兩個(gè)目錄內(nèi)的文件保持同步變化。卸載已掛賬的NFS共享目錄umount /home/hao辅辩。

新版本上面难礼,已經(jīng)用rpcbind來(lái)代替portmap,用nfs-kernel-server來(lái)代替nfs玫锋。

上面介紹了nfs掛載的相關(guān)知識(shí)蛾茉,如果在共享目錄里面創(chuàng)建文件,那么這個(gè)文件屬于誰(shuí)呢景醇?這里面就牽涉到NFS的權(quán)限問(wèn)題臀稚,下面來(lái)介紹。

NFS的權(quán)限控制

同一個(gè)文件夾三痰,在兩個(gè)不同的Linux系統(tǒng)上可以進(jìn)行同時(shí)更改吧寺,創(chuàng)建窜管。如果A系統(tǒng)上是A用戶,B系統(tǒng)上是B用戶稚机,A用戶在自己目錄(非NFS共享目錄)下創(chuàng)建文件幕帆,文件的屬主屬于A,B用戶的屬于B赖条,這樣是沒(méi)有沖突的失乾。如果A和B都在NFS共享目錄里面創(chuàng)建文件,這又怎么來(lái)處理呢纬乍?

如果客戶端所在的共享目錄無(wú)法創(chuàng)建文件碱茁,原因可能是NFS服務(wù)器端的共享目錄本身的寫(xiě)權(quán)限沒(méi)有開(kāi)放給其他用戶,這可以通過(guò)chmod 777 –R 目錄來(lái)解決仿贬。

NFS有很多默認(rèn)的參數(shù)纽竣,打開(kāi)/var/lib/nfs/etab 查看分享文件夾的完整權(quán)限設(shè)定值。

image

root用戶創(chuàng)建文件的文件屬主和組默認(rèn)是nfsnobody茧泪,而普通用戶寫(xiě)入文件時(shí)就是自己的名字蜓氨,這保證了服務(wù)器的安全性

3. 在嵌入式領(lǐng)域的應(yīng)用

使用NFSROOT來(lái)啟動(dòng)開(kāi)發(fā)板,可以避免重復(fù)制作根文件系統(tǒng)(rootfs)鏡像以及燒寫(xiě)文件系統(tǒng)队伟,從而節(jié)省大量拷貝穴吹、傳送文件的操作,節(jié)省開(kāi)發(fā)時(shí)間嗜侮。

如何開(kāi)啟nfsroot功能港令?開(kāi)啟nfsroot功能需要具備如下幾個(gè)條件:

  1. 宿主機(jī)(一般為虛擬機(jī)里面的Linux系統(tǒng))要開(kāi)啟nfs server服務(wù)

2. 開(kāi)發(fā)板的網(wǎng)口要暢通

3. 開(kāi)發(fā)板的Linux內(nèi)核要支持nfsroot

1和2是硬件條件,一般都是支持的棘钞。第三項(xiàng)需要對(duì)內(nèi)核和uboot進(jìn)行相關(guān)設(shè)置才行缠借,下面來(lái)介紹:

首先,內(nèi)核配置里面宜猜,要選中有關(guān)NFSROOT的選項(xiàng)

image

選擇完畢后泼返,編譯運(yùn)行,然后燒寫(xiě)到Flash指定分區(qū)就行姨拥。這一步是讓kernel有能力去從nfs上掛載rootfs绅喉,但具體的路徑參數(shù)還不知道,剩下的需要通過(guò)配置uboot終端bootargs參數(shù)叫乌,這個(gè)參數(shù)會(huì)傳遞給kernel柴罐,kernel根據(jù)此參數(shù)去找具體的路徑并且掛載。下面介紹在Uboot中憨奸,啟動(dòng)nfs的相關(guān)參數(shù)

在Uboot命令行中革屠,輸入

setenv bootargs 'mem=64M console=ttyAMA0,115200 
 root=/dev/nfs rw nfsroot=192.168.4.165:/home/NFSROOT/rootfs_dir 
 ip=192.168.4.99:192.168.4.1:255.255.255.0 
 mtdparts=hi_sfc:256K(boot),256K(env),1792K(kernel),-(rootfs)'

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子似芝,更是在濱河造成了極大的恐慌那婉,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,122評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件党瓮,死亡現(xiàn)場(chǎng)離奇詭異详炬,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)寞奸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)呛谜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人枪萄,你說(shuō)我怎么就攤上這事隐岛。” “怎么了瓷翻?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,491評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵礼仗,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我逻悠,道長(zhǎng),這世上最難降的妖魔是什么韭脊? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,636評(píng)論 1 293
  • 正文 為了忘掉前任童谒,我火速辦了婚禮,結(jié)果婚禮上沪羔,老公的妹妹穿的比我還像新娘饥伊。我一直安慰自己,他們只是感情好蔫饰,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布琅豆。 她就那樣靜靜地躺著,像睡著了一般篓吁。 火紅的嫁衣襯著肌膚如雪茫因。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,541評(píng)論 1 305
  • 那天杖剪,我揣著相機(jī)與錄音冻押,去河邊找鬼。 笑死盛嘿,一個(gè)胖子當(dāng)著我的面吹牛洛巢,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播次兆,決...
    沈念sama閱讀 40,292評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼稿茉,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起漓库,我...
    開(kāi)封第一講書(shū)人閱讀 39,211評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤恃慧,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后米苹,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體糕伐,經(jīng)...
    沈念sama閱讀 45,655評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評(píng)論 3 336
  • 正文 我和宋清朗相戀三年蘸嘶,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了良瞧。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,965評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡训唱,死狀恐怖褥蚯,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情况增,我是刑警寧澤赞庶,帶...
    沈念sama閱讀 35,684評(píng)論 5 347
  • 正文 年R本政府宣布,位于F島的核電站澳骤,受9級(jí)特大地震影響歧强,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜为肮,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評(píng)論 3 329
  • 文/蒙蒙 一摊册、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧颊艳,春花似錦茅特、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,894評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至重斑,卻和暖如春兵睛,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背窥浪。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,012評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工卤恳, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人寒矿。 一個(gè)月前我還...
    沈念sama閱讀 48,126評(píng)論 3 370
  • 正文 我出身青樓突琳,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親符相。 傳聞我的和親對(duì)象是個(gè)殘疾皇子拆融,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評(píng)論 2 355