馬哥-51CTO-Linux培訓-0901-linux文件系統

(注:此文內容源於夜歸人博客)

 

Linux文件系統管理

VFS:(Virtual File System 虛擬文件系統)

VFS 是一種軟件機制,與它相關的數據結構只存在於物理內存當中。所以在每次系統初始化期間,Linux 都首先要在內存當中構造一棵 VFS 的目錄樹(在 Linux 的源代碼裏稱之爲 namespace),實際上便是在內存中建立相應的數據結構。VFS 中的各目錄其主要用途是用來提供實際文件系統的掛載點。

VFS 目錄樹結構:

4866e496-f014-4e99-b5e3-5f6792bbe101

Linux文件系統支持的類型:

基本文件系統:Ext2, Ext3, Ext4, Reiserfs(支持小文件), xfs(支持大文件), btrfs, JFS, vfat(支持WindowsFAT32), NTFS

交換分區:swap

集羣文件系統:GFS2(全局文件系統), OCFS2

網絡文件系統:NFS, smbfs(CIFS) Common Internet File System

光盤: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的邏輯分區

358e8382-3eb6-4259-92cb-598732f7b2c4

//用fdisk -l 查看當前/dev/sda硬盤的已有分區,此時可見已添加了一個20G的分區sda5

1ed3ecf6-544d-4c9d-9fe4-79a2b5968581

//但是此時內核仍未識別到該新添加的分區,所以還不能對其創建文件系統

926a5dbf-7389-47f7-8605-744a3131b213

//使用partx -u 更新分區列表,此時內核已識別到該新添加的分區sda5

701abd44-e91c-4ed6-a6af-32a43c6e5b89

//使用mke2fs命令創建文件系統,類型爲ext4,添加捲標:Newpartition,指定塊大小爲4096

60afee91-a962-431b-81f9-aa93a22c77aa

<<========================================【blkid】========================================>>

blkid命令

功能:

查看設備的屬性,UUID和TYPE

格式:

blkid/dev/SOMEDEVICE:

實例:

//查看剛剛新建的sda5分區的文件系統類型、卷標、UUID

df1016f2-81ca-4a6c-8c7b-ce7e63eb2ad6

<<========================================【e2label】========================================>>

e2label命令

功能:

查看分區的卷標和爲分區設定卷標

格式

e2label/dev/SOMEDEVICE: 查看卷標

e2label/dev/SOMEDEVICE 新卷標名

實例:

//使用e2label命令查看sda5的卷標,並把卷標修改爲database

ce558ad8-54a8-4739-83c6-0640f1469fbb

<<========================================【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 分區的默認掛載選項,啓動文件訪問控制列表

f39e9205-c7d3-4860-9804-042c7510c04c

<<========================================【fsck】========================================>>

fsck命令

功能:

用於檢查並且試圖修復文件系統中的錯誤,當文件系統發生錯誤時,可用fsck指令嘗試加以修復

常用選項:

-t fstype

-a:自動修復文件系統,不詢問任何問題

-r: 交互式修復錯誤

-A:依照/etc/fstab配置文件的內容,檢查文件內所列的全部文件系統

-P:當搭配"-A"參數使用時,則會同時檢查所有的文件系統

-v:執行時顯示詳細的信息

<<========================================【e2fsck】========================================>>

e2fsck命令

功能:

用於檢查文件系統的完整性,通過適當的選項可以嘗試修復出現的錯誤

常用選項:

-f: 強制檢測

-y: 對問題自動回答爲yes

-b<superblock>: 指定superblock,而不使用預設的superblock

-B<區塊大小>:指定區塊的大小,單位爲字節

-v:執行時顯示詳細的信息

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,然後把該分區創建爲交換分區

47645893-7a53-428f-b8e9-7fd0c15c0dde

文件系統的掛載和使用

將額外文件系統與根文件系統某現存的目錄建立關聯關係,進而使得此目錄作爲其他文件系統訪問入口的行爲,稱之爲掛載,解除此關係關係的過程稱爲卸載。

掛載點: 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:重新掛載

ro:掛載爲只讀

rw:掛載爲可讀寫

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的分區

8a5d5311-b751-4994-97af-512389aabb8e

2、使用partx命令更新分區表讓內核能夠識別到新創建的分區

63afb9a9-e6b8-446f-a29a-b5c842823ed8

3、使用e2fs命令爲此分區創建文件系統,類型爲ext4

394b3b30-7154-46cb-8793-adb70fe2ee25

4、在根目錄下創建mydata目錄,並使用mount命令掛載分區

90da5407-5985-4b37-bed3-5e00823e43c8

5、使用blkid命令查看該分去的UUD,並把該值複製下來

50f98fb5-d8bd-496a-aa0a-46b11ad28891

6、編輯/etc/fstab配置文件,添加一行該分區的信息,下次開機後系統將會自動掛載該分區

a83e41fc-89f2-49bf-a885-2d3bf4e8b1bf

7、可使用mount -a 命令加載當前/etc/fstab配置文件內所有分區,並立即掛載

3b4b9856-58a4-4127-bbab-6d38d3f82159

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章