linux文件系統初學

Linux磁盤分區和目錄

Linux發行版之間的差別很小,差別主要表現在系統管理的特色工具以及軟件包管理方式的不同。

Windows的文件結構是多個並列的樹狀結構,最頂部是不同的磁盤(分區),如CDE等。而linux的文件結構是當個樹狀結構。

 

分區和目錄的關係:

1. 任何一個分區都必須掛載到某個目錄上。

2. 目錄是邏輯上的區分,而分區是物理上的區分。

3. 根目錄是所有linux的文件和目錄

下面是我們某個可能的目錄和分區的關係:

842584-20151122214501343-739146093.jpg

 

使用df可以查看各個分區的使用情況。

 

Mount掛載和Nfs

當要使用某個設備的時候,例如要讀取一個格式化好的分區,光盤或者軟件等設備,必須先把這些設備對應到某個目錄上,而這個目錄就被稱爲掛載點,這樣纔可以讀取這些設備,這樣的動作就是掛載Mount是掛載指令,Nfs就是通過Mount來實現的。

 

Linux空間管理

Linux對於空間的管理相對簡單,如圖所示:

842584-20151122214502436-1248354443.png

 

它將磁盤分爲以下三個部分:

1) 超級塊,文件系統中的第一個塊被稱爲超級塊。這個塊被稱爲超級塊。這個塊存放文件系統本身的信息。比如,超級塊記錄了每個區域的大小,超級塊也存放了未被使用的磁盤塊的信息。

2) Inode表,超級塊下的一個部分就是inode表。每個inode節點就是對應一個文件/目錄的結構。這個機構包含了一個文件的長度,創建及修改時間,磁盤中的位置等信息。

3) 數據區,文件系統的第三個部分是數據區。文件的內容保存在這個區域。一個大的文件很容易被存儲在上千個獨立的磁盤塊中。

 

一個文件主要包含文件名,屬性,數據三項。內核將文件內容存放在數據區,文件屬性將存放在inode中,文件名存放在目錄裏。下圖顯示了新建了一個文件的例子:

842584-20151122214503577-1661726693.png

 

文件

文件類型

Linux主要的文件類型有以下幾種:

1. 普通文件:c語言源代碼,shell腳本,二進制可執行文件等,分爲文本文件和二進制文件。

2. 目錄文件:目錄,存儲文件的唯一地方。

3. 鏈接文件:指向同一個目錄或者文件的文件。

4. 特殊文件:設備文件等。

文件存儲結構

Linux正統的文件系統(ext2ext3等)一個文件由目錄項,inode和數據塊組成。

目錄項:包括文件名和inode節點號

Inode:又稱文件索引節點,是文件基本信息的存放地方和數據塊指針存放地。

數據塊:文件的具體內容存放地。

 

下面是整體結構:

842584-20151122214505358-363736456.jpg

 

目錄項內容如下:

842584-20151122214506358-1327523096.png

 

Inode中的信息:

842584-20151122214509952-123579304.png

 

 

軟鏈接,硬鏈接:

硬鏈接:是給文件一個副本,同時建立兩者之間的連接關係,修改其中一個,與其鏈接的文件同時被修改。如果刪除其中的一個,其餘的文件則不受影響。

軟鏈接:也叫符號鏈接,當源文件被刪除,則符號鏈接會變成無源之水,而刪除這個鏈接,源文件也不會受到影響。但是對鏈接文件的使用和引用都是直接調用源文件。

842584-20151122214512733-1242326052.png

 

 

VFS

虛擬文件系統:

除了linux本身的文件系統,爲了解決讓linux支持其他不同的文件系統的問題,需要將對各種文件系統的操作和管理納入到一個統一的框架中,使得用戶程序可以使用同一組系統調用對各種不同的文件系統進行操作。這樣,就對用戶程序隱去了各種不同文件系統的實現細節,爲用戶提供一個統一的,抽象的,虛擬的文件系統界面。這就是所謂的虛擬文件系統(VFS

842584-20151122214515655-2120302523.jpg

 

 

問題

http://djt.qq.com/article/view/620

 

1. 機械磁盤隨機讀寫時速度非常慢,操作系統是採用什麼技巧來提高隨機讀寫的性能的?

 

附圖一張:

842584-20151122214517530-1009780692.jpg

 

磁盤面:磁盤就是由磁盤面組成

磁頭:每個磁頭對應一個磁盤面,負責該面上數據的讀寫

磁道:每個盤面上會圍繞圓心劃分出多個通信圓圈,負責該磁盤面上的數據的讀寫

柱面:所有盤片上的同一位置的磁道組成的立體叫做一個柱面。

扇區:以磁道爲單位的管理單位仍然太大,所以計算機前輩們又把每個磁道劃分出了各個扇區。

 

    磁盤IO過程:第一步,先是磁頭徑向移動來尋找數據所在的磁道。這部分叫尋道時間。

                 第二部,找到目標磁道然後通過盤面旋轉,將目標扇區移動到磁頭的正下方。

        第三部:向目標扇區寫入數據。

 

    所以單次磁盤IO時間=尋道時間+旋轉延遲+存取時間。

 

所以答案是:因爲一個分區的數據通常會一起讀取,操作系統按照磁道對應的柱面來劃分分區,來降低磁盤io所花費的尋道時間,進而來提高磁盤的讀寫性能。


2touch一個新的空文件佔用磁盤空間嗎? 佔用的話佔用多少?

linux下,新建一個新的空文件也是會佔用空間,實際佔用256Byte,確切的說是佔用一個inode size,具體inode size是根據具體的平臺決定的。


3、新建一個空目錄佔用磁盤空間嗎?佔用多少?和新建一個文件相比,哪個佔用的更大?

佔用1block size+1inode size,一個block size一般是4KB
4、你知道文件名是記錄在磁盤的什麼地方嗎?

文件名記錄在目錄中的block的。
5、文件名最長多長?受什麼制約? 

linux限制文件名長度不得超過255byte
6、文件名太長了會影響系統性能嗎?爲什麼會產生影響?

文件名長了可能會對系統產生影響,因爲這可能會導致更多的磁盤IO,比如由於文件名過長,導致目錄的block變得很大,那麼linux查找指定的文件極端情況可能需要遍歷所有的block,產生大量的開銷。、。

上面說的那個問題就是爲什麼有的時候ls快,有的時候ls慢,就是因爲block過多,產生了多次IO


7、一個目錄下最多能建立多少個文件?

這個問題受限於你目錄所在分區中inode數量,比如如果有100winode,就可以新建100w個文件,不過由於上面說的那個問題,單個目錄下面的文件最好不要過萬,不然ls之類的命令或者系統首次運行都會出現性能不佳的情況。


8、新建一個內容大小1k的文件,實際會佔用多大的磁盤空間?

實際上會佔用一個block加上一個inode的大小。。
9、向操作系統發起讀取文件2Byte的命令,操作系統實際會讀取多少呢?

塊設備,當然是以block爲單位進行讀了。
10、我們使用文件時要怎麼樣來能提高磁盤IO速度? 

如果知道你新建的文件會佔用多大空間,比如1M,那麼新建文件的時候就和操作系統說一下,讓它幫你把文件的size預留下來,這樣的話實際上操作系統會盡量分配連續的block,當你再讀取這個文件的時候,磁盤就省去了很多尋道時間,IO速度顯得快很多。

 

 

注:

   使用df -i可以查看每個分區的inode數目。

   使用du -h可以查看當前目錄下每個文件所佔實際硬盤空間大小。

   如果文件都是大於4KB,甚至是幾M。幾G的文件,那麼建議block還是儘量的大一點,這樣inode可以少記幾個地址。

   如果文件大部分都是1K以下的,那麼使用4K作爲block size就會有些浪費。

  





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章