對於linux系統來說,一切的資料都起源於磁碟中儲存的檔案。linux檔案系統的結構及其在磁碟中是如何儲存的?作業系統是怎樣找到這些檔案進行讀取的?這一章主要圍繞這幾個問題進行介紹(以ext2檔案系統(傳統的linux檔案系統)為例)。
linux檔案系統所有檔案和目錄都是由根目錄開始的,以樹的形式展開,如下圖所示:
根據fhs的基本定義,根目錄下面的各個目錄(如usr,var)基本上都有其特定的意義,在此不多做介紹。重點說一下根目錄'/'的作用和意義:
因此,根目錄(/)所在的分割槽應該越小越好,應用程式所安裝的軟體最好不要與根目錄存放在同乙個分割槽。根目錄越小,系統效能會更好,根目錄所在的檔案系統也較不容易出現問題。
linux中,磁碟(硬碟)上的儲存劃分如下圖所示:
inode的主要記錄了檔案的屬性以及該檔案實際資料是放在哪幾號資料塊(或目錄塊)中,具體包含以下資訊:
另外,inode的特徵有:
已讀取檔案/var/log/message
為例,講解讀取檔案messages時,從磁碟中查詢/讀取檔案內容的過程。
首先系統通過掛載資訊(在超級塊中,位置固定)找到根目錄(/)的inode編號,根目錄對應的inode是固定的(通常為2號)。
根據根目錄的inode編號(2號),在inode table中找到對應的inode資訊,從inode資訊中找到儲存根目錄資訊的目錄塊編號,根據編號找到資料塊,如圖中標記為『/』的方格,該目錄塊儲存的資訊如圖中的dentry所示。
從目錄塊中儲存的資訊中,找到檔名(目錄名)為var所對應的inode編號(2667711)。
在inode table中找到編號為2667711的inode資訊,從該inode資訊中,找到var目錄存放的資料塊。從var資料塊儲存的資訊中,找到log目錄對應的inode編號(267850)。
重複上述步驟,直至找到message檔案對應的inode結點,根據inode結點中記錄的message檔案內容對應的資料塊,從資料塊中讀取內容。
在作業系統資料互動過程中,經常聽到扇區、塊(簇/資料塊)、頁
這幾種單位,他們在資料互動過程中的意義為:
總的說來,主要就是不同系統、裝置間資料互動時,使用了不同的機制和概念。其中磁碟內部(磁碟驅動程式從磁碟)讀取資料時,以扇區為單位;作業系統從磁碟讀取資料時,以塊為單位;作業系統從記憶體讀取資料時,以頁為單位。
並非每次讀、寫檔案操作都會真正地從磁碟讀出或寫入,那樣效能難以接受。為此作業系統使用了一系列機制,提公升了檔案io的效能。
不管是硬碟還是作業系統,都會對從磁碟片中讀取的資料進行快取。硬碟中的快取一般會比較小,如十幾m,作業系統中的快取則可能大很多。系統會將常用的檔案資料放到主儲存器的緩衝區,以加速檔案系統的讀寫。一般情況下,只要系統的記憶體夠用,系統會盡可能多的將磁碟中常用的檔案快取到記憶體中,直至記憶體耗盡(這是正常現象)。比如,如果你發現在電腦上讀取檔案的速度達到了2g每秒,那肯定不是真的從磁碟讀取的,而是從快取讀取的。所以要測試磁碟真正的讀資料的速度,需要先清空系統的快取。
當系統載入乙個檔案到記憶體後,如果該檔案沒有被改動過,則在記憶體區段的檔案資料會被標記為clean
,如果是被改動了,則會標記為dirty
。此時所有的檔案操作還是在記憶體中進行,並沒有寫入到磁碟中。系統會不定時的將記憶體中設定為dirty
的資料寫回到磁碟,以保持磁碟與記憶體資料的一致性。這個過程是非同步的。你也可以sync
命令,將記憶體中的數強制寫回到硬碟。
另外,要注意的是,在正常關機的情況下,關機命令會主動呼叫sync來將記憶體中的資料寫入到磁碟內,但是如果非正常關機(如斷電、宕機),由於資料沒有來得及寫入到磁碟,因此重新啟動可能會花費很長的時間進行磁碟檢驗,甚至可能導致檔案系統的損毀(非磁碟損壞)。
Linux學習筆記之安裝mplayer過程詳解
1.安裝code tar xjvf all 20050412.tar.bz2 mv all 20050412 usr lib codes chmod 644 usr lib codes chown root.root usr lib codes unzip windows all 20050115....
QT學習筆記之讀取INI檔案
ini檔案由節 鍵 值組成。section 鍵 值 name value 乙個ini例項 student name xiaoming age 14我這裡是用的new方式,最後需要delete,在棧上定義乙個物件當然也可以 該建構函式的第乙個引數是要寫入的ini檔案名字,第二個引數標識 講設定儲存在i...
學習筆記 tensorflow檔案讀取
目錄先看下檔案讀取以及讀取資料處理成張量結果的過程 一般資料檔案格式有文字 excel和資料。那麼tensorflow都有對應的解析函式,除了這幾種。還有tensorflow指定的檔案格式。tensorflow還提供了一種內建檔案格式tfrecord,二進位制資料和訓練類別標籤資料儲存在同一檔案。模...