Linux知识点整理(五)—— Linux 磁盘与文件系统管理
一、Linux磁盤與文件系統管理
1、磁盤組成與分割
磁盤的物理組成,整顆磁盤的組成主要有:
- 圓形的磁盤(主要是記錄數據的部分);
- 機械手臂,與在機械手臂上的磁盤讀取頭(可讀寫磁盤盤上的數據);
- 主軸馬達,可以轉動磁盤,讓機械手臂的讀取頭在磁盤盤上讀寫數據。
從上面可以知道,數據保持與讀取的重點在于磁盤盤,而磁盤盤上的物理組成則為:
- 磁區為最小的物理存儲保存單位,且依據磁盤設計的不同,目前有512bytes與4k兩種格式;
- 將磁區組成一個圓,就是一個磁柱;
- 早期的分割主要是以磁柱為最小分割單位,現在的分割通常使用磁區為最小分割單位(每個磁區都有其號碼);
- 磁盤分割表中主要有兩種格式,一個是限制較多的MBR分割表,一種是較新且限制較少的GPT分割表;
- MBR分割表中,第一個磁區最重要,里面有:(1)主要開機區(Master boot record, MBR)以及分割表(partition tables),其中MBR占有446bytes,而parition table占有64bytes;
- GPT分割表處理分割數量擴充較多之外,支持的磁盤容量也可以超過2TB。
磁盤的文件命名部分,基本上,所有的實體磁盤的文件名都被仿真為/dev/sd[a-p]的格式,第一顆磁盤文件名為/dev/sda。而分區的文件名若以第一顆磁盤為例,則為 /dev/sda[1-128] 。除了實體磁盤之外,虛擬機的磁盤通常為 /dev/vd[a-p] 的格式。
- /dev/sd[a - p] [1-128]:為實體磁盤的磁盤文件名;
- /dev/vd[a-d] [1-128]:為虛擬磁盤的磁盤文件名
關于磁盤分割。以前磁盤分割最小單位經常時磁柱,但CentOS 7的分割軟件,已經將最小單位改為磁區了,所以容量大小的分割可以切的更細了。此外,由于新的大容量磁盤大多得使用GPT分割表才能夠使用全部的容量,因此過去那個MBR的傳統磁盤分割表限制就不會存在。
2、文件系統特征
磁盤分割完畢后還需要進行格式化,之后操作系統才能夠使用這個文件系統。為什么需要格式化?這是因為每種操作系統所設置的文件屬性/權限并不相同。為了存放這些文件文件系統所需要的數據,因此就需要將分區格式化,已成為操作系統能夠利用的【文件系統格式(filesystem)】。
由此知道,每種操作系統能夠使用的文件系統并不相同。Linux的正文件系統時Ext2。
傳統的磁盤文件與文件系統之應用中,一個分區就只能被格式化成為一個文件系統,所以我們可以說一個filesystem就是一個 partition。但是由于新技術的利用,例如我們常聽到的LVM與軟件磁盤數組(software raid), 這些技術可以將一個分區格式化為多個文件系統(例如LVM),也能夠將多個分區合成一個文件系統(LVM, RAID)! 所以說,目前我們在格式化時已經不再說成針對 partition 來格式化了, 通常我們可以稱呼一個可被掛載的數據為一個文件系統而不是一個分區喔!
文件系統是如何工作的?這與操作系統的文件數據有關。較新的操作系統的文件數據除了文件實際內容外,通常含有非常多的屬性。例如Linux操作系統的文件權限(rwx)與文件屬性(擁有者、群組、時間參數等)。文件系統通常將這兩部分數據分別存放在不同的區塊,權限與屬性放到inode中,至于實際數據則放到data block區塊中。另外還有一個超級區塊(superblock)會記錄下整個文件系統的信息。
每個inode與block都有編號,這三個數據的意義:
- superblock:記錄此filesystem的整體信息,包括inode/block的總量、使用量、剩余量,以及文件系統的格式與相關信息;
- inode:記錄文件屬性,一個文件占用一個inode,同時記錄此文件的數據所在的block號碼;
- block:實際記錄文件的內容,若文件太大就會占用多個block。
由于每個inode與block都有編號,而每個文件都會占用一個inode,inode內則有文件數據放置的block號碼。因此,我們可以知道的是,如果能夠找到文件的inode的話,那么自然就知道這個文件數據放置的block號碼,也就能夠讀出該文件的實際數據。這是比較高效的做法。
在上圖中,文件系統先格式化出inode與block的區塊,假設某一點的屬性與權限數據是放置到inode4號,而這個inode記錄了文件了數據的實際放置點位2, 7, 13, 15這四個block號碼,此時我們的操作系統能夠根據此來排列磁盤的讀取順序,可以一口氣將四個block內容讀出來。所以這個可以轉一圈就讀出文件的數據。與下面的FAT文件系統不同。
這種數據訪問的方法稱為索引文件系統。還有一種文件系統時FAT格式,比如(閃存),FAT這種格式的文件系統沒有inode存在,所以FAT沒有辦法將這個文件系統所有的block在一開始就讀取出來。每個block號碼都記錄在前一個block當作,它的讀取方式如下;
如果同一個文件數據寫入的 block 分散的太過厲害時,則我們的磁盤讀取頭將無法在磁盤轉一圈就讀到所有的數據, 因此磁盤就會多轉好幾圈才能完整的讀取到這個文件的內容。
磁盤重組是什么?需要磁盤重組的原因就是文件寫入的block過于離散化了,此時文件讀取的性能能將會變的很差所致。這個時候可以透過磁盤重組將同一個文件所屬的block匯整在一起。這樣數據的讀取會比較容易啊!
由于Ext2是索引文件系統,基本上不太需要常常進行磁盤重組,但是如果文件系統使用太久,常常刪除/編輯/添加文件時,那么還是可能造成文件數據太過離散化的問題。此時或許會需要進行重整一下的。
3、Linux的ETX2文件(inode)
Linux的文件除了原有的數據內容外,還有非常多的權限與屬性,這些權限與屬性是為了保證每個用戶所擁有數據的隱秘性。右面的的內容我們也知道filesystem 里面可能含有的 inode/block/superblock等。標準的Linux文件系統Ext2就是使用這種inode為基礎的文件系統。
inode的內容在記錄文件的權限與相關屬性,至于block區塊則是記錄文件的實際內容,而且文件系統一開始就是inode和block規劃好,除非重新格式化,否則inode和block固定后不再變動。但是如果我的文件系統高達數百GB時,那么將所有的inode和block通通放置在一起將是很不明智的選擇,因為inode與block的數量太龐大,不容易管理。
因此Ext2文件系統在格式化的時候基本是分區為多個區塊群組(block group)的,每個區塊群組都有獨立的 inode/block/superblock系統。
在整體的規劃中,文件系統最前面有一個開機磁區(boot sector),這個開機磁區可以安裝開機管理程序,這是非常重要的設計,因為如此以來我們就能夠將不同的開機管理程序安裝到個別的文件系統最前端,而不用覆蓋整顆磁盤唯一的MBR。
· data block(數據區塊)
data block 是用來放置文件內容數據的地方,在Ext2文件系統中所支持的block大小由1k, 2k以及4k三種而已。在格式化時block的大小就固定了,且每個block都有編號,以方便inode的記錄。不過要注意由于block大小的差異,會導致該文件系統能夠支持的最大磁盤容量與最大單一文件容量并不相同。
| 最大單一文件限制 | 16GB | 256GB | 2TB |
| 最大文件系統總容量 | 2TB | 8TB | 16TB |
你需要注意的是,雖然 Ext2 已經能夠支持大于 2GB 以上的單一文件容量,不過某些應用程序依然使用舊的限制, 也就是說,某些程序只能夠捉到小于 2GB 以下的文件而已,這就跟文件系統無關了!
Ext2文件系統的基本限制:
- 原則上,block的大小與數量在格式化完就不能再改變(除非重新格式化);
- 每個block內最多只能放置一個文件的數據;
- 承上,如果文件大于block的大小,則一個文件就會占用多個block數量;
- 承上,如果文件小于block,則該block的剩余容量就不能再被使用,造成磁盤空間浪費。
由于每個 block 僅能容納一個文件的數據而已,因此如果你的文件都非常小,但是你的 block 在格式化時卻選用最大的 4K 時,可能會產生一些容量的浪費。
那既然這樣,我們將block大小換成1k。這也不妥,因為弱國block較小的話,那么大型文件將會占用數量更多的block,而inode也要記錄更多的block號碼,此時可能會導致文件系統不良的讀寫性能。
所以再進行文件系統的格式化之前,請先想好該文件系統預計使用的情況。
· inode table(inode 表格)
inode內容記錄文件的屬性以及該文件實際數據是放置在幾號block內,基本上,inode記錄的文件數據至少有以下這些:
- 該文件訪問模式(read/write/execute);
- 該文件擁有者與群組(owner/group);
- 該文件的容量;
- 該文件創建或狀態改變的時間(ctime);
- 最近修改的時間(atime);
- 定義文件特征的旗標(flag), 如SetUID;
- 該文件真正內容的指向(pointer);
inode的數量與大小也是在格式化時就已經固定了。
- 每個inode大小均為固定128bytes(新的etx4與xfs可設置到256bytes)
- 每個文件都僅會占用一個inode而已;
- 承上,因此系統文件能創建的文件數目與inode數量有關;
- 系統讀取文件時需要先找打inode,并分析inode所記錄的權限與用戶是否符號,若符合才能夠實際讀取block的內容。
分析ETX2的inode/block與文件大小的關系。inode要記錄的數據非常多,但只有128bytes,而inode記錄一個block號碼要花掉4bytes,假設一個文件有幾萬個block,inode無法記錄。inode的解決方案是將inode記錄block號碼的區域定義為12個直接,一個間接,一個雙間接與一個三間接記錄區。
上圖最左邊為 inode 本身 (128 bytes),里面有 12 個直接指向 block 號碼的對照,這 12 筆記錄就能夠直接取得 block 號碼啦! 至于所謂的間接就是再拿一個 block 來當作記錄 block 號碼的記錄區,如果文件太大時, 就會使用間接的 block 來記錄號碼。同理,如果文件持續長大,那么就會利用所謂的雙間接,第一個 block 僅再指出下一個記錄號碼的 block 在哪里, 實際記錄的在第二個 block 當中。依此類推,三間接就是利用第三層 block 來記錄號碼。
-
間接: 256*1K=256K
每筆 block 號碼的記錄會花去 4bytes,因此 1K 的大小能夠記錄 256 筆記錄,因此一個間接可以記錄的文件大小如上; -
雙間接: 2562561K=2562K
第一層 block 會指定 256 個第二層,每個第二層可以指定 256 個號碼,因此總額大小如上; -
三間接: 256256256*1K=2563K
第一層 block 會指定 256 個第二層,每個第二層可以指定 256 個第三層,每個第三層可以指定 256 個號碼,因此總額大小如上; -
總額:將直接、間接、雙間接、三間接加總,得到 12 + 256 + 256256 + 256256*256 (K) = 16GB
但這個方法不能用在 2K 及 4K block 大小的計算中, 因為大于 2K 的 block 將會受到 Ext2 文件系統本身的限制,所以計算的結果會不太符合之故。
· superblock(超級區塊)
Superblock 是記錄整個 filesystem 相關信息的地方, 沒有 Superblock ,就沒有這個 filesystem 了。
記錄的信息主要有:
- block 與 inode 的總量;
- 未使用與已使用的 inode / block 數量;
- block 與 inode 的大小 (block 為 1, 2, 4K,inode 為 128bytes 或 256bytes);
- filesystem 的掛載時間、最近一次寫入數據的時間、最近一次檢驗磁盤 (fsck) 的時間等文件系統的相關信息;
- 一個 valid bit 數值,若此文件系統已被掛載,則 valid bit 為 0 ,若未被掛載,則 valid bit 為 1 。
Superblock 是非常重要的,因為這個文件系統的基本信息都寫在這里,一般來說, superblock 的大小為 1024bytes。
此外,每個 block group 都可能含有 superblock !但是一個文件系統應該僅有一個 superblock 而已,那是怎么回事啊? 事實上除了第一個 block group 內會含有 superblock 之外,后續的 block group 不一定含有 superblock , 而若含有 superblock 則該 superblock 主要是做為第一個 block group 內 superblock 的備份。
·Filesystem Description(文件系統描述說)
這個區段可以描述每個 block group 的開始與結束的 block 號碼,以及說明每個區段 (superblock, bitmap, inodemap, data block) 分別介于哪一個 block 號碼之間。這部份也能夠用 dumpe2fs 來觀察的。
·block bitmap(區塊對照表)
從 block bitmap 當中可以知道哪些 block 是空的,因此我們的系統就能夠很快速的找到可使用的空間來處置文件。
同樣的,如果你刪除某些文件時,那么那些文件原本占用的 block 號碼就得要釋放出來, 此時在 block bitmap 當中相對應到該 block 號碼的標志就得要修改成為『未使用中』!這就是 bitmap 的功能。
·inode bitmap(inode 對照表)
這個其實與 block bitmap 是類似的功能,只是 block bitmap 記錄的是使用與未使用的 block 號碼, 至于 inode bitmap 則是記錄使用與未使用的 inode 號碼!
** dumpe2fs: 查找 Ext 家族 superblock 信息的指令
# dumpe2fs [-bh] 設備文件名 選項與參數: -b :列出保留為壞軌的部分(一般用不到吧!?) -h :僅列出 superblock 的數據,不會列出其他的區段內容!4、與目錄樹的關系
從上面知道,在Linux系統下,每個文件(不管是一般文件還是目錄文件)都會占用一個inode,且依據文件內容的大小來分配多個block給該文件使用。我們知道目錄的內容在記錄文件名, 一般文件才是實際記錄數據內容的地方。那么目錄與文件在文件系統當中是如何記錄數據的呢?
· 目錄
當我們在 Linux 下的文件系統創建一個目錄時,文件系統會分配一個 inode 與至少一塊 block 給該目錄。其中,inode 記錄該目錄的相關權限與屬性,并可記錄分配到的那塊 block 號碼; 而 block 則是記錄在這個目錄下的文件名與該文件名占用的 inode 號碼數據。也就是說目錄所占用的 block 內容在記錄如下的信息:
目錄并不只會占用一個 block 而已,也就是說: 在目錄底下的文件數如果太多而導致一個 block 無法容納的下所有的文件名與 inode 對照表時,Linux 會給予該目錄多一個 block 來繼續記錄相關的數據。
· 文件:
當我們在 Linux 下的 ext2 創建一個一般文件時, ext2 會分配一個 inode 與相對于該文件大小的 block 數量給該文件。例如:假設我的一個 block 為 4 Kbytes ,而我要創建一個 100 KBytes 的文件,那么 linux 將分配一個 inode 與 25 個 block 來保存該文件! 但同時請注意,由于 inode 僅有 12 個直接指向,因此還要多一個 block 來作為區塊號碼的記錄!
· 目錄樹讀取:
過上面的說明可以清楚的知道 inode 本身并不記錄文件名,文件名的記錄是在目錄的 block 當中。 為什么要有『添加/刪除/更名文件名與目錄的 w 權限有關』東西!那么因為文件名是記錄在目錄的 block 當中, 因此當我們要讀取某個文件時,就務必會經過目錄的 inode 與 block ,然后才能夠找到那個待讀取文件的 inode 號碼, 最終才會讀到正確的文件的 block 內的數據。
由于目錄樹是由根目錄開始讀起,因此系統透過掛載的信息可以找到掛載點的 inode 號碼,此時就能夠得到根目錄的 inode 內容,并依據該 inode 讀取根目錄的 block 內的文件名數據,再一層一層的往下讀到正確的文件名。
5、EXT2/EXT3/EXT4 文件的訪問與日志式文件系統的功能
如果想要添加一個文件。此時文件系統的行為是:
- 先確定用戶對于欲添加文件的目錄是否具有w與x的權限,若有的話才能添加;
- 根據inode bitmap找到沒有使用的inode號碼,并將新文件的權限/屬性寫入;
- 根據block bitmap找到沒有使用的block號碼,并將實際的數據寫入block中,且更新inode的block指向數據;
- 將剛剛寫入的inode與block數據同步更新inode bitmap與block bitmap并更新superblock的內容。
一般來說,將inode table與data block稱為數據存放區域,至于其它的區段稱為metadata(中介數據)。
· 數據的不一致狀態
數據不一致指的是寫入的數據僅有inode table與data block而已。最后一個同步更新中介數據的步驟并沒有做完,此時就會發生metadata的內容與實際數據存放區產生不一致的情況了。
· 日志式文件系統
為了避免上述提到的不一致情況的發生,解決方案是:如果我們在filesystem當中規劃出一個區塊,該區塊專門在記錄寫入或修訂文件時的步驟,也就說:
- 1、預備:當系統要寫入一個文件系統時,會先在日志記錄區塊中記錄某個文件準備要寫入的信息;
- 2、實際寫入:開始寫入文件的權限與數據;開始更新metadata的數據;
- 3、結束:完成數據與metadata的更新后,在日志記錄區當中完成該文件的記錄。
6、Linux文件系統的運作
我們知道所有的數據都得要加載到內存后CPU才能對該數據進行處理,想一想,如果編輯一個很大的文件,在編輯過程中又頻繁的要系統寫入磁盤中,由于磁盤寫入的速度比內存慢得多,效率低下。
為解決上面效率的問題,Linux使用的方式是透過一個稱為異步處理的方式。
異步處理是這樣的:當系統加載一個文件到內存后,如果該文件沒有被更動過,則在內存區段的文件數據會被設置為干凈(clean)的。 但如果內存中的文件數據被更改過了(例如你用 nano 去編輯過這個文件),此時該內存中的數據會被設置為臟的 (Dirty)。此時所有的動作都還在內存中運行,并沒有寫入到磁盤中! 系統會不定時的將內存中設置為『Dirty』的數據寫回磁盤,以保持磁盤與內存數據的一致性。
Linux 系統上面文件系統與內存有非常大的關系:
- 系統會將常用的文件數據放置到主內存的緩沖區,以加速文件系統的讀/寫;
- 承上,因此 Linux 的物理內存最后都會被用光!這是正常的情況!可加速系統性能;
- 你可以手動使用 sync 來強迫內存中設置為 Dirty 的文件回寫到磁盤中;
- 若正常關機時,關機指令會主動調用 sync 來將內存的數據回寫入磁盤內;
- 但若不正常關機(如跳電、當機或其他不明原因),由于數據尚未回寫到磁盤內, 因此重新開機后可能會花很多時間在進行磁盤檢驗,甚至可能導致文件系統的損毀(非磁盤損毀)。
7、XFS文件系統簡介
· EXT家族問題:支持度最廣,但格式化超慢!
Ext 文件系統家族對于文件格式化的處理方面,采用的是預先規劃出所有的 inode/block/meta data 等數據,未來系統可以直接取用, 不需要再進行動態配置的作法。這個作法在早期磁盤容量還不大的時候還算 OK 沒啥問題,但現在,磁盤容量越來越大,傳統的 MBR 都已經被 GPT 所取代,系統要預先分配inode與block消耗時間會非常多。
· XFS 文件系統的配置
基本上xfs就是一個日志式文件系統,CentOS 7將其當缺省文件系統。
xfs文件系統在數據的分布上,主要規劃為三部分:一個數據區(data section), 一個文件系統活動登入區(log section)以及一個即時運作區(realtime section):
-
數據區(data section)
基本上,數據區跟之前談到的ext家族一樣,包括inode/data block/superblock等數據,都放置在這個區塊。這個數據區跟ext的blokc group類似,也是分為多個保存區群組來分別放置文件系統所需要的數據。每個保存群組都包含了
? (1)整個文件系統的superblock
(2)剩余空間的管理機制
(3)inode的分配與追蹤。
此外,inode與block都是系統需要用到時,這才動態產生,所以格式化動作超級快。
另外,與ext家族不同的是,xfs的block與inode有多種不同的容量可供設置,block 容量可由 512bytes ~ 64K 調配,至于 inode 容量可由 256bytes 到 2M 這么大!不過,大概還是保留 256bytes 的默認值就很夠用了!
-
文件系統活動登入去(log section)
在登錄區這個區域主要被用來紀錄文件系統的變化,其實有點像是日志區啦!文件的變化會在這里紀錄下來,直到該變化完整的寫入到數據區后, 該筆紀錄才會被終結。如果文件系統因為某些緣故 (例如最常見的停電) 而損毀時,系統會拿這個登錄區塊來進行檢驗,看看系統掛掉之前, 文件系統正在運作些啥動作,借以快速的修復文件系統。
因為系統所有動作的時候都會在這個區塊做個紀錄,因此這個區塊的磁盤活動是相當頻繁的!xfs 設計有點有趣,在這個區域中, 你可以指定外部的磁盤來作為 xfs 文件系統的日志區塊。
-
即時運作區(realtime section)
當有文件要被創建時,xfs 會在這個區段里面找一個到數個的 extent 區塊,將文件放置在這個區塊內,等到分配完畢后,再寫入到 data section 的 inode 與 block 去。
** xfs_info 觀察superblock內容
# xfs_info 掛載點|設備文件名二、文件系統的簡單操作
1、磁盤與目錄的容量
· df:列出文件系統的整體磁盤使用量
# df [-ahikHTm] [目錄或文件名] 選項與參數: -a :列出所有的文件系統,包括系統特有的 /proc 等文件系統; -k :以 KBytes 的容量顯示各文件系統; -m :以 MBytes 的容量顯示各文件系統; -h :以人們較易閱讀的 GBytes, MBytes, KBytes 等格式自行顯示; -H :以 M=1000K 取代 M=1024K 的進位方式; -T :連同該 partition 的 filesystem 名稱 (例如 xfs) 也列出; -i :不用磁盤容量,而以 inode 的數量來顯示由于 df 主要讀取的數據幾乎都是針對一整個文件系統,因此讀取的范圍主要是在 Superblock 內的信息, 所以這個指令顯示結果的速度非常的快速!
· du:評估文件系統的磁盤使用量(常用在推估目錄所占容量)
# du [-ahskm] 文件或目錄名稱 選項與參數: -a :列出所有的文件與目錄容量,因為缺省僅統計目錄底下的文件量而已。 -h :以人們較易讀的容量格式 (G/M) 顯示; -s :列出總量而已,而不列出每個各別的目錄占用容量; -S :不包括子目錄下的總計,與 -s 有點差別。 -k :以 KBytes 列出容量顯示; -m :以 MBytes 列出容量顯示;與 df 不一樣的是,du 這個指令其實會直接到文件系統內去搜索所有的文件數據.
2、實體鏈接與符號鏈接: ln
關于鏈接(link)數據我們第五章的Linux文件屬性及Linux文件種類與擴展名當中提過一些信息, 不過當時由于尚未講到文件系統,因此無法較完整的介紹鏈接檔啦。不過在上一小節談完了文件系統后, 我們可以來了解一下鏈接檔這玩意兒了。
在 Linux 底下的鏈接檔有兩種,一種是類似 Windows 的捷徑功能的文件,可以讓你快速的鏈接到目標文件(或目錄); 另一種則是透過文件系統的 inode 鏈接來產生新文件名,而不是產生新文件!這種稱為實體鏈接 (hard link)。 這兩種玩意兒是完全不一樣的東西呢!現在就分別來談談。
· Hard Link (實體鏈接, 硬式鏈接或實際鏈接)
hard link 只是在某個目錄下添加一筆文件名鏈接到某 inode 號碼的關連記錄而已。
舉個例子來說,假設我系統有個 /root/crontab 他是 /etc/crontab 的實體鏈接,也就是說這兩個文件名鏈接到同一個 inode , 自然這兩個文件名的所有相關信息都會一模一樣(除了文件名之外)。
最大的好處就是『安全』!如同上圖中, 如果你將任何一個『文件名』刪除,其實 inode 與 block 都還是存在的! 此時你可以透過另一個『文件名』來讀取到正確的文件數據喔!此外,不論你使用哪個『文件名』來編輯, 最終的結果都會寫入到相同的 inode 與 block 中,因此均能進行數據的修改哩!
一般來說,使用 hard link 設置鏈接檔時,磁盤的空間與 inode 的數目都不會改變! 我們還是由圖 7.2.1 來看,由圖中可以知道, hard link 只是在某個目錄下的 block 多寫入一個關連數據而已,既不會增加 inode 也不會耗用 block 數量哩!
hard link 是有限制的:
- 不能跨 Filesystem;
- 不能 link 目錄。
· Symbolic Link (符號鏈接,亦即是捷徑)
Symbolic link 就是在創建一個獨立的文件,而這個文件會讓數據的讀取指向他 link 的那個文件的文件名!由于只是利用文件來做為指向的動作, 所以,當來源檔被刪除之后,symbolic link 的文件會『開不了』, 會一直說『無法開啟某文件!』。實際上就是找不到原始『文件名』而已啦!
由 1 號 inode 讀取到鏈接檔的內容僅有文件名,根據文件名鏈接到正確的目錄去取得目標文件的 inode , 最終就能夠讀取到正確的數據了。你可以發現的是,如果目標文件(/etc/crontab)被刪除了,那么整個環節就會無法繼續進行下去, 所以就會發生無法透過鏈接檔讀取的問題了!
由上面的說明來看,似乎 hard link 比較安全,因為即使某一個目錄下的關連數據被殺掉了, 也沒有關系,只要有任何一個目錄下存在著關連數據,那么該文件就不會不見。
不過由于 Hard Link 的限制太多了,包括無法做『目錄』的 link , 所以在用途上面是比較受限的!反而是 Symbolic Link 的使用方面較廣
# ln [-sf] 來源檔 目標檔 選項與參數: -s :如果不加任何參數就進行鏈接,那就是hard link,至于 -s 就是symbolic link -f :如果 目標檔 存在時,就主動的將目標檔直接移除后再創建!參考資料:
【1】第七章、Linux 磁盤與文件系統管理
總結
以上是生活随笔為你收集整理的Linux知识点整理(五)—— Linux 磁盘与文件系统管理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: js 获取输入的首字母拼音
- 下一篇: linux 其他常用命令