7.1認識Linux文件系統(tǒng)
重點:inode、block(數(shù)據(jù)區(qū)塊)乱豆、superblock(超級區(qū)塊)
7.7.1 磁盤組成與分區(qū)的復習
磁盤結(jié)構(gòu)
GPT與MBR
區(qū)別
- MBR早贾虽,GPT晚
- MBR最多支持2T ,GPT支持大于2T的總?cè)萘考按笥?T的分區(qū),并且?guī)缀鯖]有上限局荚,最大支持到128個分區(qū)最住,分區(qū)大小支持到256TB钞澳。
- MBR第一扇區(qū)(512 byte)有主引導記錄(MBR 446 byte)和分區(qū)表(64byte)。分區(qū)表記錄如何分區(qū)涨缚,分為主要分區(qū)擴展分區(qū)(最多一個)與邏輯分區(qū)轧粟,如果超過4個需要用邏輯分區(qū),分區(qū)信息記錄在每個分區(qū)最前面脓魏。
GPT兼容MBR并且支持UEFI兰吟,每個分區(qū)都有自己的啟動扇區(qū)。
磁盤以文件表示
linux中設(shè)備都以文件形式在/dev中表示茂翔,如磁盤為/dev/sd[a-p物理][1-128分區(qū)]
7.1.2 文件系統(tǒng)特性
- Linux與Windows文件系統(tǒng)不一樣混蔼,默認情況下不通用
- 一個可掛載的數(shù)據(jù)是一個文件系統(tǒng)(并非一個分區(qū))
- 超級區(qū)塊: inode與數(shù)據(jù)區(qū)塊總量 使用量 剩余量 數(shù)據(jù)區(qū)塊與inode大小 文件系統(tǒng)有關(guān)信息,一個文件系統(tǒng)中只有一個
- BlockGroup: 區(qū)塊的集合檩电,文件系統(tǒng)的部分
- inode(index node):文件屬性 用戶組 時間 數(shù)據(jù)區(qū)塊號碼 本質(zhì)上是在某些區(qū)塊中存索引 固定大小 一個文件(包括目錄)一個inode
- 數(shù)據(jù)區(qū)塊:文件內(nèi)容
- 存索引的inode類文件系統(tǒng)一般不需要碎片整理 fat會因為存的文件離散需要碎片整理
7.1.3 Linux的ex2文件系統(tǒng)(inode)
文件系統(tǒng):boot+group+group...
group: inode信息 數(shù)據(jù)
限制:
- 區(qū)塊數(shù)量大小格式化后不能再修改
- 每個區(qū)塊最多一個文件(浪費容量)
缺點:
區(qū)塊大:小文件多浪費空間
區(qū)塊兄舴帷:inode多讀寫性能差
記錄一個區(qū)塊指針需要4B,一個inode包含12個直接俐末、1個間接料按、1個雙間接、1個三間接卓箫,所以1K區(qū)塊下一個文件最大12+256+256256+256256*256個數(shù)據(jù)區(qū)塊共16G
如何查看這些信息
sudo blkid 查詢目前被系統(tǒng)格式化的數(shù)據(jù)
dumpe2fs [-bh] 設(shè)備文件名 (在ext系統(tǒng)下)
xfs_info 掛載點或設(shè)備文件名 (在xfs文件系統(tǒng)下)
輸出:超級區(qū)塊信息+區(qū)塊群組信息
7.1.4與目錄樹的關(guān)系
- 4KB區(qū)塊存100K载矿,需要26個Block,因為還有一個存多的inode
- inode本身不記錄文件名烹卒,所以需要逐層進入目錄闷盔,并讀取下一層的inode(內(nèi)含權(quán)限)
- 文件系統(tǒng)用久了可以復制出所有文件格式化再復制回去,使得數(shù)據(jù)連續(xù)旅急,提高讀寫性能
7.1.5 ext2/ext3/ext4 文件的存取與日志式文件系統(tǒng)的功能
存
- 讀所在目錄inode中記載的是否有w權(quán)限逢勾,如有
- 根據(jù)inode對照表找未使用的inode,將新文件的權(quán)限屬性寫入
- 根據(jù)區(qū)塊對照表找未使用的區(qū)塊藐吮,將數(shù)據(jù)寫入溺拱,更新inode指向數(shù)據(jù)
- 同步更新inode與數(shù)據(jù)到各自對照表
取
- 根據(jù)inode查看是否有x權(quán)限
- 查看下一層inode,繼續(xù)檢查權(quán)限
- 如有權(quán)限谣辞,打開文件或進入下一層目錄
數(shù)據(jù)不一致
- 原因:斷電等
- ext2: 數(shù)據(jù)檢查
- ext3迫摔、ext4:Journal日志(預備、實際寫入泥从、結(jié)束三個階段)句占,檢查日志出問題的文件而不用檢查全盤
7.1.6 Linux文件系統(tǒng)的運行
異步處理
修改時將文件讀入內(nèi)存標記為clean,修改后標記為dirty但并不立即寫入硬盤躯嫉,需要調(diào)用sync纱烘。
不正常關(guān)機時會導致磁盤校驗杨拐。
7.1.7 掛載點的意義(mount point)
文件系統(tǒng)與目錄樹
掛載:文件系統(tǒng)與目錄樹結(jié)合,比如將/
掛載到/dev/sda1
這個設(shè)備
相同文件系統(tǒng)類型的不同文件系統(tǒng)目錄樹根的inode相同凹炸,不同文件系統(tǒng)內(nèi)文件inode值可能重復戏阅,同一個文件系統(tǒng)inode與文件一一對應(yīng)。
7.1.8 其他Linux支持的文件系統(tǒng)與VFS
Linux支持多種文件系統(tǒng)啤它,包括傳統(tǒng)奕筐、日志、網(wǎng)絡(luò)的变骡,以下命令可以查詢离赫。
ls -l /lib/modules/$(uname -r)/kernel/fs # 系統(tǒng)支持的
cat /proc/filesystems # 加載到內(nèi)存中的
VFS(Virtual Filesystem Switch)是位于內(nèi)核層的系統(tǒng)調(diào)用,幫助處理讀取不同文件系統(tǒng)
7.1.9 XFS文件系統(tǒng)簡介
ext4不好:預先分配所有inode塌碌,格式化慢秉继,不適合大容量磁盤
XFS好:適合大容量磁盤和巨型文件
lsattr
和chattr
可以更改隱藏屬性虽缕,但是xfs不支持部分隱藏屬性
xfs分為數(shù)據(jù)區(qū)(data section)经伙、文件系統(tǒng)活動登錄區(qū)(log section)拘荡、實時運行區(qū)(realtime section)
數(shù)據(jù)區(qū)
同ext,分為超級區(qū)塊接剩、剩余空間的管理切厘、inode分配與追蹤。但是inode動態(tài)分配懊缺,格式化快疫稿。且數(shù)據(jù)塊(4K以上內(nèi)核不給掛載)與inode大小(256B-2M)可以自定義鹃两。
文件系統(tǒng)活動登錄區(qū)
類似日志區(qū)遗座,所有文件變化在此記錄,當完全被寫入記錄才被刪除俊扳,用于校驗途蒋。可指定外部磁盤作為該區(qū)馋记。
實時運行區(qū)
先在該區(qū)段中尋找數(shù)個extent區(qū)塊号坡,將文件放到這些區(qū)塊中,等分配完了再寫入數(shù)據(jù)區(qū)中的inode與區(qū)塊中抗果。
xfs文件系統(tǒng)查看信息
df -T 路徑 #查詢路徑文件系統(tǒng),具體見7.2
xfs_info 掛載點|設(shè)備文件名 #查看超級區(qū)塊記錄
注意點:如果對/boot
使用奸晴,可以看到/dev/sda2
指向某個物理設(shè)備冤馏,但是對/
使用,可以看到指向/dev/mapper/centos-root
寄啼。這是因為在安裝系統(tǒng)時候逮光,設(shè)備分區(qū)使用了LVM而非標準分區(qū)代箭,linux為你自動創(chuàng)建的空間池,用多少取多少涕刚。
ypeng@study:~ $ ll /dev/mapper/centos-root
lrwxrwxrwx. 1 root root 7 3月 28 11:59 /dev/mapper/centos-root -> ../dm-0
含有inode大小嗡综、個數(shù)、總數(shù)杜漠、區(qū)塊大小极景、數(shù)量、與陣列stripe
有關(guān)的信息
7.2 文件系統(tǒng)的簡單操作
df
df [-ahikHTm]
-a : 列出**所有**文件系統(tǒng)
-h : 容量自動單位換算
-i : 顯示inode數(shù)量不顯示磁盤容量
-T : 顯示所在硬盤分區(qū)的文件系統(tǒng)
/proc
中1kblock驾茴,used盼樟,free都是0,因為這個目錄掛載在內(nèi)存中
/dev/shm/
是用內(nèi)存虛擬出的磁盤空間
不知道某個目錄/文件所在掛載點锈至,還想知道這個分區(qū)還能存多少東西晨缴?
df [目錄名|掛載點名]
du
du [-ahskm]
-s : 列出僅當前目錄
不加參數(shù):列出當前目錄和所有**目錄**
-a : 列出目錄和文件
-S : 不統(tǒng)計子目錄中的文件
7.2.2 硬鏈接與符號鏈接
硬鏈接
- 在訪問目錄中文件時,查到目錄的inode之后找目錄的數(shù)據(jù)峡捡,目錄的數(shù)據(jù)存的文件名->inode击碗。硬鏈接只是加了一條文件名->inode,并沒有產(chǎn)生新的文件们拙。
- 硬鏈接權(quán)限屬性完全一樣稍途。
- 既不增加inode數(shù),也不減少inode數(shù)
- 可以通過任何一個文件名寫入睛竣,刪除一個文件名inode和區(qū)塊還在
- 不能跨文件系統(tǒng)(inode重復)
- 不能鏈接目錄(需迭代進行晰房,復雜度高,不支持射沟,但是
.
和..
目錄例外殊者,每新建一個目錄其鏈接數(shù)為2,包括其自身和.
验夯,其父目錄鏈接數(shù)+1猖吴,由于..
)
硬鏈接的讀取
ln 建立硬鏈接
符號鏈接
ln -s
- 等同于Windows快捷方式
- 可以鏈接目錄
-
源文件刪除后符號鏈接打不開
符號鏈接的讀取
磁盤的分區(qū)、格式化挥转、檢驗與掛載
流程: 分區(qū)->格式化->檢驗(可選)->掛載(Linux特色)
7.3.1 觀察磁盤分區(qū)狀態(tài)
lsblk [-dfimpt] [設(shè)備名] #列出磁盤分區(qū) [設(shè)備名]只可以輸入disk海蔽,不能輸入分區(qū)
查看UUID(全局唯一標識符):lsblk-f
或blkid
parted 設(shè)備文件 print #列出磁盤分區(qū)信息
磁盤分區(qū):gdisk(GPT)/fdisk(MBR)
分區(qū)流程:lsblk
或blkid
查看分區(qū)->gdisk
或fdisk
根據(jù)提示操作
區(qū)塊與扇區(qū):區(qū)塊針對文件系統(tǒng)而言,扇區(qū)針對物理硬盤而言
不要處理正在活動的分區(qū)(已掛載的分區(qū))绑谣,linux將不能更新分區(qū)表
添加分區(qū)默認按序號給分區(qū)編號党窜,且默認開始扇區(qū)從第一個未被占用的扇區(qū)開始。
7.3.3 磁盤格式化(創(chuàng)建文件系統(tǒng))
功能:使用文件系統(tǒng)格式化軟件格式化磁盤分區(qū)借宵。
命令:mkfs.xfs
mkfs.ext4
mkfs
mkfs.xfs -b 區(qū)塊容量 -d 有關(guān)datasection的數(shù)值 -f 分區(qū)內(nèi)已經(jīng)有文件系統(tǒng)強制執(zhí)行
-i inode數(shù)值Log內(nèi)置或者放到其他設(shè)備等幌衣,-r 與實時區(qū)有關(guān)
mkfs.ext4 [-b 區(qū)塊大小] [-L 設(shè)備名稱]