<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          教你在 Linux 下做到一個文件即可讀寫,又只讀~

          共 2115字,需瀏覽 5分鐘

           ·

          2023-11-08 08:32


                     
                     

          轉(zhuǎn)自:運維研習(xí)社

          在Linux運維過程中,經(jīng)常會遇到某個應(yīng)用的存儲目錄跑滿,提前又沒有做任何規(guī)劃,目錄或磁盤無法擴(kuò)容,這個時候,我們常用的解決方法是做軟鏈接,通過ln,將原先存儲的目錄軟鏈接到另外大的磁盤中的目錄下,以此達(dá)到目的。
          軟鏈的弊端就是,多層軟鏈之后,會被繞暈,很容易造成誤操作,今天再介紹一種方法

          mount --bind

          mount命令運維小伙伴應(yīng)該很熟悉,不做過多介紹
          先來看下man里面的介紹
          通過mount --bind可以將文件目錄結(jié)構(gòu)重新掛載,連接兩個目錄,它是將前一個目錄掛載到后一個目錄上,所有對后一個目錄的訪問其實都是對前一個目錄的訪問

          例子

          通過例子看下,分別創(chuàng)建兩個不同的目錄,并在兩個不同的目錄下創(chuàng)建不同的文件
          查看文件的inode
          通過mount --bind將test1掛載到test2上,重新查看inode和目錄下內(nèi)容
          可以看到,inode號和文件,都是test1的
          然后對test2目錄下的文件訪問修改,實際上改動的就是test1目錄,我們測試下,在test2目錄創(chuàng)建文件
          然后接觸mount之后,我們再查看下兩個目錄下的內(nèi)容
          可以看到,test1目錄保持修改后的狀態(tài),test2目錄文件仍然存在,且保持原來的不變

          原理

          以mount --bind test1 test2為例,當(dāng)mount --bind命令執(zhí)行后,Linux將會把被掛載目錄的目錄項(也就是該目錄文件的block,記錄了下級目錄的信息)屏蔽,即test2的下級路徑被隱藏起來了(注意,只是隱藏不是刪除,數(shù)據(jù)都沒有改變,只是訪問不到了)。同時,內(nèi)核將掛載目錄(test1)的目錄項記錄在內(nèi)存里的一個s_root對象里,在mount命令執(zhí)行時,VFS會創(chuàng)建一個vfsmount對象,這個對象里包含了整個文件系統(tǒng)所有的mount信息,其中也會包括本次mount中的信息,這個對象是一個HASH值對應(yīng)表(HASH值通過對路徑字符串的計算得來),表里就有 /test1 到 /test2 兩個目錄的HASH值對應(yīng)關(guān)系
          命令執(zhí)行完后,當(dāng)訪問 /test2下的文件時,系統(tǒng)會告知 /test2 的目錄項被屏蔽掉了,自動轉(zhuǎn)到內(nèi)存里找VFS,通過vfsmount了解到 /test2 和 /test1 的對應(yīng)關(guān)系,從而讀取到 /test1 的inode,這樣在 /test2 下讀到的全是 /test1 目錄下的文件

          注意

          兩個目錄的對應(yīng)關(guān)系是存在于內(nèi)存中的,一旦重啟,掛載關(guān)系就沒有了,所以需要將掛載關(guān)系,寫入/etc/fstab中

          高級用法

          • 臨時配置文件讀取測試
            有些應(yīng)用場景下,需要修改配置文件進(jìn)行測試,但是又不能影響正在運行中的業(yè)務(wù),在沒有把握的情況下,不愿意直接修改原有配置文件的話,我們可以通過在/tmp等目錄,寫一個測試的配置文件,通過mount --bind的方式掛載到配置文件讀取目錄,運行程序讀取該臨時配置文件,測試完成后,只需要umount,不影響原來的配置
          • 只讀掛載
            在一些場景下,比如需要給開發(fā)人員查看一些配置的權(quán)限,但是又不允許它們修改配置的情況下,可以通過mount --bind,ro 掛載一個只讀目錄,原目錄可寫,掛載出來的目錄只讀,只需要將只讀目錄權(quán)限給開發(fā)人員即可
          以上就是mount --bind的簡單介紹,更多使用方法,各位小伙伴可以自行嘗試。
             
             

          最近很多小伙伴找我要一些程序員必備資料,于是我翻出了壓箱底的寶藏,免費分享給大家!


          掃描海報二維碼免費獲取。


          瀏覽 2106
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  免费看的av | 成人mv在线观看 | 久久久激情视频 | 俺也去av | 爱爱激情综合 |