Linux重要知識點匯總——磁盤與文件系統管理
EXT2文件系統:
文件系統特性:
格式化(format):每種操作系統所設置的文件屬性/權限並不相同,為了存放這些文件所需的數據,因此就需要將分區格式化,以成為操作系統能夠你用的文件系統格式
通常我們稱呼一個可被掛載的數據為一個文件系統而不是一個分區(一個分區多個文件系統,多個分區一個文件系統)
super block:記錄此文件系統的整體信息,包括inode/block的總量、使用量、剩余量,以及文件系統的格式與相關信息等
inode:記錄文件的屬性,一個文件占用一個inode,同時記錄文件的數據所在的block號碼
block:實際記錄文件的內容,若文件太大時,會占用多個block
每個inode和block都有編號,而每個文件占用一個inode,inode內則有文件數據放置的block號碼。這種數據訪問的方法稱為索引式文件系統。
碎片整理:文件寫入到block太過於分散了,此時文件讀取的性能將會變得很差。通過碎片整理將同一文件所屬的block匯合在一起,這樣數據的讀取會比較容易。
文件系統一開始就將inode和block規劃好了,除非重新格式化(或者利用resize2fs等命令更改文件系統大小),否則inode與block固定後就不再變動。
Ext2文件系統在格式化的時候基本上是區分多個塊組(block group)的,每個塊組都有獨立的inode/block/superblock系統。
整體規劃中,文件系統最前面有一個啟動扇區(boot sector),這個啟動扇區可以安裝引導裝載程序。
調出目前掛載的設備:df
查看文件系統信息:dumpe2fs 【-bh】 設備文件名
與目錄樹的關系
目錄:
新建一個目錄時,ext2會分配一個inode與至少一塊block給該目錄。
inode記錄該目錄的相關權限與屬性,並可記錄分配到的那塊block號碼;
block記錄在這個目錄下的文件名與該文件名占用的inode號碼數據
查看目錄內文件所占用的inode號碼:ls –i
文件:
當我們新建一個文件時,ext2會分配一個inode與相對於該文件大小的block數量給該文件。
目錄樹的讀取:
系統通過掛載的信息找到掛載點的inode號碼(通常一個文件系統的最頂層inode號碼會由2號開始),此時就能夠得到根目錄的inode內容,並依據該inode讀取根目錄的block內的文件名數據,再一層一層地往下讀到正確的文件名
新建一個文件或者目錄的步驟:
確定用戶對於欲添加文件的目錄是否具有w與x的權限,若有的話才能添加
根據inode bitmap找到沒有使用的inode號碼,並將新文件的權限/屬性寫入
根據block bitmap找到沒有使用中的block號碼,並將實際的數據寫入block中,且更新inode的block指向數據
將剛才寫入的inode與block數據同步更新inode bitmap與block bitmap,並更新superblock的內容(未使用與已使用的量)
inode table與data block稱為數據存放區域,其他super block、block bitmap與inode bitmap等區段為meta data(中間數據),數據是經常變動的,每次添加、刪除、編輯時都可能會影響到這三個部分的數據。
數據的不一致(Inconsistent)狀態
meta data的內容與實際數據存放區產生不一致的情況。Ext2文件系統中,通過Super block當中記錄的valid bit(是否有掛載)與文件系統的state(clean與否)等狀態來判斷是否強制進行數據一致性的檢查。若有需要檢查時則以e2fsck這支程序來進行的
日志文件系統(Journaling file system)
預備:當系統要寫入一個文件時,會先在日志記錄塊中記錄某個文件准備要寫入的信息
實際寫入:開始寫入文件的權限與數據;開始更新meta data的數據
結束:完成數據與meta data更新後,在日志記錄塊當中完成該文件的記錄
在這樣的程序當中,萬一數據的記錄過程當中發生了問題,那麼我們的系統只要去檢查日志記錄塊就可以知道哪個文件發生了問題,針對該問題做一致性檢查即可。
linux文件系統的操作
異步處理(asynchronously):當系統知道一個文件到內存後,如果該文件沒有改動過,則在內存區段的文件數據會被設置為(clean)的。但如果內存中的文件數據被更改過了,此時該內存中的數據會被設置為Dirty。此時所有的操作還在內存中執行,並沒有寫入到磁盤中。系統會不定時地將內存中設置為Dirty的數據寫回磁盤,以保持磁盤與內存數據的一致性。
文件系統與內存:
系統會將常用的文件數據放置到主存儲器的緩沖區,以加速文件系統的讀寫
Linux的物理內存最後都會被用光。這是正常的情況,可加速系統性能。
可以手動使用sync強迫內存中設置為Dirty的文件寫回到磁盤中
若不正常關機,由於數據尚未回寫到磁盤內,因此重新啟動後可能會花很多時間在進行磁盤檢驗,甚至可能導致文件系統損毀(非磁盤損壞)
Linux VFS(Virtual Filesystem Switch):Linux內核通過VFS管理文件系統,用戶並不需要知道麼個分區上頭的文件系統是什麼。
文件系統的簡單操作:
磁盤與目錄的容量:df,du
df:列出文件系統的整體磁盤使用量
du:評估文件系統的磁盤使用量(常用來評估目錄所占容量)
df -hi:以人們較易閱讀的GB、MB、KB等格式自行顯示;不用硬盤容量,而以inode的數量來顯示
讀取的范圍是在super block內的信息,所以命令顯示結果的速度非常快。
du -s:列出總量而已,而不列出每個個別的目錄占用容量
直接到文件系統內去查找所有的文件數據,默認情況下大小的輸出是以KB為單位的。
連接文件:ln
hard link(硬連接或實際連接):
在某個目錄下面新建一條文件名連接到某inode號碼關聯的記錄。
安全:如果將任何一個“文件名”刪除,其實inode與block還是存在的。此時可以通過另一個“文件名”來讀取到正確的文件數據。此外,不論使用哪個“文件名”來編輯,最終的結果都會寫入到相同的inode和block中,因此均能進行數據的修改。
限制:不能跨文件系統,不能連接到目錄。
symbolic link(符號鏈接,也即快捷方式)
創建一個獨立的文件,而這個文件會讓數據的讀取指向它連接的那個文件的文件名。當源文件被刪除之後,symbolic link的文件會“開不了”
內容:目標文件的“文件名”
symbolic link與Windows的快捷方式可以劃上等號,有symbolic link所創建的文件為一個獨立的新的文件,所以會占用inode與block
ln -s:如果不加任何參數就進行連接,那就是hard link,至於-s就是symbolic link
磁盤分區:fdisk
-l:輸出後面接的設備所有分區內容
df:找出可用磁盤文件名,再使用fdisk查閱
刪除分區:
fdisk:先進入fdisk界面
p:先看一下分區信息,確定刪除的分區
d:選擇一個分區
w:存儲到磁盤數據表中,並離開fdisk
新增磁盤分區:
fdisk:進入fdisk界面
n:選擇分區類型(主分區,擴展分區)
起始柱面(默認值)
終止柱面:+512MB
p:查看分區結果
強制更新內核分區表信息:partprobe
磁盤格式化
mkfs 【-t 文件系統格式】 設備文件名
磁盤檢驗:fsck,badblocks
fsck 【-t 文件系統】 【-ACay】 設備名稱
-A:依據/etc/fastab的內容,將需要的設備掃描一次
-a(y):自動修復檢查時遇到的有問題的扇區
-C:檢驗的過程當中用一個直方圖來顯示目前的進度
通常只有身為root且文件系統有問題的時候才使用這個命令,否則在正常情況下使用此命令,可能對系統造成危害。
執行fsck時,被檢查的分區務必不可掛載到系統上!
磁盤的掛載與卸載
單一文件系統不應該被重復掛載在不同的掛載點中
單一目錄不應該重復掛載多個文件系統
作為掛載點的目錄理論上應該都是空目錄
mount -a:依據配置文件/etc/fstab的數據將所有未掛載的磁盤都掛上來
mount -l:顯示目前掛載的信息(加上label列)
重新掛載根目錄:mount –o remount,rw,auto /
umount(將設備文件卸載)
磁盤參數的修改:
mknod 設備名 【bcp】 【major】 【minor】
b:外部存儲設備文件
c:外部輸入設備文件
p:FIFO文件
設置文件系統卷標:e2label 設備名稱 新的label名稱
tune2fs
hdparm –Tt 設備名稱 :測試這塊硬盤的讀取性能
設置開機掛載
開機掛載/etc/fstab及/etc/mtab
根目錄/是必須掛載的,而且一定要先於其他mount point被掛載進來
其他掛載點必須為已新建的目錄,可任意指定,但一定要遵守必需的系統目錄架構原則
所有掛載點在同一時間內,只能掛載一次
所有分區在同一時間內,只能掛在一次
如若進行卸載,必須先將工作目錄移到掛載點(及其子目錄)之外
特殊設備loop掛載(鏡像文件不刻錄就掛載使用)
mount –o loop 文件地址 掛載地址
新建大文件以制作loop文件
幫助解決分區不良的情況。
創建大型文件 dd if=/dev/zero of=/home/loopdev bs=1M count=512
格式化 mkfs –t ext4 /home/loopdev
掛載 mount –o loop …
內存交換空間(swap)的構建
設置一個swap分區
創建一個虛擬內存文件
使用物理分區構建swap
分區:先使用fdisk分出一個分區給系統作為swap,同時還要設置一下system ID。fdisk /dev/sda –> p –> t (修改系統ID),幾號分區改成swap的ID為82,p,w,partprobe(更新內核分區表)
構建swap格式:mkswap
開始查看與加載:free(查看)、swapon(開啟分區)、free
使用文件構建swap
使用dd新增一個文件
使用mkswap將文件格式化為swap的文件格式
使用swapon將其啟動
使用swapoff關掉swap file