鸟哥的linux私房菜_linux磁盘与文件系统管理
8 . linux磁盤與文件系統管理
8.1認識EXT2系統
8.1.2文件系統的特性
super block : 記錄此文件系統的整體信息,包括inode block的總量,使用量、剩余量、以及文件系統的格式以及相關信息等;
inode: 記錄文件的屬性,一個文件占用一個inode,同時記錄此文件數據所在的block號碼;inode并不記錄文件名,記錄在block中
block : 實際記錄文件的內容,若文件太大時,會占用多個block;
這種數據存取的方法我們稱為索引式文件系統(indexed allocation)
8.1.3 linux的ext2 文件系統
子主題 1
data block 資料區塊)
是什么
data block 是用來放置文件內容數據地方,在 Ext2 文件系統中所支持的 block 大小有 1K, 2K 及4K 三種而已。在格式化時 block 的大小就固定了,且每個 block 都有編號,以方便 inode 的記錄。 不過要注意的是,由于 block 大小的差異,會導致該文件系統能夠支持的最大磁盤容量與最大單一文件容量并不相同。
?Ext2 文件系統的 block 基本限制如下:
1 原則上,block 的大小與數量在格式化完就不能夠再改變了(除非重新格式化);
2 每個 block 內最多只能夠放置一個文件的數據;
3 承上,如果文件大于 block 的大小,則一個文件會占用多個 block 數量;
4 承上,若文件小于 block ,則該 block 的剩余容量就不能夠再被使用了(磁盤空間會浪費)。
inode table (inode? 表格)
inode 記錄的文件數據
1 該文件的存取模式(read/write/excute);
2 該文件的擁有者與群組(owner/group);
3 該文件的容量;
4 該文件建立或狀態改變的時間(ctime);
5 最近一次的讀取時間(atime);
6 最近修改的時間(mtime);
7 定義文件特性的旗標(flag),如 SetUID...;
8 該文件真正內容的指向 (pointer);
inode特色
1 每個 inode 大小均固定為 128 bytes (新的 ext4 與 xfs 可設定到 256 bytes);
2 每個文件都僅會占用一個 inode 而已;
3 承上,因此文件系統能夠建立的文件數量與 inode 的數量有關;
4 系統讀取文件時需要先找到 inode,并分析 inode 所記錄的權限與用戶是否符合,若符合才能夠開始實際讀取 block 的內容。
Superblock ( 超級區塊)
是什么
superblock 是記錄整個 filesystem 相關信息的地方, 沒有 Superblock ,就沒有這個 filesystem 了。
Superblock記錄的信息主要有:
1 block 與 inode 的總量;
2 未使用與已使用的 inode / block 數量;
3 block 與 inode 的大小 (block 為 1, 2, 4K,inode 為 128bytes 或 256bytes);
4 filesystem 的掛載時間、最近一次寫入數據的時間、最近一次檢驗磁盤 (fsck) 的時間等文件系統的相關信息;
5 一個 valid bit 數值,若此文件系統已被掛載,則 valid bit 為 0 ,若未被掛載,則 valid bit 為 1 。
Filesystem Description ( 文件系統描述說明)
是什么
這個區段可以描述每個 block group 的開始與結束的 block 號碼,以及說明每個區段 (superblock,bitmap, inodemap, data block) 分別介于哪一個 block 號碼之間。
block bitmap ( 區塊對照表)
inode bitmap (inode? 對照表)
dumpe2fs :
是什么
:? 查詢 Ext? 家族 superblock?
語法
[root@study ~]#? dumpe2fs [-bh]? 裝置文件名
選項與參數:
-b :列出保留為壞軌的部分(一般用不到吧!?)
-h :僅列出 superblock 的數據,不會列出其他的區段內容!
范例
范例:鳥哥的一塊 1GB ext4 文件系統內容
[root@study ~]#? blkid <==這個指令可以叫出目前系統有被格式化的裝置
www.linuxidc.com
/dev/vda1: LABEL="myboot" UUID="ce4dbf1b-2b3d-4973-8234-73768e8fd659" TYPE="xfs"
....(中間省略)....
Inode size: 256 # inode 的容量大小!已經是 256 了喔!
....(底下省略)....
# 由于數據量非常的龐大,因此鳥哥將一些信息省略輸出了!上表與你的屏幕會有點差異。
# 前半部在秀出 supberblock 的內容,包括標頭名稱(Label)以及 inode/block 的相關信息
# 后面則是每個 block group 的個別信息了!您可以看到各區段數據所在的號碼!
# 也就是說,基本上所有的數據還是與 block 的號碼有關就是了!很重要!
8.1.4與目錄樹的關系
目錄
ext2一個目錄會分配一個inode與至少一塊block 給該目錄。inode記錄了目錄屬性等相關信息,而block則記錄了該目錄下的文件名與該文件名占用的inode號碼等數據;
文件:
ext2會給文件分配一個inode和相對于該文件大小的block數量;
目錄樹讀取
tips
inode 本身并不記錄文件名,文件名的記錄是在目錄的 block 當中。因此當我們要讀取
某個文件時,就務必會經過目錄的 inode 與 block ,然后才能夠找到那個待讀取文件的 inode 號碼,最終才會讀到正確的文件的 block 內的數據。
文件系統的大小與磁盤的讀取性能
8.1.5 ext2/etx3文件的訪問日志與日志文件的系統功能
8.1.6 linux文件系統的操作
8.1.7掛載點(mount point )的意義
是什么
每個 filesystem 都有獨立的 inode / block / superblock 等信息,這個文件系統要能夠鏈接到目錄樹才能被我們使用。 將文件系統與目錄樹結合的動作我們稱為『掛載』
8.1.8其他linux的文件系統與vfs
8.1.9 XFS? 文件系統簡介
是什么
CentOS 7 開始,預設的文件系統已經由原本的 EXT4 變成了 XFS 文件系統了!
8.2文件系統的簡單操作
8.2.1磁盤與目錄的內容:df、du
df:列出文件系統整體磁盤使用量
>df [-ahikHTM] 目錄或文件名
-a:列出所有文件系統,包括系統特有的/proc等文件系統
-k:以kb容量顯示文件系統
-m:以MB的容量顯示各文件系統
重要
-h:以人們容易閱讀的GB、MB、KB來顯示文件系統
-H:以M=100k來替代M=1024K進位方式
-T:連同該分區的文件系統名稱(例如ext3)也列出;
重要
-i:不用硬盤容量,而以inode的數據來顯示
輸出結果:
Filesystem :代表該文件系統是在哪個分區,所以列出了設備名稱
1k-block:說明下面的數字單位時1KB。可以利用-h或-m來改變容量
Used:使用掉的磁盤空間
available:剩下的磁盤空間大小
Use%:磁盤的使用率。超過90%時要注意下。
mountedon:磁盤的掛載的目錄所在(掛載點)
du:評估文件系統整體磁盤使用量
>du [-ahskm] 文件或者目錄名稱
-a:列出所有目錄和文件的容量,默認只統計目錄下面的文件容量
-h:以人們容易閱讀的方式列出容量
-s:列出總容量,而不列出每個各別的目錄占用容量
-S:不包括子目錄下總計;
-k:以KB列出容量
-m:以MB列出容量
與df不同ds會直接到文件系統內查找所有文件數據,所以會需要一段時間;默認情況下輸出的大小是以kB計算的
8.2.2連接文件:ln
語法;
> ln [-sf] 源文件 目標文件
-s: 如果沒有加任何參數 默認是hard link ,s就是symbolic link;
-f:如果目標文件存在時,就將目標文件刪除,再創建
hard link 硬連接 或實際連接
子主題 2
多個文件名對應到一個inode號碼 。例:兩個不同的文件名都鏈接到一個相同的inode號碼;
symbolic link符號連接(也即快捷方式)
子主題 2
基本上symbolic link 就是創建一個獨立的文件,而這個文件指向他連接的那個文件;可以與windows的快捷方式劃等號
連接數量
8.3磁盤的分區、格式化、檢驗與掛載
如果我們想要在系統中增加一個硬盤,應該要有哪些動作要做呢;
1.對磁盤進行分區,以新建可用的分區
2.對該分區進行格式化(format),以創建系統可用的文件系統
3.若想要仔細一點,則可以對剛建好的文件系統進行檢驗
4.在linux 系統上,需要創建掛載點(也即是目錄),并將它掛載上來
磁盤分區:fdisk
fdisk [-l] 設備名稱
-l:輸出后面接的設備所有的分區內容,若僅有fdisk -l 時,則會把整個系統內能夠找到的設備分區全部列出來
例子:
>df /?
#找出磁盤文件名
> fdisk /dev/hds
#進入到fdisk 命令界面
進入fisk后的幾個常用操作
刪除磁盤分區
1 fdisk? /dev/hdc? #進入fdisk頁面
2.p? #先看下分區的信息,假設要刪除 /dev/hdc1
3. d #這時會要你選擇一個要刪除的分區,就選1
4 w(or)q #完成
新增磁盤分區
磁盤格式化
mkfs [-t 文件系統格式] 設備文件名
-t:可以接文件系統格式 例如:ext2 ext3 vfat等(系統有支持的才會生效)
例如:將上一個小節中產生的 /dev/hdc6 設置為ext3格式
>mkfs -t ext3 /dev/hdc6
命令2:
mke2fs [-b block大小]? [-i block大小] [-L 卷標]? [-cj] 設備
-b:可以設置每個block的大小,目前支持1024 2048 4096 bytes三種
-i:每個inode的容量
-c:檢查磁盤錯誤,僅下達一次時候會進行快速讀取測試,下達兩次的時候 -c -c 會測試讀寫?
-L:后面接券名稱 (lable),這個lable 是有用的 ,e2lable介紹時談
-j:默認是ext2 ,-j改成ext3
磁盤檢驗:fsck,badblock
fsck (file system check):
>fsck [-t 文件類型] [-aCay] 設備名稱
-t:指定文件系統,不過現在linux 很智能,能自動判斷系統類型,該參數不經常用
-a:自動修復檢查到有問題的扇區
-A:依據 /etc/fstab 的內容,將需要的設備掃描一次。通常開機就會執行此命令
-y:與 a類似,但是某些文件系統僅支持-y這個參數
-C:可以在檢查過程當中 使用直方圖來顯示目前的進度;
badblocks [-svw] 設備名稱
-s:在屏幕上列出進度
-v:可以在屏幕上看到進度
-w:使用寫入的方式進行測試,建議不要使用此參數,尤其已經有文件存在時
磁盤掛載與卸載
掛載
語法:
>mount [-a] [-l] [-L lable名] [-t 文件系統] [-o 額外參數]
-a:依照配置文件 /etc/fatab的數據 將所有未掛載的磁盤都掛載上來。
-l:單純輸入mount 會顯示目前掛載的信息,加上-l可增label 列名稱
-t:與mkfs的參數非常類似的,可以加上文件系統種類來指定欲掛載的類型
-n:默認情況下系統會將實際掛載情況實時寫入/etc/mtab中,以利于其他程序運行,但是在某些情況下(例如單用戶維護模式)為了避免問題,會刻意不寫入,這時候可以使用-n這個參數
-L:系統除了利用設備文件名(例如/dev/hedc6)之外,還可以利用文件系統的卷標名(lable)來進行掛載,最好為你的文件系統起一個獨一無二的卷標名
-o:后面接一些掛載時額外加上的參數,
ro、rw:掛載的文件系統成為只讀,或者可讀寫;
async、sync:此文件系統是否使用同步寫入(sync),或者異步寫入(async)的內存機制,參考文件系統的運行方式。默認為異步;
auto、noauto:允許此分區被mount -a自動掛載;
Dev、nodev:是否允許此分區上創建設備文件;
suid、nosuid:是否允許分區含有suid/sgid的文件格式;
exec、noexec:是否允許分區用戶可執行binary文件;
user、nouser:是否允許此分區上讓任何用戶執行mount?一般來說mount只有root用戶可以執行,但是下達user參數,則讓一般 用戶也能夠對分區進行mount
defaults:默認值為 rw、suid、dev、exec、auto、nouser、and async;
remount:重新掛載,這是在系統出錯。或者重新更新參數時,很有用;
掛載ext2/ext3 文件系統
例如
用默認的方式,將創建的、/dev/hdc6 掛載到/mnt/hdc6
>mkdir /mnt/hdc6
>mount /dev/hdc6 /mnt/hdc6
>df #查看
例2 :查看當前已掛載的文件系統,包含文件系統的lable名
>mount -l
掛載CD或DVD光盤
格式化與掛載軟盤
掛載U盤
重新掛載目錄與掛載不特定目錄
使用lable上進行掛載
?利用文件系統的卷標名來掛載
>mount -L "vbird" /mnt/hdc6
卸載umount
語法:
>umount? [-fn] 設備文件名或者掛載點
-f:強制下載,
-n:不更新 /etc/mtab 的情況下卸載
列子
>umount /dev/hdc6
磁盤參數修改
mknod
設備都是由文件來代表,文件是通過文件的major和minor數值 來代表設備
major 設備主碼,minor設備碼
語法
>mknod 設備文件名 [bcp] [Major] [Minor]
-b 設置設備成為一個外部存儲的設備文件,例如硬盤
-c:設置設備成為一個外部輸入的設備,如鍵盤鼠標
-p:設置設備名稱成為一個FIFO
例如: mkno /dev/hdc2 b 20 10;
major 和minor有意義,不要隨便修改
e2lable
我們在介紹mkfs 命令時談到了設備設備文件系統的卷標,例如windows c磁 d盤會有個名稱,那就是卷標
語法 修改lable
>e2lable 設備名稱 新的lable名稱
例如
>e2lable /dev/hdc2 “labeltest”?
tune2fs
語法
tune2fs [-jlL] 設備名稱
-l:類似dumpe2fs -h的功能,將superblock 內的數據讀出來
-L:類似e2label 的功能 可以修改系統 label
-j:將ext2的文件系統 轉換為ext3;
此命令有很多方法。更多參數 參考man
hdparm
8.4設置開機掛載
8.4.1開機掛載/etc/fstab及/etc/mtab
如何開機的時候就將文件系統掛載好,可以直接編輯/etc/fstab;
限制:
1 根目錄/是必須掛載的,而且一定要先于其他mount point 掛載進來
2. 其他掛載點必須為已新建的目錄,可任意指定,但一定要遵守必需的系統架構目錄規則
3.所有掛載點在同一時間內 只能掛載一次
4.所有分區在同一時間內 只能掛載一次
5 如果進行卸載,你需要將目錄移到掛載點的外邊
8.4.2特殊設備loop掛載(鏡像文件不刻錄就掛載使用)
8.5內存交換空間(swap)的構建
使用物理分區構建swap
使用文件構建swap
swap在使用上的限制
8.6文件系統的特殊查看與操作
boot sector和super bolck的關系
磁盤空間浪費問題
利用GNU的parted進行分區行為
總結
以上是生活随笔為你收集整理的鸟哥的linux私房菜_linux磁盘与文件系统管理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 从kernel源码进阶C语言
- 下一篇: open3d使用知识拾遗