云計(jì)算學(xué)習(xí)路線教程大綱課件:EXT2/3/4文件系統(tǒng):
索引式文件系統(tǒng)
====================================================================================
Ext3/Ext4文件系統(tǒng)基本結(jié)構(gòu)
· superblock:記錄此文件系統(tǒng)的整體信息,包括inode/block的總量、使用量、剩余量,以及文件系統(tǒng)的格式等;
· inode:記錄文件的屬性(文件的元數(shù)據(jù)metadata),一個(gè)文件占用一個(gè)inode,同時(shí)記錄此文件數(shù)據(jù)所在的block number;
· block:實(shí)際存儲(chǔ)文件的內(nèi)容,若文件太大時(shí),會(huì)占用多個(gè)block。
Superblock 沒有Superblock ,就沒有filesystem
· block 與 inode 的總量;
· 未使用與已使用的 inode / block 數(shù)量;
· block 與 inode 的大小 (block 為 1, 2, 4K,inode 為 128bytes 或 256bytes);
· filesystem 的掛載時(shí)間、最近一次寫入數(shù)據(jù)的時(shí)間、最近一次檢查 (fsck) 的時(shí)間等文件系統(tǒng)相關(guān)信息;
· 每個(gè)block group 都可能含有 superblock,這樣可以進(jìn)行用于 superblock 的修復(fù);
inode table: 存儲(chǔ)文件的元數(shù)據(jù)
· 文件的權(quán)限(read/write/excute);
· 文件的屬主/屬組(owner/group);
· 文件的大?。?/p>
· 文件的(ctime);
· 文件的(atime);
· 文件的(mtime);
· 記錄文件內(nèi)容所在的block number (pointer);
data block: 存儲(chǔ)文件的實(shí)際數(shù)據(jù)
查看文件系統(tǒng)的信息
dumpe2fs
[root@tianyun ~]# dumpe2fs /dev/sda2
tune2fs
[root@tianyun ~]# tune2fs -l /dev/sda3
tune2fs 1.39 (29-May-2006)
Filesystem volume name: yang
Last mounted on: <not available>
Filesystem UUID: 28459f88-87dc-4624-94a7-07b0f3eb2420
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
Filesystem features: has_journal ext_attr resize_inode dir_index filetype needs_recovery sparse_super
Default mount options: (none)
Filesystem state: clean
Errors behavior: Continue
Filesystem OS type: Linux
Inode count: 48960
Block count: 195312
Reserved block count: 9765
Free blocks: 183410
Free inodes: 48946
First block: 1
Block size: 1024
First inode: 11
Inode size: 128
Journal inode: 8
EXT2/EXT3/EXT4 日志式文件系統(tǒng)
新建一個(gè)文件的過程:
1. 先確定使用者對(duì)于想新創(chuàng)建文件目錄是否具有 w 與 x 的權(quán)限;
2. 根據(jù) inode bitmap 找到?jīng)]有使用的 inode 號(hào)碼,并將文件的權(quán)限和屬性寫入;
3. 根據(jù) block bitmap 找到?jīng)]有使用的 block號(hào)碼,將文件的實(shí)際數(shù)據(jù)寫入 block 中,且更新 inode 的 block 指向信息;
4. 將剛剛寫入的 inode 與 block 信息同步更新 inode bitmap 與 block bitmap,并更新 superblock 的內(nèi)容。
· 文件的不一致 (Inconsistent) 狀態(tài)
例如突然斷電、kernel發(fā)生錯(cuò)誤等。這樣可能寫入的信息僅有 inode table 及 data block 而已,最后一個(gè)同步更新的步
驟并沒有做完,此時(shí)就會(huì)發(fā)生 metadata 的內(nèi)容與實(shí)際信息產(chǎn)生不一致 (Inconsistent) 的情況。
· 日志式文件系統(tǒng) (Journaling filesystem)
1. 準(zhǔn)備:當(dāng)系統(tǒng)要寫入一個(gè)文件時(shí),會(huì)先在日志區(qū)記錄某個(gè)文件準(zhǔn)備寫入的信息;
2. 實(shí)際寫入:寫入文件的權(quán)限與數(shù)據(jù),更新 metadata 的信息;
3. 結(jié)束:完成數(shù)據(jù)與 metadata 的更新后,在日志記錄區(qū)塊中完成文件的記錄。
修復(fù)文件系統(tǒng) fsck,e2fsck -fy
案例1: 系統(tǒng)無法啟動(dòng)
案例二:Read-only file system
如果運(yùn)行中的服務(wù)器的某一個(gè)分區(qū)出現(xiàn)readonly,導(dǎo)致進(jìn)程無法寫這個(gè)分區(qū)(比如nginx進(jìn)程無法寫日志文件到此分區(qū),
手動(dòng)測試touch文件到此分區(qū)也顯示:cannot touch ‘xxxxx’:Read-only file system),該怎么辦?
解決:磁盤read-only的原因一般有2種,一種是沒有正常關(guān)機(jī)導(dǎo)致,還有一種是硬盤故障導(dǎo)致。
如果是/分區(qū),這種情況只能下線報(bào)修磁盤了。
如果是其它分區(qū),則可以嘗試三步解決此問題:
1. 先取消掛載此分區(qū)
2. 再fsck.ext4 -fy /dev/sdb1
3. 最后掛載此分區(qū),檢查是否可以正常讀寫。
如果仍舊不可以正常讀寫,請(qǐng)報(bào)修磁盤。
注:以上操作過程,請(qǐng)保證服務(wù)器不在線上提供服務(wù)。
案例三:修復(fù)superblock
找到備份的superblock
[root@tianyun ~]# dumpe2fs -h /dev/datavg/lv1 |grep 'Blocks per group'
dumpe2fs 1.42.9 (28-Dec-2013)
Blocks per group: 8192
利用備份的 superblock恢復(fù)superblock
[root@tianyun ~]# fsck.ext4 -b 8192 /dev/datavg/lv1
聯(lián)系客服