在Linux運(yùn)維過程中,經(jīng)常會(huì)遇到某個(gè)應(yīng)用的存儲(chǔ)目錄跑滿,提前又沒有做任何規(guī)劃,目錄或磁盤無法擴(kuò)容,這個(gè)時(shí)候,我們常用的解決方法是做軟鏈接,通過ln,將原先存儲(chǔ)的目錄軟鏈接到另外大的磁盤中的目錄下,以此達(dá)到目的。
軟鏈的弊端就是,多層軟鏈之后,會(huì)被繞暈,很容易造成誤操作,今天再介紹一種方法
mount --bind
mount命令運(yùn)維小伙伴應(yīng)該很熟悉,不做過多介紹
先來看下man里面的介紹
通過mount --bind可以將文件目錄結(jié)構(gòu)重新掛載,連接兩個(gè)目錄,它是將前一個(gè)目錄掛載到后一個(gè)目錄上,所有對(duì)后一個(gè)目錄的訪問其實(shí)都是對(duì)前一個(gè)目錄的訪問
例子
通過例子看下,分別創(chuàng)建兩個(gè)不同的目錄,并在兩個(gè)不同的目錄下創(chuàng)建不同的文件
查看文件的inode
通過mount --bind將test1掛載到test2上,重新查看inode和目錄下內(nèi)容
可以看到,inode號(hào)和文件,都是test1的
然后對(duì)test2目錄下的文件訪問修改,實(shí)際上改動(dòng)的就是test1目錄,我們測(cè)試下,在test2目錄創(chuàng)建文件
然后接觸mount之后,我們?cè)俨榭聪聝蓚€(gè)目錄下的內(nèi)容
可以看到,test1目錄保持修改后的狀態(tài),test2目錄文件仍然存在,且保持原來的不變
原理
以mount --bind test1 test2為例,當(dāng)mount --bind命令執(zhí)行后,Linux將會(huì)把被掛載目錄的目錄項(xiàng)(也就是該目錄文件的block,記錄了下級(jí)目錄的信息)屏蔽,即test2的下級(jí)路徑被隱藏起來了(注意,只是隱藏不是刪除,數(shù)據(jù)都沒有改變,只是訪問不到了)。同時(shí),內(nèi)核將掛載目錄(test1)的目錄項(xiàng)記錄在內(nèi)存里的一個(gè)s_root對(duì)象里,在mount命令執(zhí)行時(shí),VFS會(huì)創(chuàng)建一個(gè)vfsmount對(duì)象,這個(gè)對(duì)象里包含了整個(gè)文件系統(tǒng)所有的mount信息,其中也會(huì)包括本次mount中的信息,這個(gè)對(duì)象是一個(gè)HASH值對(duì)應(yīng)表(HASH值通過對(duì)路徑字符串的計(jì)算得來),表里就有 /test1 到 /test2 兩個(gè)目錄的HASH值對(duì)應(yīng)關(guān)系
命令執(zhí)行完后,當(dāng)訪問 /test2下的文件時(shí),系統(tǒng)會(huì)告知 /test2 的目錄項(xiàng)被屏蔽掉了,自動(dòng)轉(zhuǎn)到內(nèi)存里找VFS,通過vfsmount了解到 /test2 和 /test1 的對(duì)應(yīng)關(guān)系,從而讀取到 /test1 的inode,這樣在 /test2 下讀到的全是 /test1 目錄下的文件
注意
兩個(gè)目錄的對(duì)應(yīng)關(guān)系是存在于內(nèi)存中的,一旦重啟,掛載關(guān)系就沒有了,所以需要將掛載關(guān)系,寫入/etc/fstab中
高級(jí)用法
臨時(shí)配置文件讀取測(cè)試 有些應(yīng)用場(chǎng)景下,需要修改配置文件進(jìn)行測(cè)試,但是又不能影響正在運(yùn)行中的業(yè)務(wù),在沒有把握的情況下,不愿意直接修改原有配置文件的話,我們可以通過在/tmp等目錄,寫一個(gè)測(cè)試的配置文件,通過mount --bind的方式掛載到配置文件讀取目錄,運(yùn)行程序讀取該臨時(shí)配置文件,測(cè)試完成后,只需要umount,不影響原來的配置
只讀掛載 在一些場(chǎng)景下,比如需要給開發(fā)人員查看一些配置的權(quán)限,但是又不允許它們修改配置的情況下,可以通過mount --bind,ro 掛載一個(gè)只讀目錄,原目錄可寫,掛載出來的目錄只讀,只需要將只讀目錄權(quán)限給開發(fā)人員即可
以上就是mount --bind的簡(jiǎn)單介紹,更多使用方法,各位小伙伴可以自行嘗試。
審核編輯:劉清
-
LINUX內(nèi)核
+關(guān)注
關(guān)注
1文章
316瀏覽量
21688 -
Hash算法
+關(guān)注
關(guān)注
0文章
43瀏覽量
7407 -
vfs
+關(guān)注
關(guān)注
0文章
14瀏覽量
5265
原文標(biāo)題:Linux下如何做到一個(gè)文件即可讀寫,又只讀?
文章出處:【微信號(hào):良許Linux,微信公眾號(hào):良許Linux】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論