文件系統
文件系統的定義
文件系統是磁盤上特有格式的一片區域,操作系統通過文件系統可以方便的查詢和訪問其中的磁盤塊,是磁盤系統用來存儲的管理文件的方法。從系統角度來看,文件系統對文件存儲空間進行組織、分配,并對文件的存儲進行保護和檢查。從用戶角度來看,文件系統可以幫助用戶建立文件,并對文件的讀,寫和刪除操作提供保護和控制。
常用文件系統的介紹
Linux:ext2, ext3, ext4, xfs, btrfs, reiserfs, jfs, swp Windows:FAT32,ntfs UNIX:FFS, UFS, JFS2 網絡文件系統:NFS, CIFS 集群文件:GFS2,OCFS2 分布式文件系統:ceph,moosefs, mogilefs, GlusterFS, Lustre
日志型文件系統
日志型文件系統的特點是:在存儲數據時,現在日志區存儲元數據,然后在數據區存儲數據,結束后檢測是否有錯誤,若無錯誤,則將日志區中的數據移至元數據區。所以,日志型文件系統在發生故障,恢復文件時速度很快,但在存儲數據時速率較慢,但總體上能忽略這點不足之處。
-
ext3
-
ext4
-
xfs
非日志型文件系統
非日志文件系統是將元數據直接存儲至元數據區,所以速率較快,但安全性不及非日志型。
-
ext2
-
vfat
ext2 ext3 ext4之間的區別和聯系
1.ext2–>ext3
-
增加了日志功能
2.ext3–>ext4
-
更大的文件系統和更大的文件
-
無限數量的子目錄
-
采用Extents的映射方式,不再采用Ext3的間接塊映射
-
多塊分配:一次調用分配多個數據塊,而Ext3一次只能調用一個數據塊
-
延遲分配:知道文件在cache中寫完才開始分配數據塊寫入磁盤,與多塊分配結合優化整個文件的數據塊分配。而Ext3采用的是盡快分配。
-
加快fsck,無需檢查所有的inode。檢查時跳過了列出的未使用的inode列表中的inode號。
-
日志校驗
-
允許關閉日志模式,即“無日志”模式
-
在線碎片整理
-
支持更大的inode大小,有Ext3默認的128字節,變為256字節。且能支持快速拓展屬性。
-
持久預分配,就預先分配好與所下載文件大小相同的空間,以防空間不足下載失敗。
-
默認啟用barrier.不許再日志數據寫入磁盤之后才能刺耳commit記錄。
關于xfs文件系統的一些特性
查看詳細內容點擊此處
-
日志型文件系統
-
分配組
-
條帶化分配
-
基于Extent的分配方式
-
可變塊尺寸
-
延遲分配
-
稀疏文件
-
擴展屬性
-
Derict I/O
-
確定速率I/O
-
DMAPI(數據庫管理應用程序接口)
-
快照,不直接提供對文件系統快照的支持,結合LVM使用
-
在線尺寸調整,在線調整XFS文件系統的大小
-
原生備份、恢復工具,xfsdump,xfsretore,dump是無需卸載XFS, 且備份或恢復過程是可中斷的,無需凍結數字流
-
源自磁盤配額,磁盤配額在文件系統被初次掛載時啟用。
-
默認啟用“寫入屏障”
-
默認使用內置日志,但可將日志放置在一個分離的物理設備上,提高系統的性能。
-
文件系統無法被收縮
Btrfs文件系統的簡要介紹和特點
trfs(B-tree 文件系統,通常念成 Butter FS,Better FS或B-tree FS),一種支持寫入時復制(COW)的文件系統,運行在 Linux 操作系統上,采用 GPL 授權。Oracle 于 2007 年對外宣布這項計劃,并發布源代碼,2014 年 8 月發布穩定版。目標是取代 Linux 當時主流的 ext3 文件系統,擺脫 ext3 的一些限制,特別是單文件大小,文件系統總大小和文件校驗,并加入 ext3 不支持的一些功能,比如可寫快照(writable snapshots)、快照的快照(snapshots of snapshots)、內建磁盤陣列(RAID),以及子卷(subvolumes)。Btrfs 也宣稱專注于「容錯、修復及易于管理」。
-
聯機碎片整理
-
聯機卷生長和收縮
-
聯機塊設備增加和刪除
-
聯機負載均衡(塊設備間的對象移動以達到平衡)
-
文件系統級的鏡像(類RAID-1)、條帶(類RAID-0)
-
子卷(一個或多個單獨可掛載基于每個物流分區)
-
透明壓縮(目前支持zlib和LZO)
-
快照(只讀和可寫,寫復制,子卷復制)
-
文件克隆
-
數據和元數據的校驗和(目前是CRC-32C)
-
就地轉換(帶回滾)ext3/4
-
文件系統種子
-
用戶定義的事務
-
塊丟棄支持
文件系統知識補充
文件名是元數據但不在inode中。 inode number: 訪問文件時首先查找inode,根據inode中的指針查找block
Inode Note, 索引節點 地址指針:最大單個文件大小取決于地址指針的組織結構和地址指針所能占據的最大空間大小
-
直接指針:引入的塊的數量較少,因為塊的編號占空間。
-
間接指針
-
三級指針
元數據區是實現分配好的,但是沒被填充數據。 inode有標志位,區分是空的還是已填充數據的。 做全盤掃描,太慢,做索引。在索引上,做對位索引。
inode bitmap: 對位標識每個inode空閑與否的狀態信息。 索引位圖需要一個磁盤塊保存。
先分塊組,在塊組上分數據區和元數據區。在元數據區有塊位圖,inode table,索引位圖。塊組自己的布局結構是保存在數據區的GDP(Group DescriPtion) 使用dumpe2fs查看。
文件訪問時,先找到inode,通過目錄查找inode號
要找/var/log/message時,先要找根的inode,這是必須事先知道的,然后通過inode號找到根的磁盤塊,在塊中找到var及var所在inode的編號,通過inode編號找到inode,在inode中找到var對應的磁盤塊,在塊中找到log及其inode編號,。。。最后找到message的的磁盤塊。稱為路徑映射。 速度慢,所以將目錄存儲在buffer。
硬鏈接:
不能創建目錄的硬鏈接。 inode編號引用不能跨分區,即不能跨分區創建硬鏈接。 有兩個文件路徑指向同一個inode編號。 刪除文件時是將inode標志位減1,為0時,則表示為空,可將其覆蓋。實際上數據未被真實刪除。 指向相同inode的不同路徑。創建文件的硬鏈接即為為inode創建新的引用路徑,因此會增加其應用次數
軟鏈接: 符號鏈接
可對目錄進行 可跨分區 執行另一個文件的路徑,其大小為執行路徑字符串的長度,不增加或減少目標文件inode的引用計數。 在inode編號中應存放地址指針的位置存放了一串字符串即另一文件路徑。 它的文件大小是指向的文件名的大小 軟鏈接的文件權限是777 指向不同inode
ln [-sv] SRC DEST -s: symbolic link v;verbose
創建文件系統
在linux中我們可以創建許多種類型的文件系統,下面我們就以ext4為例。
1.我們先來了解fdisk命令。
[root@localhost ~]# fdisk -l Disk /dev/sda: 42.9 GB, 42949672960 bytes, 83886080 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk label type: dos Disk identifier: 0x00099a93 Device Boot Start End Blocks Id System /dev/sda1 * 2048 616447 307200 83 Linux /dev/sda2 616448 58728447 29056000 83 Linux /dev/sda3 58728448 62924799 2098176 82 Linux swap / Solaris
這個命令是顯示當前系統所磁盤的空間使用信息,這段信息顯示當前只有一個磁盤/dev/sda,共有三個分區/dev/sda1,/dev/sda2,/dev/sda3
我們第一步要做的是創建新分區。
[root@localhost ~]# fdisk /dev/sda #對/dev/sda進行操作,如增加分區,刪除分區,修改分區等 Command (m for help): n #添加分區 Partition type: p primary (3 primary, 0 extended, 1 free) #主分區 e extended #邏輯分區 Select (default e): e #選擇創建邏輯分區 Selected partition 4 #選擇創建第4個分區 First sector (62924800-83886079, default 62924800): #默認 Using default value 62924800 Last sector, +sectors or +size{K,M,G} (62924800-83886079, default 83886079): Using default value 83886079 #默認,但也可以使用+5G之類的用法 Partition 4 of type Extended and of size 10 GiB is set Command (m for help): n #添加分區 All primary partitions are in use Adding logical partition 5 First sector (62926848-83886079, default 62926848): #默認分區其實地址 Using default value 62926848 Last sector, +sectors or +size{K,M,G} (62926848-83886079, default 83886079): +5G #設置分區大小 Partition 5 of type Linux and of size 5 GiB is set Command (m for help): w #保存設置 The partition table has been altered!
現在,我們已經創建好分區了。 注意:此時的分區好沒有保存到內核中。我們需要以下命令將其加載到內核中。
[root@localhost ~]# partx -a /dev/sda #通知內核添加新增加的分區 partx: /dev/sda: error adding partitions 1-6 #不需要在意這些錯誤,已經添加成功了
2.創建好了分區,就要在分區上創建文件系統。此時我們創建ext4文件系統
[root@localhost ~]# mkfs.ext4 -L 'MYDATA' -b 1024 /dev/sda5 mke2fs 1.42.9 (28-Dec-2013) Filesystem label=MYDATA # 由 -L 指明的卷標 OS type: Linux Block size=1024 (log=0) # 由-b 設置的塊大小,默認為4096 Fragment size=1024 (log=0) Stride=0 blocks, Stripe width=0 blocks 327680 inodes, 5242880 blocks 262144 blocks (5.00%) reserved for the super user First data block=1 Maximum filesystem blocks=38797312 640 block groups 8192 blocks per group, 8192 fragments per group 512 inodes per group Superblock backups stored on blocks: #超級塊在以下塊中備份 8193, 24577, 40961, 57345, 73729, 204801, 221185, 401409, 663553, 1024001, 1990657, 2809857, 5120001 Allocating group tables: done Writing inode tables: done Creating journal (32768 blocks): done Writing superblocks and filesystem accounting information: done #成功
關于ext系列的文件系統,我們還有一種專用的創建的命令:
mke2fs: ext系列文件系統專業管理工具 -t {ext2|ext3|ext4} -b {1024|2046|4096} -L 'LABEL' -j: 相當于 -t ext3 -i #: 數據空間每多少個字節創建一個inode: 此大小不應小于block的大小 -N #:為數據空間創建多少個inode -m #:為管理人員預留的空間占據的百分比 -O FEATURE[,...] -O ^FEATURE: 關閉指定特性
3.好啦,現在我們就創建好了。只要再將該分區掛載到一個目錄就可以了。
[root@localhost ~]# mkdir /test [root@localhost ~]# mount /dev/sda5 /test
此時我們就全部成功了。 注意此時掛載只在當前shell有效,若想是開機后自動掛載可在/etc/fstab文件中添加如下信息:
/dev/sda5 #掛載設備 /test #掛載點 ext4 #設備文件類型 defaults #默認掛載選項 0 #轉儲頻率 0 #自檢次序
卸載方法: umount /dev/sda5 #或者是掛載點 /test
4.我們現在可以查看關于新增加的文件系統的信息
[root@localhost ~]# blkid #顯示塊設備屬性 /dev/block/8:2: UUID="50aa3cc7-ffb8-4d3b-98a4-ac5896810534" TYPE="xfs" /dev/block/8:1: UUID="f449ee2d-e77a-43f0-aab1-eadc353c19f9" TYPE="xfs" /dev/block/8:3: UUID="039dd390-88b5-424b-862c-3d68a88bf193" TYPE="swap" /dev/sda5: LABEL="MYDATA" UUID="ae0314bd-b6e8-4e9b-8bb5-507ee5f7770c" TYPE="ext4" [root@localhost ~]# blkid -L 'MYDATA' # 根據對應的LABEL來查看對應的設備 /dev/sda5 [root@localhost ~]# blkid -U 'ae0314bd-b6e8-4e9b-8bb5-507ee5f7770c' # 根據指定的UUID來查找對應的設備 /dev/sda5 [root@localhost ~]# dumpe2fs /dev/sda5 #顯示指定塊設備的超級塊信息及塊組信息 -h:只顯示超級塊信息 [root@localhost ~]# tune2fs -l /dev/sda5 #顯示指定塊設備的超級塊信息 -l:查看指定文件系統超級塊信息: -L 'LABEL': 修改卷標 等同于: e2label: 管理ext系列文件系統的LABEL # e2label DEVICE [LABEL] -m #;修改預留給管理員的空間百分比 -j:將ext2升級為ext3 -O:文件系統屬性啟用或禁用 -o:調整文件系統的默認掛載選項 -U UUID:修改UUID號
5.最后就是文件系統的檢測和修復。
[root@localhost ~]# fsck /dev/sda5 #或掛載點,卷名 fsck from util-linux 2.23.2 e2fsck 1.42.9 (28-Dec-2013) MYDATA: clean, 11/327680 files, 120141/5242880 blocks 可以指定文件系統類型:fsck -t ext4 /dev/sda5 fsck.ext4 /dev/sda5 -a:自動修復錯誤 -r: 交互式修復錯誤
關于ext系列還有一個專用的命令:
[root@localhost ~]# e2fsck /dev/sda5 e2fsck 1.42.9 (28-Dec-2013) MYDATA: clean, 11/327680 files, 120141/5242880 blocks -y:自動回答yes -f: 強制修復
注意:檢查修復是必須先卸載塊設備
6.下面我們來說一說swap的創建和使用
mkswap: 創建交換分區 前提:設置分區類型為82 掛載交換分區: 啟用:swapon swapon [OPTION]...[DEVICE] -a: 激活所有的交換分區 -p PRIORITY: 指定優先級 禁用:swapoff 內存空間使用狀態: free [OPTION] -m:以MB為單位 -g:以GB為單位 Mem:物理內存 -/+ buffers/cache: 加減緩沖或緩存的空間大小。 swap:交換空間大小 文件系統空間占用等信息的查看工具: df: -h: human-readable -i: inodes instead of blocks -P: 以Posix兼容的格式輸出
7.最后補充一些命令的使用
mount: 顯示當前系統以掛載的所有設備,通過查看/etc/mtab mount [-fnrsvw] [-t vfstype] [-o options] device dir device: 指明要掛載的設備 (1) 設備文件:/dev/sda5 (2) 卷標: -L 'LABEL' (3) UUID: -U (4) 偽文件系統名稱:pric, sysfs, devtmpfs, comfigfs dir: 掛載點 事先存在:建議使用空目錄 處于工作中的設備無法掛載 常用選項: -t vfstype: 指定要掛載的設備上的文件系統類型 -r: readonly 只讀掛載 -w: read and write, 讀寫掛載 -n: 不更新/etc/mtab -a: 自動掛載所有支持自動掛載的設備(定義在了/etc/fstab,且掛載選項中有“自動掛載選項”) -L 'LABEL';以卷標指定掛載設備 -U 'UUID': 以UUID指定掛載設備 -B:綁定目錄到另一個目錄上 注意: 查看內核追蹤到的以掛載的所有設備:/proc/mounts -o options: (掛載文件系統的選項) async: 異步模式: 寫時復制(copy on write) sync: 同步模式 同步I/O:寫完后,直接將內存中的數據存儲到磁盤上。數據可靠性高,但性能差 異步I/O:寫完后,不立即將內存數據存儲到磁盤上??煽啃圆?,但性能高。 atime/noatime:(包含,目錄和文件) 更新訪問時間戳,若要更改時間戳需在磁盤中修改。所以建議不更新訪問時間戳。 diratime/nodiratime: 目錄的訪問時間戳 auto/noauto: 是否支持自動掛載 exec/noexec: 是否支持將文件系統上應用程序運行為進程,能起到一定范圍上的安全防范功能。 dev/nodev: 是否支持在此文件系統上使用設備文件。 suid/nosuid: remount:重新掛載 ro: 只讀掛載 rw: 讀寫掛載 user/nouser;是否允許普通用戶掛載設備 acl: 啟用此文件系統上的acl功能 注意: 上述選項可多個同時使用,彼此使用逗號分隔: 默認掛載選項:defaults rw,suid,dev.exec,auto,nouser,and async 文件系統空間占用等信息的查看工具: df: -h: human-readable -i: inodes instead of blocks -P: 以Posix兼容的格式輸出 查看某目錄總體總體空間占用狀態 du: du [OPTION] ...DIR -s: sumary -h: human-readable
原創文章,作者:21期-揚州-藍,如若轉載,請注明出處:http://www.www58058.com/24167
寫的很好,排版也很漂亮,加油