8.1 認(rèn)識(shí) ET2文件系統(tǒng)
8.1.1硬盤(pán)組成與分區(qū)的復(fù)習(xí)
- 磁盤(pán)的物理組成 (3個(gè)物理組成 3個(gè)盤(pán)片組成 兩種磁盤(pán)文件名)
Review p#12 - 分區(qū)(5 個(gè)點(diǎn))
Review p#67
8.1.2 文件系統(tǒng)特性
Linux ->Ext2
Windows -> NTFS使用LVM (Logical Volume Manager)和 軟磁盤(pán)陣列 Softdisk RAID 將一個(gè)分區(qū)格式化為多個(gè)文件系統(tǒng), 也能將多個(gè)分區(qū)合成一個(gè)文件系統(tǒng)。
Review RAID 和 LVM-
文件系統(tǒng)如何運(yùn)行?
Inode
文件權(quán)限和屬性放 inode
一個(gè)文件占用一個(gè)inode,同時(shí)記錄此文件的數(shù)據(jù)所在的block號(hào)碼Block
而文件實(shí)際數(shù)據(jù)放data block 塊中
若文件太大,會(huì)占用多個(gè)blockSuperblock
用于存放整體信息,包括inode和block的總量、使用量、剩余量、以及文件系統(tǒng)的格式。
索引式文件系統(tǒng) indexed allocation
根據(jù)inode查找所有block讀取
-FAT U盤(pán)
沒(méi)有inode存在,只能先將上一個(gè)block讀取出來(lái)才知道下一個(gè)block號(hào)碼。
- 碎片整理 (對(duì)于FAT文件系統(tǒng)經(jīng)常使用)
將同一個(gè)文件所屬的的block再匯合到一起,提高讀取速度。
8.1.3 Linux的 Ext2 文件系統(tǒng)
- 為什么硬盤(pán)只有一個(gè)MBR卻可以安裝雙系統(tǒng) ?
- Ext2 文件系統(tǒng)為了便于管理 固定的 inode 和block 區(qū)分出 多個(gè)塊組(block group),每個(gè) 塊組 都擁有自己獨(dú)立的inode block superblock 系統(tǒng)。
- 在整體的規(guī)劃中,文件系統(tǒng)在最前面有一個(gè) 啟動(dòng)扇區(qū) BootSector 用于安裝引導(dǎo)裝載文件,不用覆蓋硬盤(pán)唯一個(gè)MBR
BootSection 在文件系統(tǒng)的 最前端
data block (數(shù)據(jù)塊)
三種size 1KB 2KB 4KB
對(duì)應(yīng)最大單一文件限制 16GB 256GB 2TB
對(duì)應(yīng)對(duì)大文件系統(tǒng)總?cè)萘?2TB 8TB 16TB原則上 block 的數(shù)量和大小在格式化完成后就固定了, 除非重新格式化
每個(gè)block 最多放一個(gè)文件的數(shù)據(jù)
如果文件大于block大小,則一個(gè)文件會(huì)占用多個(gè)block
若小于 block 大小,則剩余空間也不能被使用
產(chǎn)生兩個(gè)問(wèn)題
如果采用了較大size的block,會(huì)造成資源的浪費(fèi)
如果采用較小的,會(huì)使讀寫(xiě)速度變慢
估計(jì)文件的大小選擇block的size
inodetable(inode 表格)
1.inode 記錄了哪些文件數(shù)據(jù)?
rwx;owner/group;size;ctime/atime/mtime;SetID;pointer
2.inode的其他特點(diǎn)
inode 固定大小為128bytes
每個(gè)文件只能占用一個(gè)inode
文件系統(tǒng)能創(chuàng)建文件的數(shù)量和inode的數(shù)量有關(guān)
系統(tǒng)讀取文件需要先找到inode, 并分析 inode所記錄的權(quán)限與用戶是否符合,符合了才開(kāi)始讀取block里面的內(nèi)容-
inode 結(jié)構(gòu)
12個(gè)直接、一個(gè)間接、一個(gè)雙間接、一個(gè)三間接記錄區(qū)
inode結(jié)構(gòu)圖.jpg Superblock (超級(jí)塊)
block 與inode的總量
未使用與已使用b&i總量
b&i的大小
文件系統(tǒng)掛載時(shí)間、最近一次寫(xiě)入數(shù)據(jù)時(shí)間、最近一次檢測(cè)磁盤(pán)fsck的時(shí)間等文件系統(tǒng)相關(guān)信息
一個(gè)validbit數(shù)值,0->已掛載 1->未被掛載
每個(gè)block group都可能含有superblock 作為唯一的superblock的備份File System Descripition (文件系統(tǒng)描述說(shuō)明)
用于描述:
每個(gè)block group 的開(kāi)始與結(jié)束的 block號(hào)碼
說(shuō)明每個(gè)區(qū)段分別介于哪個(gè)block號(hào)碼之間
(superblock,bitmap,inodemap,data block)block bitmap
哪些block號(hào)碼用著,哪些block號(hào)碼未使用,刪除文件時(shí)釋放block號(hào)碼
-inode bitmap
如上,替換成 inode
Tips:可以使用dumpe2fs 查看Superblock和File Syetem Descripition
- df 查看目前掛載的設(shè)備
- dumpe2fs /dev/hdc2
稍后問(wèn)萱萱
8.1.4 與目錄樹(shù)的關(guān)系
-
目錄
當(dāng)我們mkdir時(shí),ext2會(huì)分配一個(gè)inode和至少一塊block給該目錄
inode記錄目錄相關(guān)權(quán)限和屬性,并可記錄分配到的那塊block號(hào)碼
block記錄該目錄下的文件名與該文件名占用的inode號(hào)碼數(shù)據(jù)。- 使用 ls -i 查看目錄文件所占用的inode號(hào)碼
- 查看 /bin /boot /proc /lost+found /sbin 這五個(gè)目錄的ls -l
ll -d / /bin /boot /proc /lost+found /sbin
Review 目錄樹(shù) p#156 (proc為什么不占用硬盤(pán)容量)
文件
當(dāng)我們?cè)?ext2 下新建一個(gè)文件時(shí), ext2會(huì)分配一個(gè)indoe和相對(duì)于該文件大小的的block數(shù)量給該文件。超過(guò)12個(gè)block,會(huì)多一個(gè)block作為塊號(hào)碼的記錄-
目錄樹(shù)讀取
文件名實(shí)際上是存在目錄文件的block里,所以文件名的新增、刪除、重命名都是需要 讀取 目錄文件的inode和block,才能找到文件名占用的inode,再找到文件的block。- 目錄樹(shù)讀取的過(guò)程
1 通過(guò)掛載點(diǎn)信息找到/dev/hdc2 的inode 號(hào)碼為2的根目錄 inode ,且inode 具有的權(quán)限讓我們可以讀取該block的內(nèi)容
2 取得的block號(hào)碼, 并找到etc/下的inode內(nèi)容
3 讀取inode號(hào)碼得知vbird具有r和x的權(quán)限 ,因此可以讀取etc/的block內(nèi)容
4 取得的block號(hào)碼,找到block內(nèi)容中的passwd文件的inode號(hào)碼
5 讀取inode號(hào)碼得知vbird具有r的權(quán)限,因此可以讀取passwd的block內(nèi)容
- 目錄樹(shù)讀取的過(guò)程
文件大小的磁盤(pán)讀取性能
分區(qū)的規(guī)劃不是越大越好,大的文件系統(tǒng)存在文件數(shù)據(jù)離散的問(wèn)題,造成數(shù)據(jù)讀取性能低。
8.1.5 Ext2/Ext3 文件的訪問(wèn)與日志文件系統(tǒng)的功能
新增文件時(shí),系統(tǒng)的行為?
1 用戶在該目錄下,是否有w 和x 的權(quán)限?有,繼續(xù)。
2 根據(jù)inode bitmap找到?jīng)]有使用的inode號(hào)碼,并將新文件的權(quán)限和屬性寫(xiě)入
3 根據(jù) block bitmap 找到?jīng)]有使用的block 號(hào)碼,并將實(shí)際數(shù)據(jù)寫(xiě)入block,且更新 inode 的block指向數(shù)據(jù)
4 將剛才寫(xiě)入的inode 與block 數(shù)據(jù)同步更新inode bitmap 與block bitmap,并更新superblock的內(nèi)容-
數(shù)據(jù)的不一致?tīng)顟B(tài) (Inconsistent)
- 數(shù)據(jù)存放區(qū)域 -> inode 和 data block
- metadata (中間數(shù)據(jù)) -> super block , inode bitmap, block bitmap:因?yàn)檫@數(shù)據(jù)都是經(jīng)常變動(dòng)的,每次添加、刪除、編輯都可能會(huì)影響到這三個(gè)部分的數(shù)據(jù)。
1 文件在寫(xiě)入文件系統(tǒng)時(shí),系統(tǒng)中斷,inode table 和 data block 被寫(xiě)入,但metadata還未更新,metadata和數(shù)據(jù)存放區(qū)不一致
2 Ext2 會(huì)在系統(tǒng)重新啟動(dòng)時(shí),強(qiáng)制比對(duì)metadata 和數(shù)據(jù)存放區(qū),數(shù)量多,時(shí)間慢,系統(tǒng)繁忙
-
出現(xiàn)日志文件系統(tǒng) (Journaling file system)
專(zhuān)門(mén)在文件系統(tǒng)中規(guī)劃出一個(gè)塊,該塊專(zhuān)門(mén)記錄寫(xiě)入或修訂文件時(shí)的步驟:
1 預(yù)備:當(dāng)系統(tǒng)寫(xiě)入文件時(shí),會(huì)先在Journal 塊中記錄某個(gè)文件準(zhǔn)備要寫(xiě)入的信息
2 實(shí)際寫(xiě)入: 寫(xiě)入文件的權(quán)限與數(shù)據(jù); 開(kāi)始更新meta data
3 結(jié)束:完成數(shù)據(jù)與meta data 的更新后,在journal塊當(dāng)中完成該文件的記錄- 只要檢查journal塊就可以知道是哪些文件出現(xiàn)了inconsistent的狀態(tài),針對(duì)文件修復(fù)
- dumpe2fs 中的 superblock 有Journal inode/backup/size 的信息
- 為什么 從Ext2 轉(zhuǎn)換到Ext3 ?可利用性 數(shù)據(jù)完整性 速度 和 易于轉(zhuǎn)換(不用格式化)
8.1.6 Linux 文件系統(tǒng)的操作
Review #p
所有數(shù)據(jù)都得加載到內(nèi)存后cpu才能夠?qū)?shù)據(jù)進(jìn)行處理。當(dāng)編輯很大的文件時(shí),頻繁的要系統(tǒng)寫(xiě)入磁盤(pán)中,由于磁盤(pán)寫(xiě)入速度要比內(nèi)存慢很多,耗在等待硬盤(pán)的寫(xiě)入和讀取中,沒(méi)效率。
- Asynchronously 異步處理
1 當(dāng)系統(tǒng)加載一個(gè)文件到內(nèi)存后,若沒(méi)被改動(dòng),則內(nèi)存區(qū)段的文件數(shù)據(jù)會(huì)被設(shè)置為clean
2 如若被改動(dòng),內(nèi)存中數(shù)據(jù)會(huì)被改成dirty
3 改動(dòng)被保存在內(nèi)存里,未被保存到磁盤(pán)中
4 系統(tǒng)會(huì)不定時(shí)將 dirty 的數(shù)據(jù)寫(xiě)回磁盤(pán),保持磁盤(pán)和內(nèi)存數(shù)據(jù)的一致性。(sync命令強(qiáng)制同步) - 內(nèi)存 與 文件系統(tǒng)的關(guān)系
1 系統(tǒng)將常用文件放置在主儲(chǔ)存器的緩沖區(qū),以提高文件系統(tǒng)的讀寫(xiě)速度
2 Linux的物理內(nèi)存會(huì)被用光,正常。可加速系統(tǒng)性能
3 sync 手動(dòng)同步
4 正常關(guān)機(jī),關(guān)機(jī)命令會(huì)調(diào)用sync同步
5 非正常關(guān)機(jī)會(huì)導(dǎo)致長(zhǎng)時(shí)間的磁盤(pán)校驗(yàn),甚至導(dǎo)致文件系統(tǒng)損毀
8.1.7 掛載點(diǎn)(mount point)的意義
文件系統(tǒng)鏈接到某個(gè)目錄 -> 掛載
一定是目錄,該目錄為掛載點(diǎn)
?#p208 難道不是掛載到root下?
8.1.8 其他Linux支持的文件系統(tǒng)與VFS
傳統(tǒng)文件系統(tǒng)
日志文件系統(tǒng)
網(wǎng)絡(luò)文件系統(tǒng):NFS SMBFS
- 查看Linux支持的文件系統(tǒng)
ls -l /lib/modules/$ (uname -r)/kernel/fs - 查看系統(tǒng)目前已經(jīng)加載的內(nèi)存支持的文件系統(tǒng)
cat /proc/filesystems - VFS Virtual Filesystem System
Linux 通過(guò)VFS的內(nèi)核功能讀取文件系統(tǒng)
(文件系統(tǒng)略)
8.2 文件系統(tǒng)的簡(jiǎn)單操作
8.2.1 磁盤(pán)與目錄的容量
-
df [-hiTa] display free disk space列出文件系統(tǒng)的整體磁盤(pán)使用量
-h human readable
-i 不用硬盤(pán)容量,用inode數(shù)量顯示
-T 列出該分區(qū)的文件系統(tǒng)名稱Output
Filesystem 代表文件系統(tǒng)是在哪個(gè)分區(qū)
1K-block 說(shuō)明下面單位為1kb
Used 使用掉的硬盤(pán)空間
Available剩下
Use% 使用率
mountedon 掛載點(diǎn)df 針對(duì)整個(gè)文件系統(tǒng) ,需特別關(guān)注 根目錄 的剩余容量
特殊的 /proc 和 /dev/shm(虛擬的,下次開(kāi)機(jī)就沒(méi)了)
du display disk usage statistics
不使用任何參數(shù)時(shí),會(huì)列出當(dāng)前目錄下的目錄文件容量
-a 列出目錄和文件的容量
-s 只列出總量 -S 去除子目錄
使用通配符 查看 每個(gè)目錄所占用容量
du -sm /*
8.2.2 連接文件 ln
softlink 快捷方式
hardlink 通過(guò)文件系統(tǒng)的inode連接產(chǎn)生新文件名,而非新文件
- Hard Link
ls -al link字段下的數(shù)字,實(shí)際是多少文件link到了這個(gè)inode號(hào)碼
為什么?
安全。
1 任意的文件名被刪除,文件內(nèi)容仍然實(shí)際存在。
2 任意的文件名進(jìn)入編輯,文件內(nèi)容都可以被修改。
3 就是多在block里寫(xiě)入一個(gè)關(guān)聯(lián)信息而已
缺點(diǎn)
1 不能跨文件系統(tǒng) 2 不能連接到目錄 ?#p214
- symbolic link
創(chuàng)建一個(gè)獨(dú)立的文件(新的inode號(hào)碼,新的block),讓這個(gè)文件數(shù)據(jù)讀取指向它連接的文件名。
當(dāng)源文件被刪除后,slink文件無(wú)法打開(kāi),實(shí)際就是找不到連接的文件名。
ln link 源文件 目標(biāo)文件
-s 創(chuàng)建symbolic link
-f 如果目標(biāo)文件存在,則先將其刪除再創(chuàng)建Tips
ln -s /bin /root/bin
此時(shí)/root/bin(為符號(hào)連接文件) 下內(nèi)容進(jìn)入/bin下內(nèi)容,如果被刪除了,block中就沒(méi)有這份數(shù)據(jù)了(軟連接文件)
挽救:趕緊刪除/root/bin 這個(gè)符號(hào)鏈接文件
原本hardlink,/root/bin下刪除,與/bin下內(nèi)容無(wú)關(guān)。關(guān)于目錄的鏈接數(shù)量
新目錄底下存在 . 和 .. 目錄
該目錄本身 鏈接數(shù)量為2 (自身+.)
上級(jí)目錄 鏈接數(shù)量+1 (原有 + ..)
8.3 磁盤(pán)的分區(qū)、格式化、檢驗(yàn)與掛載
加磁盤(pán)怎么做?
1 對(duì)磁盤(pán)分區(qū)
2 對(duì)分區(qū)format創(chuàng)建可用文件系統(tǒng)
3 對(duì)文件系統(tǒng)檢驗(yàn)
4 Linux,需要?jiǎng)?chuàng)建掛載點(diǎn),并掛載。
8.3.1 磁盤(pán)分區(qū)
fdisk DOS partition maintenance program
按m顯示所有操作 離開(kāi)q所有操作不會(huì)生效
w操作生效 p 輸出目前磁盤(pán)狀態(tài)
Device 設(shè)備文件名
Boot 是否為開(kāi)機(jī)引導(dǎo)模塊
Start End 哪個(gè)柱面號(hào)碼之間 決定分區(qū)的大小
Blocks 以1k為單位的容量
ID system 提示文件系統(tǒng)
最后dev的End柱面號(hào)碼為多少 與最大柱面號(hào)碼5005差距多少 即剩余可分區(qū)的大小
Start End 判斷拓展分區(qū)和邏輯分區(qū)
fdisk -l 查閱系統(tǒng)內(nèi)所有分區(qū)
設(shè)備文件名不要加上數(shù)字 (數(shù)字就是分區(qū))刪除分區(qū)
fdisk /dev/hdc
p
d 選擇
w or q新增分區(qū)
后略,實(shí)操
8.3.2 磁盤(pán)格式化
mkfs -t 文件系統(tǒng)格式 /dev/hdc6
mke2fs 指定格式化 創(chuàng)建文件系統(tǒng)
8.3.3 磁盤(pán)檢驗(yàn) fsck badblocks
- fsck filesystem consistency check and interactive repair
8.3.4 磁盤(pán)掛載與卸載
單一文件系統(tǒng)不應(yīng)該被重復(fù)掛載在不同的掛載點(diǎn)
單一目錄不應(yīng)該重復(fù)掛載多個(gè)文件系統(tǒng)
作為掛載點(diǎn)的目錄應(yīng)該是空目錄
掛載:
mount 剛才創(chuàng)建的文件系統(tǒng)/dev/hdc6 目錄/mnt/hdc6
Linux有驅(qū)動(dòng)程序和分析superblock可以自動(dòng)識(shí)別出掛載的文件系統(tǒng)類(lèi)型
依靠 兩個(gè)文件
/etc/filesystems
/proc/filesystems
驅(qū)動(dòng)程序目錄
/lib/modules/$ (uname -r )/kernel/fs/
查看 mount -l
光驅(qū)一旦掛載之后就無(wú)法退出光盤(pán)
- 格式化(mksf)與掛載軟盤(pán)
略 - 掛載U盤(pán)
- 重新掛載
mount -o remount,rw,auto/ - 掛載不特定目錄
mount --bind /hom /mnt/home - 將設(shè)備文件卸載
umount - 使用Label name 進(jìn)行掛載的方法
查看Label name (dumpe2fs -h /dev/hdc6)
掛載(mount -L “vibird_logical” /mnt/hdc6)
8.3.5 磁盤(pán)參數(shù)修改
mknod(略)
修改Lable name (e2label)
tune2fs & hdparm 命令(略)
8.4 設(shè)置開(kāi)機(jī)掛載
8.4.1 開(kāi)機(jī)掛載文件/etc/fstab 及/etc/mtab
系統(tǒng)掛載的一些限制
1 根目錄是必須掛載的,而且一定要先于其他mount point被掛載出來(lái)
2 其他掛載點(diǎn)必須為已新建的目錄,可任意指定,但一定要遵守必需的系統(tǒng)目錄架構(gòu)原則。
3 所有掛載點(diǎn)在同一時(shí)間之內(nèi),只能掛載一次
4 所有分區(qū)在同一時(shí)間之內(nèi),只能被掛載一次
5 若進(jìn)行卸載,你必須將工作目錄移到掛載點(diǎn)外(以及子目錄)之外Lable 或設(shè)備文件名
mount point
磁盤(pán)分區(qū)的文件系統(tǒng)
-
文件系統(tǒng)的參數(shù)
screenshot.png 能否被 dump 備份命令作用
dump 是一個(gè)用來(lái)做為備份的命令, 我們可以透過(guò) fstab 指定哪個(gè)文件系統(tǒng)必須要進(jìn)行 dump 備份! 0 代表不要做 dump 備份, 1 代表要每天進(jìn)行 dump 的動(dòng)作。 2 也代表其他不定日期的 dump 備份動(dòng)作, 通常這個(gè)數(shù)值不是 0 就是 1 啦!是否以 fsck 檢驗(yàn)扇區(qū):
啟動(dòng)的過(guò)程中,系統(tǒng)默認(rèn)會(huì)以fsck檢驗(yàn)我們的 filesystem 是否完整 (clean)。 不過(guò),某些 filesystem 是不需要檢驗(yàn)的,例如內(nèi)存置換空間 (swap) ,或者是特殊文件系統(tǒng)例如 /proc 與 /sys 等等。所以,在這個(gè)字段中,我們可以配置是否要以 fsck 檢驗(yàn)該 filesystem 喔。 0 是不要檢驗(yàn), 1 表示最早檢驗(yàn)(一般只有根目錄會(huì)配置為 1), 2 也是要檢驗(yàn),不過(guò) 1 會(huì)比較早被檢驗(yàn)啦! 一般來(lái)說(shuō),根目錄配置為 1 ,其他的要檢驗(yàn)的 filesystem 都配置為 2 就好了。

