標籤:

能否通俗易懂,深入淺出地解釋一下linux中的掛載的概念?

初學linux,學到文件系統這一塊,理解不能,書上說如果將一塊分區槽掛載在一個目錄上,進入這個目錄就相當於進入這個分區槽,那那些沒有被掛載的目錄,我進入它,是進入到哪裡呢?


linux下面所有的文件、目錄、設備都有一個路徑,這個路徑永遠以/開頭,用/分隔,如果一個路徑是另一個路徑的前綴,則這兩個路徑有邏輯上的父子關係。

但是並不是所有邏輯上的父子關係都必須要是同一個設備,決定不同路徑對應到哪個設備的機制就叫做mount(掛載)。通過mount,可以設置當前的路徑與設備的對應關係。

每個設備會設置一個掛載點,掛載點是一個空目錄。一般來說必須有一個設備掛載在/這個根路徑下面,叫做rootfs。其他掛載點可以是/tmp,/boot,/dev等等,通過在rootfs上面創建一個空目錄然後用mount命令就可以將設備掛載到這個目錄上。掛載之後,這個目錄下的子路徑,就會映射到被掛載的設備裡面。

當訪問一個路徑時,會選擇一個能最大匹配當前路徑前綴的掛載點。比如說,有/var的掛載點,也有/var/run的掛載點的情況下,訪問/var/run/test.pid,就會匹配到/var/run掛載點設備下面的/test.pid。

同一個設備可以有多個掛載點,同一個掛載點同時只能載入一個設備。訪問非掛載點的路徑的時候,按照前面所說,其實是訪問最接近的一個掛載點,如果沒有其他掛載點那麼就是rootfs上的目錄或者文件了。

實際上並不只有linux支持掛載點,Windows也是一樣支持的。去控制面板/管理工具/計算機管理 裡面,挑一個磁碟(比如D盤),然後給它分一個新的掛載點試試,比如C:data


謝邀

不存在「沒有被掛載的目錄」

由於我自己沒有去調研過「掛載」的定義,所以我只能按照我的理解跟你講一講。

安裝linux的時候,最暴力的分配硬碟的方法是全掛到/上。

其他的一般可以考慮把 /home /boot 這些單獨掛,即,一塊分區對應 / 一塊分區對應 /home, 一塊分區對應 /boot。 如果你用過windows,這就像一個c盤,一個d盤等等,windows上一個 盤 就是一塊硬碟分區,按「盤符」定義。

而linux本著一切皆文件的理念,直接把分區掛到文件夾上,不區分「盤符」

由於文件系統是建立在硬碟上的(當然部分文件夾如/tmp是掛內存的)所以不存在某個目錄沒被掛載這個概念。


沒掛載就不能進入。


根目錄也是被掛載的,所以「那些沒有被掛載的目錄」就是在根目錄所在設備。


硬碟是個圖書館,

硬碟上的文件系統就是書架,

每個書架上掛著一本圖書登記薄,對應著文件列表。

掛載就相當於將圖書登記薄放在圖書管理員的手裡了,

要找那本書,照著總表中的登記位置去看就是了。

能在linux系統中訪問到的目錄,肯定是已經被掛載了的,不然你也讀不到東西呀,

你沒有手動去掛載,不代表著系統沒有做掛載操作!


操作系統有個掛載樹,因為一個操作系統不可能只有一個文件系統,所以為了抽象化這些東西,把特定的文件系統操作關聯到inode上,而把這些文件系統的root集合起來成一個掛載樹

啟動過程中將mount一個根目錄比如extfs,然後可以將/dev,/proc,/tmp等全掛載到這棵掛載樹上

在你查找一個特定的路徑時,先在掛載樹上查找掛載點,然後在這個inode上繼續根據具體的文件系統操作往下查找


先更正,能掛載的必須是文件系統,不是你說的分區這個概念。你得先明白什麼是文件系統,然後再說文件系統掛載後的使用。

掛載可以理解為插樂高積木(我閨女最近很愛玩這個;),首先系統一定要先有一個根文件系統並掛載在"/"上,你可以理解為你用樂高做了一個機器人,在系統啟動後這就是根文件系統了。之後你想再掛載新文件系統,就好像你又用樂高插出一把劍(一個新的獨立文件系統),你可以把劍插在機器人任何能插的地方,比如右手上。劍是獨立的,你改變劍的形狀並不影響機器人本身,將來你不想用這把劍了可以直接拆下來(卸載)收好,也可以再插(掛載)一把槍(另一個文件系統)上去。

文件系統掛載時有覆蓋(/遮蓋)關係,如果你所要掛載的掛載點(/目錄)下面有文件或已掛載的文件系統,那麼新掛載的文件系統會遮蓋其下面的內容。這點和樂高不同,比如你又做了一個新的機器人右手臂,你得自己把原右手臂連同手上的東西拆下來,再插上新作的。而實際的文件系統掛載不需要先卸載,新文件系統(右手臂)會直接從掛載點(右臂介面)開始覆蓋(/隱藏)掛載點(介面)以下所有的原內容。而卸載後原內容又會顯現出來。


我們在linux上對文件系統的增(mkdir,touch)刪(rm)改查(cat,more,ls)等人性化的操作,本質上都是在操作機器的硬體資源,尤其是硬碟,文件系統就是軟體層面的對硬碟的存儲資源的組織,通常是一個樹結構的數據結構,有根節點,普通節點和葉子節點,這些節點就是文件系統中的目錄項,文件項,索引節點那些東西,裡面記錄了軟體層面一個目錄或文件例如/home/app/1.dat的大小,許可權等屬性信息,但是這個文件最終得和實際硬碟上某柱面某扇區某磁軌的一塊地方關聯起來,你敲上面那些命令,或者調用函數進行讀寫的時候,發生系統內核態調用,真正幫你把你操作的文件關聯到磁碟上的那塊地方,驅動著硬體,也就是磁頭和硬碟轉軸運動來進行讀寫,機器哈哈哈哈哈響個不停。

mount就是把軟體層面總目錄(根目錄)和硬體層面某一個分區(硬碟上切好的一塊)關聯起來


簡單講,沒有掛載的,一般就沒有這個目錄。

linux是把各種設備,抽象為文件的,文件讀寫就是設備讀寫,設備驅動程序就是做這件事。各種硬體設備名,位於/dev目錄下。系統啟動時,一般通過udev程序自動判斷並載入硬體設備。

比如硬碟設備通常就是/dev/sda1、.....,根據/etc/fstab文件內的設置,載入為/boot 目錄、/根目錄等等。USB設備就載入為/media/xxx目錄。如果沒有這些設備,通常要麼目錄不存在,要麼是空目錄。

另外有一些像虛擬光碟、壓縮文件之類的數據文件,也可以用掛載命令,用特定的格式協議,掛載為一個目錄。


答案都怎麼帶歪了

沒被掛載的目錄是真實的目錄,如果一個u盤掛到這個目錄,這個目錄下面的文件就是u盤的內容。該目錄真實的文件會被屏蔽。

另外,注意下上面這句話中的「被」這個字。


就和內存條一樣,掛載就像插上內存條,這樣內存才能用;取消掛載就像拔下內存條,雖然內存條還在你手上,但就是不能用,因為220伏的電壓不知道怎麼接到內存上


沒掛載分區的目錄就仍然只是目錄 和父目錄在同一塊磁碟上

如果一直上溯到根目錄 它所對應的就是操作系統所安裝的默認磁碟分區


這是Linux的文件系統的結構圖,所謂的掛載的意思,就是讓你可以通過這個文件系統來訪問到你存儲設備裡面的東西。

系統啟動的時候在/etc/fstab文件裡面記錄了我們需要mount的信息:

假如你插入了一個 CD-ROM.你裡面有個文件/file/hahaha.txt,設備地址為/dev/cdrom(所有設備在linux下都是文件形式存在的,所以設備會在/dev文件下面),這時候如果你想訪問裡面的數據,你需要建立一個文件來映射該設備,假設你建立了一個/media/cdrom的文件夾,執行下面的命令

mount /dev/cdrom /media/cdrom 就可以通過/media/cdrom/file/hahaha.txt訪問到CD-ROM裡面的數據了。

如果使用完畢,你也可以使用umount /media/cdrom將設備卸載。

簡單概括:你去青樓,你想訪問姑娘,你必須找老鴇(mount),然後離開的時候給老鴇錢(unmount)就可以了!


我來說說我的理解吧。

首先你要明白linux是以一切皆文件的理念。文件呢一切都從/根開始。然後從根里讀取所需文件。系統都在這裡面。當然也包括你說的『沒掛載』的目錄了。為什麼你會認為沒掛載呢,因為一些系統默認幫你自動掛載了。

為什麼要掛載呢? 因為系統都是從/目錄開始認路。你不掛載,系統去哪找到他們呢?

你說想知道你進入的目錄在哪裡? 我覺得你應該入門沒學好。pwd應該是前十個命令必須學會的。 pwd會告訴你目前在哪裡。如果系統沒有成妖成仙了的情況,你無論進到哪裡沒掛載什麼鬼的都應該在/根的子孫目錄下。


推薦閱讀:

你的Linux系統是否經常更新呢?
Linux 各個發行版與 OS X 相比哪個寫代碼更舒服?為什麼?
GNU/Linux,愛憎由之
基於 Coroutine 的非同步 RPC 框架示例(C++)
遷移linux系統到新硬碟

TAG:Linux |