【Linux】Linux的挂载原理 |MOUNT|挂载NAS
目錄
零、常用掛載命令
一、Linux的掛載原理
1、概念
2、舉例
3、補充
4、LINUX文件結構和WINDOWS的不同
5、掛載文件系統
6、mount結構與原理?
?7、mount 和umount命令
二、Linux 如何掛載NAS盤?
三、錯誤記錄?
零、常用掛載命令
掛載:mount? ? /dev/sda3(要掛載的分區)? ? /mnt(掛載點)
借掛:umount? ?文件分區/掛載點
例子:
$ umount? ?/dev/sdb1
$ mount? ?/dev/sdb1 /mnt
$ cd /mnt
$ umount? ?/dev/sdb1? ?卸載不掉,推出/mnt目錄即可
如果出現device is busy報錯,可以使用以下命令查看使用文件系統的進程:
? ? ? ? ? ? ? ? ? $ fuser–m /mnt
也可以使用命令lsof查看正在被使用的文件:list open file
? ? ? ? ? ? ? ? ? $ lsof? /mnt
一、Linux的掛載原理
1、概念
掛載:指的就是將設備文件中的頂級目錄連接到Linux根目錄下的某一目錄,訪問此目錄就等同于訪問設備文件。
Linux系統中"一切皆文件",所有文件都放置在以根目錄為樹根的樹形目錄結構中。
在Linux看來,任何硬件設備也都是文件,它們各有自己的一套文件系統。
當在Linux系統中使用這些硬件設備時,只有將硬件設備的文件目錄? 嫁接到Linux本身的文件目錄,硬件設備才能為我們所用。這里的嫁接過程我們稱之為"掛載"。
既將一個文件系統的頂層目錄掛到另一個文件系統的子目錄上,使它們成為一個整體,稱為掛載;
注意:糾正一個誤區,并不是根目錄下任何一個目錄都可以作為掛載點,由于掛載操作會使得原有目錄中文件被隱藏,因此根目錄以及系統原有目錄都不要作為掛載點,會造成系統異常甚至崩潰,掛載點最好是新建的空目錄。
2、舉例
(摘抄自:http://c.biancheng.net/view/2859.html)
舉個例子,我們想通過命令行訪問某個 U 盤中的數據,圖 1 所示為 U 盤文件目錄結構和 Linux 系統中的文件目錄結構。
圖 1 U 盤和 Linux 系統文件目錄結構
圖 1 中可以看到,目前 U 盤和 Linux 系統文件分屬兩個文件系統,還無法使用命令行找到 U 盤文件,需要將兩個文件系統進行掛載。
接下來,我們在根目錄下新建一個目錄 /sdb-u,通過掛載命令將 U 盤文件系統掛載到此目錄,
mount /dev/sdb1? ? ? /sdb-u
掛載效果如圖 2 所示。
圖 2 文件系統掛載
可以看到,U 盤文件系統已經成為 Linux 文件系統目錄的一部分,此時訪問 /sdb-u/ 就等同于訪問 U 盤。
前面講過,根目錄下的 /dev/ 目錄文件負責所有的硬件設備文件,事實上,當 U 盤插入 Linux 后,系統也確實會給 U 盤分配一個目錄文件(比如 sdb1),就位于 /dev/ 目錄下(/dev/sdb1),但無法通過 /dev/sdb1/ 直接訪問 U 盤數據,訪問此目錄只會提供給你此設備的一些基本信息(比如容量)。
總之,Linux 系統使用任何硬件設備,都必須將設備文件與已有目錄文件進行掛載。
3、補充
前面講過,根目錄下的/dev/目錄文件負責所有的硬件設備文件。
事實上,當U盤插入Linux后,系統也確實會給U盤分配一個目錄文件(比如:sdb4)。
位于/dev/sdb4,但是無法通過/dev/sdb4/直接訪問U盤數據。
我們只要執行mount操作后就可以訪問U盤數據了。
總之,Linux系統使用任何硬件設備,都必須將設備文件與已有目錄文件進行掛載。
4、LINUX文件結構和WINDOWS的不同
摘自:https://www.freesion.com/article/4836457591/
Linux是多用戶操作系統,所以制定一個固定的目錄規劃有助于對系統文件和不同的用戶文件進行統一管理——Linux采用標準的樹狀目錄結構
Windows不同的是,在最頂層的文件目錄不是唯一的(多個盤符)
5、掛載文件系統
linux系統中每個分區都是一個文件系統,都有自己的目錄層次結構。linux會將這些分屬不同分區的、單獨的文件系統按一定的方式形成一個系統的總的目錄層次結構;這里所說“按一定方式”就是指的掛載
通俗的說,將一個文件系統的頂層目錄掛到另一個文件系統的子目錄上,使它們成為一個整體,稱為掛載;我們把這個子目錄叫“掛載點”
注意幾點:
1. 掛載點必須是一個目錄
2. 一個分區掛載在一個已存在的目錄上,這個目錄可以不為空,但掛載后這個目錄下以前的內容將不可用;對于其他操作系統建立的文件系統的掛載也是這樣
掛載前要了解linux是否支持所要掛載的文件系統格式
6、mount結構與原理?
摘自:https://blog.csdn.net/jinking01/article/details/105683360
在 Kernel 世界里,掛載是一項很了不起的特性,它可以將不同類型的文件系統組合成一個有機的整體,從使用者角度來看不同的文件系統并沒有什么區別,那么 Kernel 是怎么做到呢?
首先,Kernel 會為每個文件系統準備一個 mount 結構,然后再把這個結構加入到 vfs 這顆大樹上就好了。
這么一個小小的 mount 結構就這么神奇?
請看圖,一個 mount 中有三個很重要的成員,他們分別指向父 mount 結構(6)、本文件系統自己的根目錄(7)和本文件系統的掛載點(8)。
前兩個很好理解,那么掛載點是什么呢?簡單地說掛載點就是父級文件系統的某個目錄(父級文件系統中的目錄表示),一旦將某個文件系統efs掛載到某個目錄上/home/a/,這個目錄/home/a/就成了該文件系統efs的根目錄了。并且該目錄/home/a/的標志位 DCACHE_MOUNTED 將被置位,這將表明這個目錄已經是一個掛載點了,如果要訪問這個目錄/home/a/的話就要順著 mount 結構訪問另一個文件系統了(因為efs能力處理/home/a/以下的內容,之上的內容就是另一個文件系統里的內容了),原來的內容將變得不可訪問。
????現在我們從圖的左邊講起,帶你一窺 mount 的風采。一個進程有一個叫 root 的 path 結構,它就是本進程的根目錄(大多數情況下它就是系統根目錄),root 中兩個成員分別指向某個文件系統的 mount 結構(其實是指向 mount.mnt 但這樣理解沒問題)(1)(rootfs文件系統的mount結構)和該文件系統的根目錄(2)(就是/目錄),這個文件系統就是所謂根文件系統(在圖中就是 rootfs)。由于它是根文件系統,所以它的父 mount 結構就是它自己(4)它的掛載點就是它自己的根目錄(5)。
但是 rootfs 只是一個臨時的根文件系統,在 Kernel 的啟動過程中加載完 rootfs 之后會緊接著解壓縮 initramfs 到 rootfs 中,這里面包括了驅動以及加載真正的根文件系統的工具,Kernel 通過加載這些驅動、使用這些工具實現了掛載真正的根文件系統。之后 rootfs 將退出歷史舞臺,但作為文件系統的總根 rootfs 并不會被卸載(注)。圖中 fs1 就是所謂的真正的根文件系統,Kernel 把它掛載到了 rootfs 的根目錄上(8),并且將它的父 mount 結構指向了 rootfs(6)。這時訪問根目錄的話就會直接訪問到 fs1 的根目錄,而 rootfs 就好像不存在了一樣。
????再看 fs1,他有一個子目錄“mnt/”,以及“mnt/”的子目錄“a”,此時路徑“/mnt/a/”是可訪問的。但現在我們還有另一個文件系統 fs2,我們把它掛載到“/mnt/”上會發生什么呢?首先 fs2 的父 mount 將指向 fs1(9),然后 fs2 的掛載點將指向 “/mnt/”(10),同時“mnt/”的 DCACHE_MOUNTED 將被置位。此時路徑“/mnt/a/”就不可訪問了,取而代之的是“/mnt/b/”。本著不怕麻煩的精神我們再折騰一下,把 fs3 也掛載到“/mnt/”上,這時和掛載 fs2 一樣父 mount 將指向 fs2(11),但是掛載點應該指向哪里呢?答案是 fs2 的根目錄(12)。這時“/mnt/b/”也消失了,我們只能看見“/mnt/c”了。這樣整個結構就形成了一個掛載的序列,最后掛載的在序列末尾,Kernel 可以很容易的通過這個序列找到最初的掛載點和最終的文件系統。
????在順序查找的情景下,當遇到一個目錄時 Kernel 會判斷這個目錄是不是掛載點(檢查 DCACHE_MOUNTED 標志位),如果是就要找到掛載到這個目錄的文件系統,繼而找到該文件系統的根目錄,然后在判斷這個根目錄是不是掛載點,如果是那就再往下找直到某個文件系統的根目錄不再是掛載點。
????反向查找也和順序查找類似。
?7、mount 和umount命令
mount 參數 設備名稱 掛載點
-a 安裝在/etc/fstab文件中列出的所有文件系統.
-l 列出當前已掛載的設備,文件系統名稱和掛載點
-o 指定掛載選項,
-t 文件系統類型,指定設備的文件系統類型,
--ext2?
--Msdos
--Vfat
--Nfs
--iso9660
--Audo 自動檢測文件系統
在Linux中,我們通過mount命令將格式化好的磁盤分區掛載到一個目錄上。
mount? ? /dev/sda3(要掛載的分區)? ? /mnt(掛載點)
常用參數:
不帶參數的mount命令會顯示所有已掛載的文件系統。$ mount
? ? ? ? ?-t ?指定文件系統的類型
? ? ? ? ?-o 指定掛載選項
? ? ? ? ? ? ? ? ? ?ro,rw ? ? ? ?以只讀或讀寫形式掛載,默認是rw
? ? ? ? ? ? ? ? ? ?sync ? ? ? ? ?代表不使用緩存,而是對所有操作直接寫入磁盤(防止斷電等異常情況引起數據丟失)
? ? ? ? ? ? ? ? ? ?async ? ? ? ?代表使用緩存,默認是async
? ? ? ? ? ? ? ? ? ?noatime ? 代表每次訪問文件時不更新文件的訪問時間(accesstime)
? ? ? ? ? ? ? ? ? ?atime ? ? ? ?代表每次訪問文件時更新文件的訪問時間
? ? ? ? ? ? ? ? ? ?remount ?重新掛載文件系統
umount:命令umount用來卸載已掛載的文件系統,相當于windows中u盤彈出
? ? ? ? ? ? ? ? ? umount? ?文件分區/掛載點
? ? ? ? ? ? ? ? ? umount? ? /dev/sda3 ?== ? ?umount /mnt
如果出現device is busy報錯,則表示該文件系統正在被使用,無法卸載,可以使用以下命令查看使用文件系統的進程:
? ? ? ? ? ? ? ? ? $ fuser–m /mnt
也可以使用命令lsof查看正在被使用的文件:list open file
? ? ? ? ? ? ? ? ? $ lsof? /mnt
Example:
$ umount? ?/dev/sdb1
$ mount? ?/dev/sdb1 /mnt
$ cd /mnt
$ umount? ?/dev/sdb1? ?卸載不掉,推出/mnt目錄即可
自動掛載:
配置文件/etc/fstab用來定義需要自動掛載的文件系統,fstab中每一行代表一個掛載配置,格式如下:
/dev/sdb3 ? ? /mnt ? ? ? ?ext4? ? ? ? ? ?defaults ? ? ? ? ? ? 0 0 ? ?(之間用Tab隔開進行對齊)
需要掛載的設備 ? ? 掛載點 ? ? ? ? ? ? ?文件系統 ? ? ? ? 掛載選項 ? ? ? ? dump,fsck相關選項
要掛載的設備也可以使用LABEL進行識別,使用LABEL=LINUXCAST取代/dev/sdb3
$ mount? –a命令會掛載所有fstab中定義的自動掛載項。
Linux下用e2label命令來設定分區的label,其用法很簡單:(查看或修改我們的卷標)
e2label 分區 [新label]
如果后面指定新label則為分區設定新label;如果后面不指定label,則顯示分區的當前label。
$ man e2label
Name: e2label – change the label on anext2/ext3/ext4 file system
$ e2label device [new label]
E2label will display or change the file systemlabel on the ext2,ext3,or ext4 file system located on device.
If the optional argument new-label is notpresent, e2label will simply display the current file system label.
If ?the ?optional ?argument ?new-label ?is present,then e2label will set the file system label to be new-label.
$ mount -L LabelCast/mnt/test?
(label為LabelCast的分區掛載到/mnt/test)?
fstab中根據label來掛載: $ LABEL= LabelCast ?/mnt/test ext3 defaults 1 1?
原文鏈接:https://blog.csdn.net/dongyanxia1000/article/details/60957719
參考文獻
linux 掛載_圖解Linux中的掛載原理?https://blog.csdn.net/weixin_39573598/article/details/110810698
二、Linux 如何掛載NAS盤?
linux下需要將nas盤掛在到系統中;
方法:
首先本地創建一個掛載目錄:
? ? mkdir /mnt/nas
掛載目錄:
mount? -o? username=flt,password=r9SDy,iocharset=utf8? ?//192.168.2.90/產品部? ?/mnt/nas
?
參數說明:
? ? ? ? username=flt ? ? ? ? ? ? ? ? ? ? ? ?[nas用戶名]
? ? ? ? password=a^6r9dSDy ? ? ? ? ? ? ? ? ?[nas密碼] ? ??
? ? ? ? iocharset=utf8 ? ? ? ? ? ? ? ? ? ? ?[路徑中如有中文則添加此項,支持中文路徑]?
? ? ? ? //192.168.2.90/產品部 ? ? ? ? ? ? ? ?[nas路徑]
? ? ? ? /mnt/nas ? ? ? ? ? ? ? ? ? ? ? ? ? ?[掛載路徑]
參數之間用,(逗號)分隔。
如果密碼中有,號,則以上命令無法執行完成,因為需要參數之間用“,”逗號分隔,導致會認為提前結束了。
所以可以用下面方法,創建一個環境變量:
export PASSWD='!3\5g6,B'
mount -o username=mkx,iocharset=utf8 //192.168.10.90/產品部 /mnt/nas
注:shell會自動查找PASSWD
使用完成后將其卸載:
umount -l /mnt/nas
原文鏈接:https://blog.csdn.net/xiaominggunchuqu/article/details/78912330
三、錯誤記錄?
FS-Cache: Netfs 'nfs' registered for caching
問題原因是在服務器上沒有安裝nfs。使用如下命令安裝
yum -y install nfs-utils
https://blog.csdn.net/w892824196/article/details/103934696
總結
以上是生活随笔為你收集整理的【Linux】Linux的挂载原理 |MOUNT|挂载NAS的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux挂载共享目录
- 下一篇: 跨境电商亚马逊中东站和日本站优缺点解析