Lunix磁盘与文件系统管理
目錄
?
1 認(rèn)識(shí)Lunix文件系統(tǒng)
1.1 文件系統(tǒng)特性
1.2 Lunix的Ext2文件系統(tǒng)
1.2.1?data block (資料區(qū)塊)
1.2.2??inode table (inode 表格)?
1.2.3?Superblock (超級(jí)區(qū)塊)
1.2.4?Filesystem Description (文件系統(tǒng)描述說(shuō)明)
1.2.5?block bitmap (區(qū)塊對(duì)照表)
1.2.6?inode bitmap (inode 對(duì)照表)
1.2.7?dumpe2fs: 查詢 Ext 家族 superblock 信息的指令
1.3 與目錄樹的關(guān)系
1.4?EXT2/EXT3/EXT4 文件的存取與日志式文件系統(tǒng)的功能
1.5 XFS文件系統(tǒng)查看描述命令 xfs_info
1.6 查看文件系統(tǒng)和掛載點(diǎn)df和評(píng)估容量du
1.7 磁盤的分區(qū)、格式化、檢驗(yàn)與掛載
1.7.1 查詢磁盤信息lsblk
1.7.2 blkid列出裝置的UUID
1.7.3 查詢磁盤的分區(qū)表類型和分區(qū)信息
1.7.4 使用gdisk/fdisk進(jìn)行分區(qū)
1.7.5?用 gdisk 新增分區(qū)槽
1.7.6 格式化新建的分區(qū)建立文件系統(tǒng)
1.7.8 文件系統(tǒng)檢驗(yàn)?xfs_repair?
1.7.9 文件系統(tǒng)掛載與卸除
1.7.10 開(kāi)機(jī)自動(dòng)掛載
1.8 文件系統(tǒng)的特殊觀察與操作
1.8.1 查看容量浪費(fèi)問(wèn)題
1.8.2?利用 GNU 的 parted 進(jìn)行分區(qū)行為
1 認(rèn)識(shí)Lunix文件系統(tǒng)
1.1 文件系統(tǒng)特性
磁盤分區(qū)完畢后還需要進(jìn)行格式化(format),之后操作系統(tǒng)才能夠使用這個(gè)文件系統(tǒng)。這是因?yàn)槊糠N操作系統(tǒng)所設(shè)定的文件屬性/權(quán)限并不相同, 為了存放這些文件所需的數(shù)據(jù),因此就需要將分區(qū)槽進(jìn)行格式化,以成為操作系統(tǒng)能夠利用的文件系統(tǒng)格式。
Linux 的正統(tǒng)文件系統(tǒng)則為 Ext2 (Linux second extended file system, ext2fs),通常我們可以稱呼一個(gè)可被掛載的數(shù)據(jù)為一個(gè)文件系統(tǒng)。
文件除了內(nèi)容之外,還具有許多的屬性。文件系統(tǒng)通常會(huì)將這兩部份的數(shù)據(jù)分別存放在不同的區(qū)塊,權(quán)限與屬性放置到
inode 中,至于實(shí)際數(shù)據(jù)則放置到 data block 區(qū)塊中。另外,還有一個(gè)超級(jí)區(qū)塊 (superblock) 會(huì)記錄整個(gè)文件系統(tǒng)的整體信息,包括 inode 與 block 的總量、使用量、剩余量等。
如果能夠找到文件的 inode 的話,那么自然就會(huì)知道這個(gè)文件所放置數(shù)據(jù)的 block 號(hào)碼。
?
1.2 Lunix的Ext2文件系統(tǒng)
我們知道 filesystem 里面可能含有的 inode/block/superblock 等。而標(biāo)準(zhǔn)的 Linux 文件系統(tǒng) Ext2 就是使用這種 inode 為基礎(chǔ)的文件系統(tǒng)!為方便管理,Ext2 文件系統(tǒng)在格式化的時(shí)候基本上是區(qū)分為多個(gè)區(qū)塊群組 (block group) 的,每個(gè)區(qū)塊群組都有獨(dú)立的 inode/block/superblock 系統(tǒng)。
1.2.1?data block (資料區(qū)塊)
data block 是用來(lái)放置文件內(nèi)容數(shù)據(jù)地方,在 Ext2 文件系統(tǒng)中所支持的 block 大小有 1K, 2K 及4K 三種而已。在格式化時(shí) block 的大小就固定了,且每個(gè) block 都有編號(hào),以方便 inode 的記錄。
其他限制
1.2.2??inode table (inode 表格)?
inode 記錄的文件數(shù)據(jù)包括:
該文件的存取模式(read/write/excute);
該文件的擁有者與群組(owner/group);
該文件的容量;
該文件建立或狀態(tài)改變的時(shí)間(ctime);
最近一次的讀取時(shí)間(atime);
最近修改的時(shí)間(mtime);
定義文件特性的旗標(biāo)(flag),如 SetUID...;
該文件真正內(nèi)容的指向 (pointer);
inode 其他特點(diǎn):
每個(gè) inode 大小均固定為 128 bytes (新的 ext4 與 xfs 可設(shè)定到 256 bytes);
每個(gè)文件都僅會(huì)占用一個(gè) inode 而已;
承上,因此文件系統(tǒng)能夠建立的文件數(shù)量與 inode 的數(shù)量有關(guān);
系統(tǒng)讀取文件時(shí)需要先找到 inode,并分析 inode 所記錄的權(quán)限與用戶是否符合,若符合才能夠開(kāi)始實(shí)際
讀取 block 的內(nèi)容。
1.2.3?Superblock (超級(jí)區(qū)塊)
Superblock 是記錄整個(gè) filesystem 相關(guān)信息的地方,沒(méi)有 Superblock ,就沒(méi)有這個(gè) filesystem ,記錄的信息包括:
block 與 inode 的總量;
未使用與已使用的 inode / block 數(shù)量;
block 與 inode 的大小 (block 為 1, 2, 4K,inode 為 128bytes 或 256bytes);
filesystem 的掛載時(shí)間、最近一次寫入數(shù)據(jù)的時(shí)間、最近一次檢驗(yàn)磁盤 (fsck) 的時(shí)間等文件系統(tǒng)的相關(guān)信
息;
?一個(gè) valid bit 數(shù)值,若此文件系統(tǒng)已被掛載,則 valid bit 為 0 ,若未被掛載,則 valid bit 為 1 。
1.2.4?Filesystem Description (文件系統(tǒng)描述說(shuō)明)
這個(gè)區(qū)段可以描述每個(gè) block group 的開(kāi)始與結(jié)束的 block 號(hào)碼,以及說(shuō)明每個(gè)區(qū)段 (superblock,?bitmap, inodemap, data block) 分別介于哪一個(gè) block 號(hào)碼之間。
1.2.5?block bitmap (區(qū)塊對(duì)照表)
block bitmap 記錄使用與未使用的 block 號(hào)碼。
1.2.6?inode bitmap (inode 對(duì)照表)
?inode bitmap 記錄使用與未使用的 inode 號(hào)碼。
1.2.7?dumpe2fs: 查詢 Ext 家族 superblock 信息的指令
dumpe2fs? [options]? 裝置文件名
blkid <==這個(gè)指令可以叫出目前系統(tǒng)有被格式化的裝置
選項(xiàng)與參數(shù):
-b :列出保留為壞軌的部分
-h :僅列出 superblock 的數(shù)據(jù),不會(huì)列出其他的區(qū)段內(nèi)容!
1.3 與目錄樹的關(guān)系
文件系統(tǒng)會(huì)分配一個(gè) inode 與至少一塊 block 給該目錄。其中,inode 記錄該目錄的相關(guān)權(quán)限與屬性,并可記錄分配到的那塊 block 號(hào)碼; 而 block 則是記錄在這個(gè)目錄下的文件名與該文件名占用的 inode 號(hào)碼數(shù)據(jù)。
想要實(shí)際觀察 root 家目錄內(nèi)的文件所占用的 inode 號(hào)碼時(shí),可以使用 ls -i 這個(gè)選項(xiàng)來(lái)處理:
由于目錄樹是由根目錄開(kāi)始讀起,因此系統(tǒng)透過(guò)掛載的信息可以找到掛載點(diǎn)的 inode 號(hào)碼,此時(shí)就能夠得到根目錄的 inode 內(nèi)容,并依據(jù)該 inode 讀取根目錄的 block 內(nèi)的文件名數(shù)據(jù),再一層一層的往下讀到正確的檔名。?
1.4?EXT2/EXT3/EXT4 文件的存取與日志式文件系統(tǒng)的功能
上一小節(jié)談到的僅是讀取而已,那么如果是新建一個(gè)文件或目錄時(shí),我們的文件系統(tǒng)是如何處理的呢?這個(gè)時(shí)候就得要 block bitmap 及 inode bitmap 的幫忙了!假設(shè)我們想要新增一個(gè)文件,此時(shí)文件系統(tǒng)的行為是:
1. 先確定用戶對(duì)于欲新增文件的目錄是否具有 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 的 bloc指向數(shù)據(jù);
4. 將剛剛寫入的 inode 與 block 數(shù)據(jù)同步更新 inode bitmap 與 block bitmap,并更新 superblock 的內(nèi)容;
數(shù)據(jù)的不一致 (Inconsistent) 狀態(tài)
在文件在寫入文件系統(tǒng)時(shí),因?yàn)椴恢驅(qū)е孪到y(tǒng)中斷(,所以寫入的數(shù)據(jù)僅有 inode table 及 data block 而已, 最后一個(gè)同步更新中介數(shù)據(jù)的步驟并沒(méi)有做完,此時(shí)就會(huì)發(fā)生 metadata 的內(nèi)容與實(shí)際數(shù)據(jù)存放區(qū)產(chǎn)生不一致(Inconsistent) 的情況。
日志式文件系統(tǒng)
為避免數(shù)據(jù)不一致?tīng)顟B(tài)。日志式文件系統(tǒng)設(shè)計(jì)的基本功能:在filesystem 當(dāng)中規(guī)劃出一個(gè)區(qū)塊,該區(qū)塊專門在記錄寫入或修訂文件時(shí)的步驟。
1.5 XFS文件系統(tǒng)查看描述命令 xfs_info
像 EXT 家族的 dumpe2fs 指令去觀察 superblock 內(nèi)容一樣,xfs文件系統(tǒng)可以使用xfs_info 命令去觀察!
1.6 查看文件系統(tǒng)和掛載點(diǎn)df和評(píng)估容量du
df [options]??目錄或文件名
選項(xiàng)與參數(shù):
-a :列出所有的文件系統(tǒng),包括系統(tǒng)特有的 /proc 等文件系統(tǒng);
-k :以 KBytes 的容量顯示各文件系統(tǒng);
-m :以 MBytes 的容量顯示各文件系統(tǒng);
-h :以人們較易閱讀的 GBytes, MBytes, KBytes 等格式自行顯示;
-H :以 M=1000K 取代 M=1024K 的進(jìn)位方式;
-T :連同該 partition 的 filesystem 名稱 (例如 xfs) 也列出;
-i :不用磁盤容量,而以 inode 的數(shù)量來(lái)顯示
du?[options]??目錄或文件名
輸出的數(shù)值數(shù)據(jù)為 1K 大小的容量單位
選項(xiàng)與參數(shù):
-a :列出所有的文件與目錄容量,因?yàn)槟J(rèn)僅統(tǒng)計(jì)目錄底下的文件量而已。
-h :以人們較易讀的容量格式 (G/M) 顯示;
-s :列出總量而已,而不列出每個(gè)各別的目錄占用容量;
-S :不包括子目錄下的總計(jì),與 -s 有點(diǎn)差別。
-k :以 KBytes 列出容量顯示;
-m :以 MBytes 列出容量顯示
1.7 磁盤的分區(qū)、格式化、檢驗(yàn)與掛載
如果我們想要在系統(tǒng)里面新增一顆磁盤時(shí),應(yīng)該有哪些動(dòng)作需要做的呢:
1. 對(duì)磁盤進(jìn)行分區(qū),以建立可用的 partition ;
2. 對(duì)該 partition 進(jìn)行格式化 (format),以建立系統(tǒng)可用的 filesystem;
3. 若想要仔細(xì)一點(diǎn),則可對(duì)剛剛建立好的 filesystem 進(jìn)行檢驗(yàn);
4. 在 Linux 系統(tǒng)上,需要建立掛載點(diǎn) (亦即是目錄),并將他掛載上來(lái);
1.7.1 查詢磁盤信息lsblk
為了給磁盤分區(qū),首先要知道磁盤是MBR 還是 GPT 格式的,用以決定采用 fdisk 或者是 gdisk 來(lái)處理分區(qū)。
lsblk [options]? [device]
選項(xiàng)與參數(shù):
-d :僅列出磁盤本身,并不會(huì)列出該磁盤的分區(qū)數(shù)據(jù)
-f :同時(shí)列出該磁盤內(nèi)的文件系統(tǒng)名稱
-i :使用 ASCII 的線段輸出,不要使用復(fù)雜的編碼 (再某些環(huán)境下很有用)
-m :同時(shí)輸出該裝置在 /dev 底下的權(quán)限數(shù)據(jù) (rwx 的數(shù)據(jù))
-p :列出該裝置的完整文件名!而不是僅列出最后的名字而已。
NAME:裝置文件名
MAJ:MIN:其實(shí)核心認(rèn)識(shí)的裝置都是透過(guò)這兩個(gè)代碼來(lái)熟悉的!分別是主要:次要裝置代碼!
RM:是否為可卸除裝置 (removable device),如光盤、USB 磁盤等等
SIZE:容量
RO:是否為只讀裝置的意思
TYPE:是磁盤 (disk)、分區(qū)槽 (partition) 還是只讀存儲(chǔ)器 (rom) 等輸出
MOUTPOINT:掛載點(diǎn)
-t :列出該磁盤裝置的詳細(xì)數(shù)據(jù),包括磁盤隊(duì)列機(jī)制、預(yù)讀寫的數(shù)據(jù)量大小等
1.7.2 blkid列出裝置的UUID
lsblk 可以使用 -f 來(lái)列出文件系統(tǒng)與裝置的 UUID 數(shù)據(jù),但也可以直接使用 blkid 來(lái)找出裝置的 UUID 。
1.7.3 查詢磁盤的分區(qū)表類型和分區(qū)信息
使用lsblk查詢出磁盤名稱之后,可以使用parted命令查詢磁盤分區(qū)類型
1.7.4 使用gdisk/fdisk進(jìn)行分區(qū)
注意:MBR 分區(qū)表使用 fdisk 分區(qū), GPT 分區(qū)表使用 gdisk 分區(qū)。
使用『 p 』可以列出目前這顆磁盤的分區(qū)表信息,這個(gè)信息的上半部在顯示整體磁盤的狀態(tài)。 如上這個(gè)磁盤共有 40GB 左右的容量,共有 83886080 個(gè)扇區(qū),每個(gè)扇區(qū)的容量為512bytes。 要注意的是,現(xiàn)在的分區(qū)主要是以扇區(qū)為最小的單位!下半部的分區(qū)表信息主要在列出每個(gè)分區(qū)槽的個(gè)別信息項(xiàng)目。每個(gè)項(xiàng)目的意義為:
Number:分區(qū)槽編號(hào),1 號(hào)指的是 /dev/vda1 這樣計(jì)算。
Start (sector):每一個(gè)分區(qū)槽的開(kāi)始扇區(qū)號(hào)碼位置
End (sector):每一個(gè)分區(qū)的結(jié)束扇區(qū)號(hào)碼位置,與 start 之間可以算出分區(qū)槽的總?cè)萘?/p>
Size:就是分區(qū)槽的容量了
Code:在分區(qū)槽內(nèi)的可能的文件系統(tǒng)類型。Linux 為 8300,swap 為 8200。不過(guò)這個(gè)項(xiàng)目只是一個(gè)提示而
已,不見(jiàn)得真的代表此分區(qū)槽內(nèi)的文件系統(tǒng)喔!
Name:文件系統(tǒng)的名稱等等
1.7.5?用 gdisk 新增分區(qū)槽
更新lunix核心
partprobe -s
查看磁盤分區(qū)表
cat? ?/proc/partitions
1.7.6 格式化新建的分區(qū)建立文件系統(tǒng)
『建置文件系統(tǒng) (make filesystem)』所以使用的指令是 mkfs !而我們要建立的其實(shí)是 xfs 文件系統(tǒng), 因此使用的是 mkfs.xfs 這個(gè)指令。
mkfs.xfs [-b bsize] [-d parms] [-i parms] [-l parms] [-L label] [-f] \??[-r parms] 裝置名稱
1.7.8 文件系統(tǒng)檢驗(yàn)?xfs_repair?
當(dāng)有 xfs 文件系統(tǒng)錯(cuò)亂才需要使用這個(gè)指令!所以,這個(gè)指令最好是不要用到啦!但有問(wèn)題發(fā)生時(shí),這個(gè)指令卻又很重要。
xfs_repair?[options]? 裝置名稱
選項(xiàng)與參數(shù):
-f :后面的裝置其實(shí)是個(gè)文件而不是實(shí)體裝置
-n :單純檢查并不修改文件系統(tǒng)的任何數(shù)據(jù) (檢查而已)
-d :通常用在單人維護(hù)模式底下,針對(duì)根目錄 (/) 進(jìn)行檢查與修復(fù)的動(dòng)作!很危險(xiǎn)!不要隨便使用
1.7.9 文件系統(tǒng)掛載與卸除
掛載的先決條件:
單一文件系統(tǒng)不應(yīng)該被重復(fù)掛載在不同的掛載點(diǎn)(目錄)中;
單一目錄不應(yīng)該重復(fù)掛載多個(gè)文件系統(tǒng);
要作為掛載點(diǎn)的目錄,理論上應(yīng)該都是空目錄才是。
提示:掛載了文件系統(tǒng)之后,原目錄下的東西就會(huì)暫時(shí)的消失
示例
umount 將裝置文件卸除?
1.7.10 開(kāi)機(jī)自動(dòng)掛載
若想要開(kāi)機(jī)掛載,那就直接到 /etc/fstab 里面去修修就行。
1.8 文件系統(tǒng)的特殊觀察與操作
1.8.1 查看容量浪費(fèi)問(wèn)題
使用 ls -l 去查詢某個(gè)目錄下的數(shù)據(jù)時(shí),第一行都會(huì)出現(xiàn)一個(gè)『total』的字樣!指的是該目錄下的所有數(shù)據(jù)所耗用的實(shí)際 block 數(shù)量 * block 大小的值。
從上面的特殊字體部分,那就是每個(gè)文件所使用掉 block 的容量!舉例來(lái)說(shuō),那個(gè) crontab 雖然僅有 451bytes , 不過(guò)他卻占用了整個(gè) block (每個(gè) block 為 4K),所以將所有的文件的所有的 block?加總就得到 12Kbytes 那個(gè)數(shù)值了。 如果計(jì)算每個(gè)文件實(shí)際容量的加總結(jié)果,其實(shí)只有不到 5K ,這樣就耗費(fèi)掉好多容量了。
1.8.2?利用 GNU 的 parted 進(jìn)行分區(qū)行為
總結(jié)
以上是生活随笔為你收集整理的Lunix磁盘与文件系统管理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 线性神经网络原理以及MATLAB算法实现
- 下一篇: spring boot校园二手销售网站