7. Linux磁盤與文件系統(tǒng)管理
文件系統(tǒng)通常會將數(shù)據(jù)放在不同的區(qū)塊厕九,權限與屬性放置到inode中蓖捶,至于實際數(shù)據(jù)則放到datab lock區(qū)塊中,另外扁远,還有一個超級區(qū)塊(superblock)會記錄整個文件系統(tǒng)的信息俊鱼,包括inode與block的總量、使用量穿香、剩余量等亭引。
- superblock: 記錄此filesystem的整體信息,包括inode/block的總量皮获、使用量焙蚓、剩余量,一級文件系統(tǒng)的格式與相關信息;
- inode: 記錄文件的屬性,一個文件占用一個inode购公,同事記錄此文件的數(shù)據(jù)所在的block號碼;
- block: 實際記錄文件的內(nèi)容萌京,若文件太大時,會占用多個block宏浩。
7.2 文件系統(tǒng)的簡單操作
df:列出文件系統(tǒng)的真題磁盤使用量
結構:df [-ahikHTm] [目錄或文件名]
選項參數(shù):
- -a: 列出所有的文件系統(tǒng)知残,包括系統(tǒng)特有的/proc等文件系統(tǒng);
- -k,-m: 以Kb比庄,Mb的容量顯各文件系統(tǒng);
- <u>-h: 以人們較易閱讀的Gb,Mb,Kb等格式自行顯示</u>
- -H: 以M=1000k取代M=1024K的進位方式;
- -T: 連同該partition的filesystem名稱(例如xfs)也列出;
- <u>-i: 不用磁盤容量求妹,而以inode的數(shù)量來顯示.</u>。
字段解釋
:
Filesystem: 代表文件系統(tǒng)是在哪個partition,所以列出裝置名稱;
lk-blocks: 說明底下的數(shù)字單位是1kb,可以用-h或者-m來改變;
Used: 磁盤使用掉的空間;
Available: 磁盤可用空間(剩下的空間);
Used%: 使用率(Used/total)
Mounted on: 磁盤掛載的目錄所在敬惦,也就是掛載點.
du:評估文件系統(tǒng)的磁盤使用量(常用在推估目錄所占容量)
結構:du [-ahsSkm] 文件或目錄名稱
選項參數(shù):
- -a: 列出所有的文件與目錄容量,默認僅統(tǒng)計目錄底下的目錄容量净神,不含文件;
- -k,-m: 以Kb溉委,Mb的容量顯各文件系統(tǒng);
- <u>-h: 以人們較易閱讀的Gb,Mb,Kb等格式自行顯示</u>
- <u>-s: 列出總量而已鹃唯,而不列出每個個別的目錄占用容量;</u>
- -S: 不包括子目錄下的總計,與-s有點差別.
ln:實體連接與符號連接
hard link與symbolic link圖示
結構:ln [-sf] source destination
選項參數(shù):
- <u>-s: 如果不加任何參數(shù)就是hard_link,-s就是symbolic_link</u>;
-
-f: 強制建立瓣喊,如果destination存在坡慌,就刪除后再建立;
圖示解釋
hard link會增加文件的連接數(shù)圖中標紅的;
符號連接(快捷方式)不會增加連接數(shù),符號連接占用大小跟文件名大小有關型宝,理論上講上圖中文件名(a_symbolic_link)只有15b八匠,應該占用15b的絮爷,但是占用的是19趴酣。
hard link指向的inode都是相同的(黃線標出,倆都是138),因此即使將a.txt刪除坑夯,文件也不會消失岖寞,僅僅是連接數(shù)變成了1而已,但是可以看到符號連接變成了紅色柜蜈,表示已不可用仗谆。
其實可以把源文件名a.txt也看成是一個指向實際文件數(shù)據(jù)的hard link.
目錄的link數(shù)(連接數(shù))
目錄的link數(shù)其實就是它的子目錄數(shù)(與它目錄下的文件無關);
從圖中可以看出新建目錄的link數(shù)為2,而上層目錄的link數(shù)會增加淑履。
7.3 磁盤的分區(qū)隶垮、格式化、校驗與掛載
lsblk:列出系統(tǒng)上的所有磁盤列表(list block)
結構:lsblk [-dfimpt] [device]
選項參數(shù):
- -d: 僅列出磁盤本身秘噪,并不會列出該磁盤的分區(qū)數(shù)據(jù);
- -f: 同時列出該磁盤內(nèi)的文件系統(tǒng)名稱;
- -i: 使用 ASCII 的線段輸出狸吞,不要使用復雜的編碼;
- -m: 同時輸出該裝置在 /dev 底下的權限數(shù)據(jù)(rwx 的數(shù)據(jù));
- -p: 列出該裝置的完整文件名,而不是僅列出最后的名字而已;
- -t: 列出該磁盤裝置的詳細數(shù)據(jù),包括磁盤隊列機制蹋偏、預讀寫的數(shù)據(jù)量大小等.
圖示字段解釋
NAME: 裝置的文件名便斥,會省略 /dev 等前導目錄;
MAJ:MIN: 核心認識的裝置都是透過這兩個代碼來熟悉的,分別是主要:次要裝置代碼;
RM: 是否為可卸除裝置(removable device)威始,如光盤枢纠,USB等;
SIZE: 容量大小;
RO: 是否為制度裝置;
TYPE: 是磁盤(disk)、分區(qū)槽(partition)還是只讀存儲器(rom)等輸出;
MOUNTPOINT: 掛載點.
blkid: 列出裝置的UUID,文件類型TYPE等參數(shù)
gdisk/fdisk: 磁盤分區(qū)
MBR分區(qū)表使用fdisk
GPT分區(qū)表使用gdisk
可以使用lsblk或blkid先找到磁盤
可以使用parted /dev/xxx print來查看磁盤分區(qū)表類型
這倆貨用法幾乎一樣
圖中指令gdisk /dev/sda
使用的裝置名 sda 后邊不能跟數(shù)字哦黎棠,因為是對整個裝置進行的分區(qū)晋渺,而不是對某個分區(qū)槽(例如/dev/sda1)進行的分區(qū)!
d: 刪除一個分區(qū)
n: 添加一個新的分區(qū)
p: 打印出分區(qū)表(常用)
q: 退出
其他不列舉了
可以隨便玩兒哦脓斩,只要離開的時候是「q」些举,就不會生效,要 「w」 才會生效!
p打印分區(qū)表
Number: 分區(qū)槽編號俭厚,1指 /dev/sda1
Start(sector): 每一個分區(qū)槽開始扇區(qū)號碼
End(sector): 每個分區(qū)槽的結束扇區(qū)位置
Size: 分區(qū)槽容量
Code: 在分區(qū)槽內(nèi)的可能的文件類型户魏,Linux為8300,swap為8200挪挤,不過這個只是一個提示叼丑,不見得真的代表此分區(qū)槽內(nèi)的文件系統(tǒng)哦
Name: 文件系統(tǒng)的名稱等等
可以看到最大扇區(qū)為83886080,但是只使用到65026047而已扛门,意思是還可以進行分區(qū)鸠信。
分區(qū)完成之后可以通過reboot或者使用partprobe -s來更新核心分區(qū)表信息,cat /etc/partitions可以查看分區(qū)信息哦
注意:切記不要在MBR分區(qū)上使用gdisk论寨,也不要在GPT分區(qū)上使用fdisk星立,否則一旦指令按錯,分區(qū)記錄可能會死光光哦葬凳。
磁盤格式化(建置文件系統(tǒng))
格式化指令 XFS文件系統(tǒng):mkfs(make filesystem)+.[文件系統(tǒng)名稱]
xfs文件系統(tǒng)mkfs.xfs绰垂;EXT4文件系統(tǒng): mkfs.ext4;查看支持的文件系統(tǒng)直接查詢有哪些mkfs指令即可,輸入mkfs火焰,然后按tab自動補全自己看咯劲装。
選項參數(shù)自行man page
全都使用默認值,格式化如上圖昌简,可以看到agcount(存儲群組)=4占业,這個值通常跟cpu個數(shù)有關,通常設置成cpu個數(shù)纯赎。
grep 'prosessor' /proc/cpuinfo 指令可以查看cpu個數(shù)谦疾,輸出的cpu序號由0開始。
上圖犬金,可以看到cpu只有一個念恍,因為我們之前已經(jīng)格式化過一次(建立了文件系統(tǒng))碎紊,
所以這里加的-f是強制格式化的意思,-d agcount=2表示設置存儲群組為2(我這里沒有跟cpu設置成一樣樊诺,僅僅是說明這個值如何設置)仗考。
文件系統(tǒng)修復指令
xfs_repair 處理xfs文件系統(tǒng)
結構:xfs_repair [-dnf] 裝置名稱
選項參數(shù):
- -d: 通常在單人維護模式底下,針對根目錄(/)進行檢查與修復词爬,很危險M菏取!顿膨!不要隨便使用
- -f: 后面的裝置其實是個文件而不是實體裝置
- -n: 單純檢查并不修改文件系統(tǒng)任何數(shù)據(jù)(檢查而已)
- 其他參數(shù)自行man page
fsck.ext4 處理ext4文件系統(tǒng)
自行man page
注意:修復文件系統(tǒng)是個大任務锅锨,因此,修復該文件系統(tǒng)時恋沃,文件系統(tǒng)不能被掛載必搞,需要先卸除。如果根目錄有問題囊咏,那么只能進入單人模式恕洲,加-d解決,因為根目錄不能被卸除梅割。
文件系統(tǒng)掛載與卸除
mount 指令掛載
常用參數(shù):
- -a: 依照配置文件/etc/fstab的數(shù)據(jù)將所有未掛載的磁盤都掛載上來
- -l: 不加任何參數(shù)會顯示目前掛載信息霜第,加上 -l 可以增列Label名稱
- -n: 默認情況下,系統(tǒng)會將實際掛載的情況實時寫入/etc/mtab中户辞,以便其他程序的運作泌类。但在某些情況下(列如單人維護模式)為了避免問題會可以不寫入,此時就要使用 -n 選項
- 其他參數(shù)自行man page
CentOS7系統(tǒng)后自動分析最恰當?shù)奈募到y(tǒng)來掛載你需要的裝置底燎,它會通過superblok刃榨,搭配自己的驅動去測試掛載,如果成功掛載双仍,就立即使用該類型的文件系統(tǒng)將裝置掛在起來枢希,指定系統(tǒng)哪些類型的filesystem才需要進行上述的掛在測試主要參考以下倆文件:
/etc/filesystem: 系統(tǒng)指定的測試掛載文件系統(tǒng)類型的優(yōu)先級;
/proc/filesystem: 系統(tǒng)已經(jīng)加載的文件系統(tǒng)類型
Linux的驅動程序在如下目錄中:/lib/modules/$(uname -r)/kernel/fs/
注意:如果掛載了光盤啥的,必須要卸除之后才能拿出光盤殊校,否則光驅是打不開的哦晴玖!如果你正在使用該裝置(比如你正在需要卸載的裝置文件夾內(nèi))读存,是不可以卸除的哦为流!
umount 指令卸除
結構:umount [-fln] 裝置文件名或掛載點
選項參數(shù):
- -f: 強制卸除!可用在類似網(wǎng)絡文件系統(tǒng)(NFS)無法讀取到的情況下让簿;
- -l: 立即卸除文件系統(tǒng)敬察,比 -f 還牛逼
- -n: 不更新 /etc/mtab 情況下卸除
7.4.1 開機掛載 /etc/fstab 及 /etc/mtab
查看/etc/fstab內(nèi)容:
輸出解釋
欄位 | 描述 | 解釋 | 示例(以圖為例) |
---|---|---|---|
第一欄 | 裝置/UUID等 | 磁盤裝置文件名/UUID/LABLE name | UUID=xxx,/dev/mapper/centos-root |
第二欄 | 掛載點 | 文件系統(tǒng)掛載點 | /,/home |
第三欄 | 文件系統(tǒng) | 磁盤分區(qū)槽文件系統(tǒng) | xfs |
第四欄 | 文件系統(tǒng)參數(shù) | 使用mount掛在是 -o 的參數(shù) | 使用的默認參數(shù)尔当,default |
第五欄 | dump | 能否被dump作用莲祸,目前備份系統(tǒng)已經(jīng)很多蹂安,用不住這個了 | 直接填0 就好 |
第六欄 | fsck | 是否以fsck檢查扇區(qū),fsck是檢查ext4系統(tǒng)類型的锐帜,我們當前是xfs | 直接填0就好 |
所以要開機掛載田盈,直接將需要載的文件系統(tǒng)像以上格式填入/etc/fstab即可,如圖所示:
reboot后可以看到缴阎,sda4是正常掛載了的
騷操作之映像文件掛載和掛載裝置文件(file)
mount -o loop可以掛載iso映像文件允瞧,而不用刻錄到光盤就可以直接讀取,這個就不說了蛮拔,下面來點騷的
當分區(qū)不良的情況下述暂,比如只分區(qū)出一個目錄,而已經(jīng)沒有多余的容量進行額外的分區(qū)建炫,但是偏偏根目錄又很大畦韭,這個時候我們就可以制作出一個大文件,然后將這個文件掛載肛跌,如此一來感覺上就多了一個分區(qū)槽哦艺配!這個操作用途很廣哦!
首先建立一個大文件(用dd指令衍慎,后續(xù)有這個指令的講解妒挎,這里只演示)
dd if=/dev/zero of=/srv/loopdev bs=1M count=512
if就是input file。那個/dev/zero是會一直輸出0的裝置西饵!
of就是output file酝掩。將一堆0寫入到后面接的文件中。
bs就是每個block大小眷柔,就像文件系統(tǒng)那樣的block意義期虾。
count就是總共幾個bs的意思。所有bs*count就是這個文件的容量了驯嘱!
mkfs指令-f參數(shù)key格式化文件
mkfs -f /srv/loopdev
使用開機掛載時镶苞,由文件系統(tǒng)建立的filesystem,裝置名稱最好還是使用原文檔名類為好鞠评,這樣不容易出現(xiàn)錯誤信息茂蚓,畢竟大多數(shù)系統(tǒng)僅查詢block device去找UUID而已,而不會去查file的UUID剃幌;參數(shù)loop為掛載時加的參數(shù)聋涨;如圖所示:
建立swap交換分區(qū)
如上圖所示:
因為我們之前已經(jīng)使用gdisk攻擊建立了分區(qū)swap分區(qū)/dev/sda6,所有我們直接使用了。
mkswap /dev/sda6: 將sda6格式化成swap分區(qū)负乡,自己man page該指令牍白;
swapon /dev/sda6: 啟用sda6這個swap分區(qū),自己man page該指令抖棘;
可以看到第一次free和開啟sda6這個swap分區(qū)后茂腥,swap分區(qū)的容量值有增加狸涌;
使用file形式的filesystem同樣也可以建立swap分區(qū)哦!
如果所示最岗,需要注意的就是我們開啟分區(qū)的時候要求權限為0600帕胆,
swapon開啟的時候報錯設備忙,所以我設置了開機自動啟用(自己去補充/etc/fstab哦)般渡,
重啟后看下圖操作:swapoff 用來關閉swap的啟用狀態(tài)
parted指令可以同時處理GPT和MBR分區(qū)表格式惶楼,而且可以一條指令直接完成分區(qū)哦,自行man page吧!
over...