日期: 2015年09月01日
Linux檔案系統管理
VFS:(Virtual File System 虛拟檔案系統)
VFS 是一種軟體機制,與它相關的資料結構隻存在于實體記憶體當中。是以在每次系統初始化期間,Linux 都首先要在記憶體當中構造一棵 VFS 的目錄樹(在 Linux 的源代碼裡稱之為 namespace),實際上便是在記憶體中建立相應的資料結構。VFS 中的各目錄其主要用途是用來提供實際檔案系統的挂載點。
VFS 目錄樹結構:
Linux檔案系統支援的類型:
基本檔案系統:Ext2, Ext3, Ext4, Reiserfs(支援小檔案), xfs(支援大檔案), btrfs, JFS, vfat(支援WindowsFAT32), NTFS
交換分區:swap
叢集檔案系統:GFS2(全局檔案系統), OCFS2
網絡檔案系統:NFS, smbfs(CIFS) Common Internet File System
CD光牒:iso9660
分布式檔案系統:ceph
moosefs, mogilefs, hdfs, gfs, glusterfs
(1)日志型檔案系統:
非日志型檔案系統:ext2
日志型檔案系統:ext3
(2)swap: 交換分區
建立檔案系統:
在分區上執行格式化(進階格式化)要使用某種檔案系統需滿足兩個條件:
核心中:支援此中檔案系統
使用者空間:有檔案系統管理工具
檔案系統管理工具:
mkfs、mke2fs、e2label、blkid、dumpe2fs、tune2fs、fsck、e2fsck
<<========================================【mkfs】========================================>>
mkfs指令
功能:
建立檔案系統
格式:
mkfs [-V] [-t fstype] [fs-options] filesys [blocks]
常用選項:
-t fstype 指定要建立何種檔案類型
-c 在制做檔案系統前,檢查該分區是否有壞道
-fs 指定建立檔案系統時的參數
執行個體:
# mkfs -t ext2 /dev/sda3
# mkfs -t ext3 /dev/sda2
# mkfs -t ext4 /dev/sda1
Ext4: mkfs -t ext4 = mkfs.ext4 = mke2fs -t ext4
Ext3: mkfs -t ext3 = mkfs.ext3 = mke2fs -t ext3 = mke2fs -j
Ext2: mkfs -t ext2 = mkfs.ext2 = mke2fs -t ext2
<<========================================【mke2fs】========================================>>
mke2fs指令
建立ext系列檔案系統,支援ext2、ext3、ext4
mke2fs [OPTION]... DEVICE
-t {ext2|ext3|ext4}
-j : 相當于-t ext3
-L Label:卷标
-b {1024|2048|4096}:指定塊大小
-i #: #個位元組給預留一個inode
-N #: 直接指定預留多少個Inode
-I #:Inode大小
-m #:預留管理者的空間百分比,預設為5
-O:指定分區特性
配置檔案: /etc/mke2fs.conf
//先用fdisk建立一個20G的邏輯分區
//用fdisk -l 檢視目前/dev/sda硬碟的已有分區,此時可見已添加了一個20G的分區sda5
//但是此時核心仍未識别到該新添加的分區,是以還不能對其建立檔案系統
//使用partx -u 更新分區清單,此時核心已識别到該新添加的分區sda5
//使用mke2fs指令建立檔案系統,類型為ext4,添加卷标:Newpartition,指定塊大小為4096
<<========================================【blkid】========================================>>
blkid指令
檢視裝置的屬性,UUID和TYPE
blkid/dev/SOMEDEVICE:
//檢視剛剛建立的sda5分區的檔案系統類型、卷标、UUID
<<========================================【e2label】========================================>>
e2label指令
檢視分區的卷标和為分區設定卷标
格式
e2label/dev/SOMEDEVICE: 檢視卷标
e2label/dev/SOMEDEVICE 新卷标名
//使用e2label指令檢視sda5的卷标,并把卷标修改為database
<<========================================【dumpe2fs】========================================>>
dumpe2fs指令
用于檢視ext檔案系統的超級塊和快組資訊
dumpe2fs[ OPTIONS ]... device
-h: 僅檢視超級塊中儲存的資訊
<<========================================【tune2fs】========================================>>
tune2fs指令
用于調整“ext2/ext3”檔案系統中的可改參數
tune2fs[ OPTIONS ]... device
-l: 檢視超級塊中的資訊
-L 卷标名: 設定卷标
-m: 預留管理者的空間百分比,預設為5
-r: 設定檔案系統保留塊的大小
-j: 如果原來的檔案系統為ext2, -j能夠将其提升為ext3
-O [^] feature[,...]: 調整分區特性
-o [^] mount-options[,...]: 設定其預設挂載選項
async: 異步I/O
sync: 同步I/O
noatime/atime: 是否更新通路時間戳,建議noatime
auto/noauto: 是否能夠被mount -a選項自動挂載;
diratime/nodiratime: 是否更新目錄的通路時間戳;
exec/noexec:是否允許執行其中的二進制程式;
_netdev: 在網絡裝置啟用之前禁止嘗試挂載網絡裝置
remount: 重新挂載
acl: 啟用facl 檔案通路控制清單
ro:挂載為隻讀
rw:挂載為可讀寫
user/nouser: 是否允許普通挂載此裝置
//開啟/dev/sda5 分區的預設挂載選項,啟動檔案通路控制清單
<<========================================【fsck】========================================>>
fsck指令
用于檢查并且試圖修複檔案系統中的錯誤,當檔案系統發生錯誤時,可用fsck指令嘗試加以修複
-t fstype
-a:自動修複檔案系統,不詢問任何問題
-r: 互動式修複錯誤
-A:依照/etc/fstab配置檔案的内容,檢查檔案内所列的全部檔案系統
-P:當搭配"-A"參數使用時,則會同時檢查所有的檔案系統
-v:執行時顯示詳細的資訊
<<========================================【e2fsck】========================================>>
e2fsck指令
用于檢查檔案系統的完整性,通過适當的選項可以嘗試修複出現的錯誤
-f: 強制檢測
-y: 對問題自動回答為yes
-b<superblock>: 指定superblock,而不使用預設的superblock
-B<區塊大小>:指定區塊的大小,機關為位元組
e2fsck執行後的傳回值及代表意義如下:
0 沒有任何錯誤發生。
1 檔案系統發生錯誤,并且已經修正。
2 檔案系統發生錯誤,并且已經修正。
4 檔案系統發生錯誤,但沒有修正。
8 運作時發生錯誤。
16 使用的文法發生錯誤。
128 共享的函數庫發生錯誤。
交換分區:
虛拟記憶體并不是真正的記憶體,它是在硬碟上劃分出一塊區域,将其格式化成實體記憶體相同的格式。一旦發生了實體記憶體不足的情況,就可以将實體記憶體頁框中的資料移動到虛拟記憶體上。而實體記憶體空間被重新釋放後,又可以将虛拟記憶體頁框中的資料移動回去,這個過程就好像是在交換資料一樣,故這一區域被稱為交換分區(swap)
<<==============================【mkswap、swapon、swapoff】==============================>>
mkswap指令
用于在一個檔案或者裝置上建立交換分區。在建立完之後要使用sawpon指令開始使用這個交換區。
-c:建立交換區前,先檢查是否有損壞的區塊
-L label
另外兩個相關指令:
swapon
-a #标記所有的交換分區都為啟用狀态
-p #: 在啟用的時候指定其優先級
swapoff
-a #禁用所有
//建立一個空間為4G的分區/dev/sda6,然後把該分區建立為交換分區
檔案系統的挂載和使用
将額外檔案系統與根檔案系統某現存的目錄建立關聯關系,進而使得此目錄作為其他檔案系統通路入口的行為,稱之為挂載,解除此關系關系的過程稱為解除安裝。
挂載點: mountpoint, 裝置挂載至目錄:
注意:挂載點在挂載後,其内部原有的檔案會被暫時隐藏,建議使用空目錄作為挂載點
相關指令:mount、umount、fuser、free、df、du
<<========================================【mount】========================================>>
mount指令
用于挂載檔案系統到指定的挂載點
mount:不跟任何參數,可顯示目前系統所有已挂載的裝置
mount[options] [-t fstype] [-o option] 裝置 挂載點
-tfstype 挂載的檔案系統格式
-a:加載檔案“/etc/fstab”中描述的所有檔案系統
-o [^]:檔案系統預設挂載選項的啟用或關閉
async:異步模式
sync: 同步模式
atime/noatime:是否更新通路時間戳;
diratime/nodiratime:是否更新目錄的通路時間戳;
auto/noauto: 是否允許此裝置被自動挂載;
exec/noexec:是否允許執行此檔案系統上應用程式;
dev/nodev:是否支援在此裝置上使用裝置檔案;
suid/nosuid:
remount:重新挂載
user/nouser: 是否允許普通挂載此裝置;
acl:是否支援此裝置上使用facl;
defaults:rw,suid, dev, exec, auto, nouser, and async
如挂載時沒有設定特性,可使用tune2fs修改:
# tune2fs -o mount-option 裝置預設挂載屬性
# tune2fs -o ^mount-option 取消預設挂載屬性
幾個關鍵的配置檔案:
/etc/rc.d/rc.sysinit:系統初始化腳本
/etc/mtab:記載的是現在系統已經裝載的檔案系統,包括作業系統建立的虛拟檔案等;
/etc/fstab:是開機後系統自動挂載的檔案系統。
此檔案中定義的檔案系統挂載表
每行定義一個檔案系統:(每行包含的内容)
1、要挂載的裝置或僞檔案系統
LABEL=, UUID=
2、挂載點
3、檔案系統類型
4、挂載選項,多個選項間使用逗号分隔;
defaults
5、轉儲頻率
0:從不備份
1:每日備份
6、自檢次序
0: 不自檢
1:首先自檢,通常隻有/才有1;
<<========================================【umount】========================================>>
umount指令
解除安裝已挂載的分區,(當裝置空閑時才可以被解除安裝)
umountDEVICE
umountMOUNT_POINT
<<========================================【fuser】========================================>>
fuser指令
檢視占用挂載的裝置的程序:
fuser-v 挂載點: 檢視目前正在通路該挂載點的程序
fuser-km 挂載點: 終止所有正在通路該挂載點的程序:
<<========================================【free】========================================>>
free指令
檢視記憶體空間使用狀态:
-m: 顯示結果以MB為機關
-g: 顯示結果以GB為機關
核心映射檔案中記憶體的相關資訊:
# cat/proc/meminfo
<<========================================【df】========================================>>
df指令
檢視目前系統上已挂載的分區,及其空間使用資訊、inode資訊等
-a或--all:包含全部的檔案系統
-h或--human-readable:以可讀性較高的方式來顯示資訊
-i或--inodes:顯示inode的資訊
-T或--print-type:顯示檔案系統的類型
<<========================================【du】========================================>>
du指令
統計檔案或目錄的實際大小
-a或-all: 顯示目錄中個别檔案的大小
-h或--human-readable: 以K,M,G為顯示機關
-L<符号連結>或--dereference<符号連結>: 顯示指定符号連結的源檔案大小
-S或--separate-dirs: 顯示個别目錄的大小時,并不含其子目錄的大小
-c或--total: 除了顯示個别目錄或檔案的大小外,同時也顯示所有目錄或檔案的總和
-s或--summarize: 僅顯示總計,隻列出最後加總的值
-k或--kilobytes: 以KB(1024bytes)為機關輸出
-m或--megabytes: 以MB為機關輸出
-l或--count-links: 重複計算硬體連結的檔案
-L<符号連結>或--dereference<符号連結>: 顯示選項中所指定符号連結的源檔案大小
-D或--dereference-args: 顯示指定符号連結的源檔案大小
[root@localhost~]# du -sch /etc
23M /etc
23M total
[root@localhost~]# ^C
[root@localhost~]#
練習:建立一個10G的檔案系統,類型為ext4,要求開機可自動挂載至/mydata目錄
1、使用fdisk指令,建立一個10G的分區
2、使用partx指令更新分區表讓核心能夠識别到新建立的分區
3、使用e2fs指令為此分區建立檔案系統,類型為ext4
4、在根目錄下建立mydata目錄,并使用mount指令挂載分區
5、使用blkid指令檢視該分去的UUD,并把該值複制下來
6、編輯/etc/fstab配置檔案,添加一行該分區的資訊,下次開機後系統将會自動挂載該分區
7、可使用mount -a 指令加載目前/etc/fstab配置檔案内所有分區,并立即挂載