2021-05-12 14:32:11
檔案系統入門知識
一、檔案系統型別
-
Linux檔案系統: ext2, ext3, ext4, xfs(SGI), btrfs(Oracle), reiserfs, jfs(AIX), swap
-
光碟:iso9660
-
Windows:fat32, ntfs
-
Unix: FFS(fast), UFS(unix), JFS2
-
網路檔案系統:NFS, CIFS
-
叢集檔案系統:GFS2, OCFS2(oracle)
-
分散式檔案系統:ceph, moosefs, mogilefs, fastdfs,glusterfs, Lustre
-
RAW:未經處理或者未經格式化產生的檔案系統
檔案根據其是否支援“紀錄檔(journal)”功能可分為兩類:
-
有紀錄檔:ext3, ext4, xfs
-
無紀錄檔:ext2
小貼士:紀錄檔檔案系統:
一種檔案系統,指在檔案系統發生變化時,先把相關的資訊寫入一個被稱為紀錄檔的區域,然後再把變化寫入主檔案系統的檔案系統。在檔案系統發生故障(如核心崩潰或突然停電)時,紀錄檔檔案系統更容易保持一致性,並且可以較快恢復。
二、虛擬檔案系統
虛擬檔案系統也成為VFS。
VFS存在的意義:
-
1.向上,對應用層提供一個標準的檔案操作介面;
-
2.對下,對檔案系統提供一個標準的介面,以便其他作業系統的檔案系統可以方便的移植到Linux上;
-
3.VFS內部則通過一系列高效的管理機制,比如inode cache, dentry cache 以及檔案系統的預讀等技術,使得底層檔案系統不需沉溺到複雜的核心操作,即可獲得高效能;
-
4.此外VFS把一些複雜的操作儘量抽象到VFS內部,使得底層檔案系統實現更簡單。
VFS架構圖:
三、檔案系統的組成
檔案系統管理分兩部分組成:
-
檔案系統核心模組:如 ext4, xfs, vfat...
-
檔案系統管理工具:如 mkfs.ext4, mkfs.xfs,mkfs.vfat...
檢視當前系統支援的檔案系統型別:
[root@CentOS6 ~]# cat /proc/filesystems nodev sysfs nodev rootfs nodev bdev nodev proc ...
四、檔案系統選擇
1、大量小檔案(LOSF, Lost of small files)I/O應用(如小圖片)
Reiserfs(首選), Ext4檔案系統適合這類負載特徵,IO排程演算法選擇deadline,block size = 4096, ext4關閉紀錄檔功能。
2、大檔案I/O應用(如視訊下載、串流媒體)
EXT4檔案系統適合此類負載特徵,IO排程演算法選擇anticipatory, block size = 4096, 關閉紀錄檔功能,啟用extent(default)。
3、SSD檔案系統選擇
EXT4/Reiserfs可以作為SSD檔案系統,但未對SSD做優化,不能充分發揮SSD效能,並影響SSD使用時間。 Btrfs對SSD作了優化,mount通過引數啟用。但Btrfs仍處於實驗階段,生產環境謹慎使用。
五、建立與管理檔案系統
1.mkfs命令
格式:
mkfs -t <ext4|xfs|btrfs|vfat> /dev/DEVICE
常用選項:
-t FS_TYPE:指定檔案系統型別 -L LABEL:指定捲標名稱
範例:
[root@bash ~]# mkfs -t ext4 -L "YOUNG" /dev/sdb mke2fs 1.42.9 (28-Dec-2013) /dev/sdb is entire device, not just one partition! Proceed anyway? (y,n) y Filesystem label=YOUNG OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 1310720 inodes, 5242880 blocks 262144 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=2153775104 160 block groups 32768 blocks per group, 32768 fragments per group 8192 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000 Allocating group tables: done Writing inode tables: done Creating journal (32768 blocks): done Writing superblocks and filesystem accounting information: done
2.mkfs.FS_TYPE命令
格式:
mkfs.FS_TYPE /dev/DEVICE
範例:
[root@bash ~]# mkfs.ext4 /dev/sdb mke2fs 1.42.9 (28-Dec-2013) /dev/sdb is entire device, not just one partition! Proceed anyway? (y,n) y Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) ...
3.mke2fs命令
mke2fs專用於ext系列檔案系統的建立於管理。
常用選項:
-t {ext2|ext3|ext4}:指定檔案系統 -b {1024|2048|4096}: 指定塊大小 -L LABEL:卷標,即分割區名稱 -j: 相當於“mke2fs -t ext3” mkfs -t ext3 = mke2fs -t ext3 = mke2fs -j = mke2fs -O has_journal -i #: 為資料空間中的每多少位元組建立一個inode;此位元組數不應該小於塊大小;比例關係; -I: 一個inode記錄大小128---4096 -N #:直接指定後設資料區有多少個inode; -m #: 指定為管理預留管理空間占據總空間的百分比;預設為5% -O FEATURE[,...]:指定啟用分割區的某特殊特性 -O ^FEATURE:關閉指定特性 -O has_journal:啟用紀錄檔 -O ^has_journal:關閉關閉
範例:
[root@bash ~]# mke2fs -t ext4 -b 4096 -L 'young' -i 4096 -N 100000 -I 128 -m 6 -O has_journal /dev/sdb mke2fs 1.42.9 (28-Dec-2013) /dev/sdb is entire device, not just one partition! Proceed anyway? (y,n) y Filesystem label=young OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 102400 inodes, 5242880 blocks 314572 blocks (6.00%) reserved for the super user ...
4.e2lablel命令
e2lablel命令用於捲標檢視及管理。
格式:
e2label DEVICE [LABEL]
範例:
[root@bash ~]# e2label /dev/sdb young [root@bash ~]# e2label /dev/sdb "GEEK" [root@bash ~]# e2label /dev/sdb GEEK
5.blkid命令
blkid命令用於塊裝置屬性資訊顯示。
格式:
blkid [OPTIONS] [DEVICE]
常用選項:
-U UUID: 列出某UUID對應的裝置 -L LABEL: 列出使用此LABEL裝置
範例:
[root@bash ~]# blkid /dev/sdb: LABEL="GEEK" UUID="2e564b3f-e542-4bef-aa88-d70935c5c5fb" TYPE="ext4" /dev/sr0: UUID="2015-12-09-22-36-30-00" LABEL="CentOS 7 x86_64" TYPE="iso9660" PTTYPE="dos" /dev/sda1: UUID="812a29ec-11dd-4fa6-b373-c4b42fb80162" TYPE="xfs" /dev/sda2: UUID="3b67c557-763b-41f2-aff0-4810b0324128" TYPE="xfs" /dev/sda3: UUID="86e06c71-0806-4463-bf6d-490a28cb12b6" TYPE="xfs" /dev/sda5: UUID="431c5b57-a52d-4fcc-8845-f984c463b78f" TYPE="swap" [root@bash ~]# ^C [root@bash ~]# blkid -U 2e564b3f-e542-4bef-aa88-d70935c5c5fb /dev/sdb [root@bash ~]# blkid /dev/sdb /dev/sdb: LABEL="GEEK" UUID="2e564b3f-e542-4bef-aa88-d70935c5c5fb" TYPE="ext4" [root@bash ~]# blkid -L "GEEK" /dev/sdb
6.dumpe2fs命令
dumpe2fs用於ext系列檔案系統的超級塊資訊檢視。
格式:
dumpe2fs [OPTIONS] DEVICE
常用選項:
-h: 僅顯示超級塊資訊
範例:
[root@CentOS6 ~]# dumpe2fs /dev/sda1 dumpe2fs 1.41.12 (17-May-2010) Filesystem volume name: <none> Last mounted on: /boot Filesystem UUID: 23048871-a3fd-4d25-92da-5c39459bf7c6 Filesystem magic number: 0xEF53 Filesystem revision #: 1 (dynamic) Filesystem features: has_journal ext_attr resize_inode dir_index filetype needs_recovery extent flex_bg sparse_super huge_file uninit_bg dir_nlink extra_isize Filesystem flags: signed_directory_hash Default mount options: user_xattr acl Filesystem state: clean Errors behavior: Continue Filesystem OS type: Linux Inode count: 51200 Block count: 204800 Reserved block count: 10240 Free blocks: 64456 Free inodes: 49329 First block: 1 Block size: 1024 Fragment size: 1024 Reserved GDT blocks: 256 Blocks per group: 8192 Fragments per group: 8192 Inodes per group: 2048 Inode blocks per group: 256 Flex block group size: 16 Filesystem created: Tue Jul 19 19:11:41 2016 Last mount time: Tue Jan 31 02:35:52 2017 Last write time: Tue Jan 31 02:35:52 2017 Mount count: 143 Maximum mount count: -1 Last checked: Tue Jul 19 19:11:41 2016 Check interval: 0 (<none>) Lifetime writes: 332 MB Reserved blocks uid: 0 (user root) Reserved blocks gid: 0 (group root) First inode: 11 Inode size: 128 Journal inode: 8 Default directory hash: half_md4 Directory Hash Seed: ac8bb143-702c-4f17-80fd-afda06b8763e Journal backup: inode blocks Journal features: journal_incompat_revoke Journal size: 4096k Journal length: 4096 Journal sequence: 0x000002a7 Journal start: 1 Group 0: (Blocks 1-8192) [ITABLE_ZEROED] Checksum 0x70bd, unused inodes 214 Primary superblock at 1, Group descriptors at 2-2 Reserved GDT blocks at 3-258 Block bitmap at 259 (+258), Inode bitmap at 275 (+274) Inode table at 291-546 (+290) 3545 free blocks, 216 free inodes, 229 directories, 214 unused inodes Free blocks: 4648-8192 Free inodes: 34, 1834-2048 ...
innode與超級塊關係圖:
超級塊:超級塊(superblock)的作用是儲存檔案系統的大小、有多少是空的和已經填滿的占多少,以及他們各自的總數和其他諸如此類的資訊。要使用一個分割區來進行資料存取,那麼第一個要存取的就是超級塊。所以,超級塊壞了,那磁碟也就基本沒救了。
超級塊佔用1號物理塊,就是檔案系統的控制塊,超級塊包括:檔案系統的大小、空閒塊數目、空閒塊索引表、空閒i節點數目、空閒i節點索引表、封鎖標記等。超級塊是系統為檔案分配儲存空間、回收儲存空間的依據。
所以為了防止超級塊資料損壞,就需要對超級塊資料進行備份,以便於損壞時可以修復。
-
indoe bitmap (indoe對照表): 用來記錄當前檔案系統的indoe哪些是已經使用的,哪些又是未使用的。
-
block bitmap (塊對照表): 用來記錄當前檔案系統哪些block已經使用,哪些又是未使用的。
-
inode table (inode 表格):inode是用來記錄檔案的屬性以及該檔案實際資料所在的block的號碼。
-
GDT(Global Descriptor Table):用來描述每個block group開始和結束的block號碼以及每個區段位於哪一個block號碼之間。相當於檔案系統描述的是每個block group的資訊。
-
data blocks:資料塊,用於存放資料
7.tune2fs命令
tune2fs用於重新設定可ext系統檔案系統中的可調整引數。
格式:
tune2fs [OPTIONS] DEVICE
常用選項:
-l: 檢視指定檔案系統的超級塊資訊 -L LABEL:設定卷標 -m #: 調整為管理員預留空間的百分比 -j: 用於為ext2檔案系統 新增ext3格式的紀錄檔,提升ext2為ext3 -O: 檔案系統屬性的開啟或關閉,–O ^has_journal -o: 調整檔案系統掛載的預設屬性(檔案系統掛載屬性的開啟或關閉),–o ^acl -U UUID:設定指定檔案系統的UUID;
範例:
[root@bash ~]# tune2fs -l /dev/sdb #列出超級塊資訊,相當於dumpe2fs -h tune2fs 1.42.9 (28-Dec-2013) Filesystem volume name: GEEK Last mounted on: <not available> Filesystem UUID: 2e564b3f-e542-4bef-aa88-d70935c5c5fb Filesystem magic number: 0xEF53 Filesystem revision #: 1 (dynamic) Filesystem features: has_journal ext_attr resize_inode dir_index filetype extent 64bit flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize Filesystem flags: signed_directory_hash Default mount options: user_xattr acl Filesystem state: clean Errors behavior: Continue Filesystem OS type: Linux Inode count: 102400 ... [root@bash ~]# tune2fs -L "H" /dev/sdb #設定卷標 tune2fs 1.42.9 (28-Dec-2013) [root@bash ~]# e2label /dev/sdb H [root@bash ~]# blkid /dev/sdb /dev/sdb: UUID="6ce61834-a56c-4367-bce3-953d05f5f4bc" TYPE="ext2" [root@bash ~]# tune2fs -j /dev/sdb #增加紀錄檔,提升為ext3 tune2fs 1.42.9 (28-Dec-2013) Creating journal inode: done [root@bash ~]# blkid /dev/sdb /dev/sdb: UUID="6ce61834-a56c-4367-bce3-953d05f5f4bc" SEC_TYPE="ext2" TYPE="ext3" [root@bash ~]# tune2fs -o ^acl /dev/sdb [root@bash ~]# uuidgen 5272519a-039a-4bf0-817a-6014daec5e15 [root@bash ~]# tune2fs -U 5272519a-039a-4bf0-817a-6014daec5e15 /dev/sdb #修改uuid tune2fs 1.42.9 (28-Dec-2013) [root@bash ~]# blkid -U 5272519a-039a-4bf0-817a-6014daec5e15 /dev/sdb
8.findfs命令
findfs命令用於根據卷標或者UUID查詢裝置
格式:
findfs [OPTIONS] UUID=<uuid> findfs [OPTIONS] LABEL=<label>
範例:
[root@bash ~]# e2label /dev/sdb "YOUNG" [root@bash ~]# e2label /dev/sdb YOUNG [root@bash ~]# blkid /dev/sdb /dev/sdb: LABEL="YOUNG" UUID="5272519a-039a-4bf0-817a-6014daec5e15" SEC_TYPE="ext2" TYPE="ext3" [root@bash ~]# findfs UUID="5272519a-039a-4bf0-817a-6014daec5e15" /dev/sdb [root@bash ~]# findfs LABEL="YOUNG" /dev/sdb
更多詳情見請繼續閱讀下一頁的精彩內容: http://www.linuxidc.com/Linux/2017-02/140307p2.htm
相關文章