ext4:
mount -o options device directory
Option:Description
async:允許文件系統異步的輸入與輸出
auto:Allows the file system to be mounted automatically using the mount -a command.
defaults:Provides an alias for async,auto,dev,exec,nouser,rw,suid.
exec:允許二進制文件執行
loop:把鏡像文件回環設備掛載
noauto:Default behavior disallows the automatic mount of the file system using the mount -a command.
noexec:不允許二進制文件執行
nouser:禁止普通用戶mount與umount
remount:重新掛載
ro:只讀
rw:允許讀寫
user: 允許普通用戶mount與umount
acl:訪問控制列表
EXT4:選項
刷新cache時間:ext3,ext4
commit=nsec文件系統CACHE刷新時間
stripe= 條帶大小(以block為單位)
delalloc 開啟延時塊分配
nodelalloc 禁止延時塊分配
barrier 開啟write barrier
nobarrier 禁止write barrier
journal_dev=devnum (外部日志設備的設備號,由主次設備號組成)
模式:
data=writeback 性能,高; 寫回模式,先寫metadata(代表日志),后寫data
data=ordered 性能,中; 命令模式,[先寫data,后寫metadata]==事務,最后寫 metadata journal
data=journal 性能,低: 日志模式, 先日志(metadata journal,data journal),后數據(metadata,data)
mount -o ro,loop Fedora-14-x86_64-Live-Desktop.iso /media/cdrom
mkfs.ext4 -b block-size 塊大小(1k,2k,4k)
-c 壞塊測試
-l filename從文件讀壞塊列表
-C cluster-size 簇大小 (大塊分配持性)
-D 使用direct I/O
-E 擴展屬性
mmp_update_interval=MMP更新時間間隔,必需小於300s
stride=條塊大小(RAID組中每個條帶單元chunk大小)
stripe_width=條帶大小 (單位為block),(在數據定時,塊分配器盡可能的防止產生read-modify-write)
resize=保留在線調整時的空間大小
lazy_itable_init=0/1 inode表不完全初始化 (掛載時由內核在后台初始化) // 40TG mount后50M寫初始化55分鍾 (格式化時:20s,強制初始化時:7min) (mkfs.ext4 -E lazy_itable_init=0,lazy_journal_init=0 )
lazy_journal_init=0/1日志inode表不完全清0
test_fs設置文件系統體驗標志
-F(force 強制)
-f fragment-size 指定片段大小
-g blocks-per-group 指定每一個塊組內塊的數量
-G number-of-groups 指定塊組數量(在元數據負載重時可以提高元數據性能)
-i bytes-per-inode 指定 bytes/inode 比率
-I inode-size 指定inode大小
-j 創建一個ext3日志。默認創建合適大小的日志區
-J 創建指定屬性的日志。逗號分隔。 (size=1024塊 內部日志大小,device= 外部日志設備 )
size= journal-size 內部日志大小,單位為M,最小為1024個文件系統塊,(最大為10240000個文件系統塊或文件系統的一半)
device = external-journal 外部日志塊設備(設備名,標簽,UUID)
外部日志必需先創建:mke2fs -b 4096 -O journal_dev external-journal (/dev/ramhda)
mkfs.ext4 -J device= external-journal (/dev/ramhda) -F /dev/mapper/vggxxxxxxx
-L 設置volume 標簽,最長為16個byte
-m 指定保留空間百分比,為root用戶
-M 設置最后掛載目錄
-n 不真正創建文件系統,只是顯示創建的信息
-S 只寫超級塊和塊組描述符。(當超級塊和備份超級塊錯誤后,可以用來恢復數據。因為它不會touching inode表和bitmap)
-O feature 指定創建文件系統時的持性(/etc/mke2fs.conf)
bigalloc 使能大塊分配(cluster-size)
dir_index 使用哈希B樹加速目錄查找
extents 使用extents替代間接塊
filetype在目錄項中存儲文件類型信息
flex_bg 允許為每一個塊組元數據(分配bitmap和inode表)存放在任何位置
has_journal 創建ext3日志(-j)
journal_dev 在給定的設備上創建外部ext3日志
large_file 支持>2G的文件(現代內核會自動打開)
quota 創建quota inodes(inode#3為用戶配額,inode#4為組配額) ,並在超級塊中設置。
(掛載后自己啟用quota)
resize_inode 保留空間以便未來塊組描述表增長。用於resize2fs
sparse_super 創建少量的超緩塊拷貝
uninit_bg 創建文件系統時不初始化所有的塊組,加速創建時間,和e2fsck時間、
-O^has_journal 不啟用日志
文件系統屬性:
1,/proc/fs/ext4/設備/options 查已掛載文件系統屬性
rw 文件系統掛載時的讀寫策略
delalloc 開啟延時塊分配
barrier 開啟write barrier(提供寫順序)
user_xattr
acl
resuid=0 可以使用保留塊的用戶ID
resgid=0 可以使用保留塊的組ID
errors=continue 文件系統出錯時動作
commit=5 文件系統刷cache的時間間隔
max_batch_time=15000us 最大的等待合並一起提交的時間,默認15ms
min_batch_time=0us 最小的等待合交一起提交的時間,0us
stripe=0 多塊分配時和對齊的塊數,對於raid5/6,大小為數據磁盤數*chunk大小
data=ordered 文件系統掛載模式
inode_readahead_blks=32 先行讀入緩沖器緩存(buffer cache)的inode表塊(table block)數的最大值
init_itable=10
max_dir_size_kb=n 目錄大小限制
mb_order2_req=2 對於大於該值(2的冪次方)的塊,要求使用Buddy檢索
lifetime_write_kbytes 文件系統生成后寫入的數據量(KB)
mb_stats 指定收集(1)或不收集(0)多塊分配的相關統計信息。統計信息在卸載時顯示 0(禁用)
max_writeback_mb_bump 進行下一次inode處理前嘗試寫入磁盤的數據量的最大值(MB) 128
mb_stream_req=0 塊數小於該值的文件群被集中寫入到磁盤上相近的區域
mb_group_prealloc 未指定掛載選項的stripe參數時,以該值的倍數為單位確保塊的分配 512
session_write_kbytes 掛載后寫入文件系統的數據量(KB)
2,/sys/fs/ext4/設備/
mb_stream_req=16 塊數小於該值的文件群被集中寫入到磁盤上相鄰的區域
inode_readahead_blks=32 控制進行預讀的inode表的數量
inode_goal 下一個要分配的inode編號(調試用) 0(禁用)
delayed_allocation_blocks 等待延遲分配的塊數
max_writeback_mb_bump=128 進行下一次inode處理前嘗試寫入磁盤數據量的最大值(MB)
mb_group_prealloc=512 未指定stripe參數時,以該值的倍數為單位確保塊的分配
mb_max_to_scan=200 分配多塊時為找出最佳extent而搜索的最大extent數
mb_min_to_scan=10 分配多塊時為找出最佳extent而搜索的最小extent數
mb_order2_req=2 對於大於該值的塊(2的冪),要用buddy算法。
mb_stats=0 指定收集1,與不收集0多塊分配的相關統計信息,統計信息會在卸載時顯示
reserved_clusters
lifetime_write_kbytes 只讀,記錄已經寫入文件系統的數據量(kb).
session_write_kbytes 只讀,記錄此記掛載以來已寫入的數據(kb).
擴大文件系統:ext2/ext3/ext4
resize2fs
fsadm: 檢查或調整大小的文件系統工具。支持ext2/ext3/ext4/ ReiserFS/xfs.
fsadm [options] check device 檢查設備
fsadm [options] resize device [new_size[BKMGTEP]]
options選項有:
-e 在調整大小前先卸載ext2/ext3/ext4文件系統
-f force 繞過一些檢查
-h 顯示幫助信息
-n 只打印命令,不執行
-v 打印更多信息
-y yes 對任何提示均回答yes
如: fsadm -e -y resize /dev/vg/test 1000M
EXT4外部日志設備:
1,當日志設備丟失時:
移除不可用的日志:tune2fs -O ^has_journal /dev/ext4-device
檢查修復文件系統: fsck/repair
(注: tune2fs -O has_journal /dev/ext4-device 會創建內部日志)
2,創建ext4外部日志
格式化日志設備:mke2fs -b 4096 -O journal_dev /dev/ext4-journal-device
創建一個新的文件系統: mkfs.ext4 -J device=/dev/ext4-journal-device /dev/ext4-device
或添加給已存在的文件系統: tune2fs -O journal_dev -J device=/dev/ext4-journal-device /dev/ext4-device
外部日志設備大小: (日志太大時,會增加crash后文件系統檢驗fsck時間)
文件系統<32768 block logdev=1024 block 4k(<128M,4M)
<262144 block logdev=4096 block (<1G,16M)
>262144 block logdev=8192 block (>1G,32M )
fdtree: 測試工具。
注:
問題1:日志設備的永久性。當有多個硬盤設備時,linux是隨機的指定名稱的。不能確保/dev/sdb重啟后還會映射到同一設備。
除非你加入一個自定義的udev規定。ext4不理解UUID,所以外部日志設備必需是一個持久性設備,並且重啟后不會改變.。
問題2:當有外部日志設備時,默認日志掛載選項不支持,必需指定journal_async_commit .否則(操作一個小時或大量IO時很快就會變為)只讀.顯然,外部日志不能使用同步更新,因為日志提交錯誤會提交或延后使ext4文件系統變為只讀。
XFS:
XFS格式化: 塊設備分割成八個或以上相等的線性區域(region,或塊chunk)-->稱為“分配組”.
分配組是唯一的,獨立管理自己的inode節點和空閉空間(類似文件子系統,使用高效的B+樹來跟蹤主要數據),分配組機制給XFS提供了可伸縮和並行特性(多個線程和進程可以同時在同一個文件系統上執行IO操作)。
XFS:數據段(數據,元數據),日志段,實時段.(默認mkfs.xfs下:實時段不存在,日志段包含在數據段中)
詳細信息:請參考man mkfs.xfs
mkfs.xfs -b block_size(塊大小) options
-d data_section_options(數據屬性)(sunit/swidth(單位為512byte)=su/sw 條帶大小/寬度)
mkfs.xfs -d su=4k(條塊chunk大小),sw=16(數據盤個數) /dev/sdb
mkfs.xfs -d sunit=128,swidth= sunit*數據盤個數 /dev/sdd
數據屬性有:
agvount= value 指定分配組(並發小文件系統(16M~1T))
agsize = value 與上類似,指定分配組大小
name= 指定文件系統內指定文件的名稱。此時,日志段必需指定在內部(指定大小)。
file [=value] 指定上面要命名的是常規文件(默認1,可以為0)。
size= value 指定數據段大小,需要 -d file =1
sunit=value 指定條帶單元大小(chunk,單位為512)
su=value 指定條帶單元(chunk,單位為byte. 如:64k,必需為文件系統塊大小的倍數)
swidth=value 指定條帶寬度(單位為512, 為sunit的數據盤個數倍數)
sw =value 條帶寬度(通常為數據盤個數)
noalign 忽略自動對齊(磁盤幾何形狀探測,文件不用幾何對齊)。
-i inode_options 節點選項.(xfs inode 包含二部分:固定部份,可變部份)。
這些選項影響可變部份,包括:目錄數據,屬性數據,符號連接數據,文件extent列表,文件extent描述性根樹。
選項有:
size = value | log=value | perblock =value 指定inode大小(256~2048)
maxpct=value 指定inode所有空間的百分比。(默認為:<1T=25%,<50T=5% >50T=1%)
align [=value] 指定分配inode時是否對齊。默認為1,對齊。
attr = value 指定屬性版本號,默認為2
projid32bit [=value] 是否使能32位配額項目標識符。默為1.
-f 強制(force)
-l log_section_options (日志屬性)(internal/logdev)
選項有:
internal [=value] 指定日志段是否作為數據段的一部分。默認為1.
logdev = device 指定日志位於一個獨立的設備上。(最小為10M,2560個4K塊)
創建: mkfs.xfs -l logdev=/dev/ramhdb -f /dev/mapper/vggxxxxx
掛載: mount -o logdev=/dev/ramhdb /dev/mapper/vggxxxxx
size = value 指定日志段的大小。
version = value 指定日志的版本。默認為2
sunit = value 指定日志對齊寫。單位為512
su= value 指定日志條帶單元. 單位為byte
lazy-count = value 是否廷遲計數。默認為1.更改超級塊中各種連續計數器的計錄方法。
在為1時,不會在計數器每一次變化時更新超級塊。
-n naming_options 命名空間(目錄參數)
選項有:
size= value | log = value 塊大小。不能小於文件系統block,且是2的冪。
版本2默認為4096,(如果文件系統block>4096,則為block)
version= value 命名空間的版本。默認為2 或'ci' ,
ftype = value 允許inode類型存儲在目錄結構中,以便readdir,getdents不需要查找inode就可知道inode類型。默認為0,不存在目錄結構中。(使能crc: -m crc=1 時,此選項會使能)
-p protofile
-r realtime_section_options (實時數據屬性)(rtdev/size)
實時段選項:
rtdev =device 指定外部實時設備名
extsize=value指定實時段中塊大小,必需為文件系統塊大小的倍數。 最小為(max(文件系統塊大小, 4K))。
默認大小為條帶寬度(條帶卷),或64K(非條帶卷) ,最大為1G
size = value 指定實時段的大小
noalign 此選項禁止 條帶大小探測,強制實時設備沒有幾何條帶。
-s sector size(扇區大小),最小為512,最大為32768 (32k). 不能大於文件系統塊大小。
-L label 指定文件系統標簽。最多12個字符
-q(quiet 不打印) -f(Force 強制)
-N 只打印信息,不執行實際的創建。
1.元數據日志可以獨立存放: XFS外部日志設備
mkfs.xfs -l logdev=/dev/sdb1,size=10000b /dev/sda1
(日志大小為10000block,存放在sdb1上)
外部日志設備的大小:與事條transaction的速率和大小相關,與文件系統的大小無關。
大的block size會導致大的transaction, 日志事務transaction來源於目錄更新(創建/刪除/修改).
如:mkdir ,rmdir,create(),unlink()系統調用會產生日志數據。
最小日志大小為:最大的transaction大小(取決於文件系統和目錄塊大小), 最小10M。
(目錄塊大小:mkfs.xfs -n ; 默認為4k, 當文件系統blocksize 大於4k,時,就默認為blocksize。
提高大量小文件的性能,提高了目錄查找的性能,因為樹存儲索引信息有較大的塊和較小的深度)
最大日志大小為: 64k 個blocks和128M中的最小值。(日志太大,會增加crash后文件系統的mount時間)
mount -o 選項
allocsize= 延時分配時,預分配buffered 大小,
sunit= /swidth= 使用指定的條帶單元與寬度(單位為512byte)(優先級高於mkfs時指定的)
barrier write barrier
swalloc根據條帶寬度的邊界調整數據分配
discard塊設備自動回收空間
dmapi使能Data Management API 事件
mtpt=mountpoint
inode64創建inode節點位置不收限制
inode32inode節點號不起過32位(為了兼容)
largeio大塊分配,(先swidth,后allocsize)
nolargeio盡量小塊分配
noalign數據分配時不用條帶大小對齊
noatime讀取文件時不更新訪問時間
norecovery掛載時不運行日志恢復(只讀掛載)
logbufs= 在內存中的日志緩存區數量
logbsize=內存中每個日志緩存區的大小
logdev=/rtdev=指定日志設備或實時設備(xfs文件系統可以分為三部分:數據,日志,實時(可選))
sysctls:/proc/sys/fs/xfs/
stats_clear: (Min: 0 Default: 0 Max: 1) 清除狀態信息(/proc/fs/sys/xfs/stat)
xfssyncd_centisecs:(Min: 100 Default: 3000 Max: 720000)xfssyncd 刷新元數據時間間隔(寫到磁盤,默認是30秒)
xfsbufd_centisecs:(Min: 50 Default: 100Max: 3000)xfsbufd掃瞄臟buffer的時間間隔
age_buffer_centisecs:(Min: 100 Default: 1500 Max: 720000)xfsbufd刷新臟buffer到磁盤的時間
irix_symlink_mode:(Min: 0 Default: 0 Max: 1)控制符號鏈接的模式是不是0777
inherit_nosymlinks:(Min: 0 Default: 1 Max: 1)xfs_io 下chattr 命令設置nosymlinks標志
inherit_sync: (Min: 0 Default: 1 Max: 1)xfs_io 下chattr 命令設置sync標志
inherit_nodump: (Min: 0 Default: 1 Max: 1)xfs_io 下chattr 命令設置nodump標志
inherit_noatime:(Min: 0 Default: 1 Max: 1)xfs_io 下chattr 命令設置noatime標志
rotorstep: (Min: 1 Default: 1 Max: 256)inode32模式下
error_level: (Min: 0 Default: 3 Max: 11)文件系統出錯時會顯示詳細信息
XFS_ERRLEVEL_OFF:0
XFS_ERRLEVEL_LOW:1
XFS_ERRLEVEL_HIGH:5
panic_mask:(Min: 0 Default: 0 Max: 127)遇到指定的錯誤時調用BUG()(調試時用)
XFS_NO_PTAG 0
XFS_PTAG_IFLUSH 0x00000001
XFS_PTAG_LOGRES 0x00000002
XFS_PTAG_AILDELETE 0x00000004
XFS_PTAG_ERROR_REPORT 0x00000008
XFS_PTAG_SHUTDOWN_CORRUPT 0x00000010
XFS_PTAG_SHUTDOWN_IOERROR 0x00000020
XFS_PTAG_SHUTDOWN_LOGERROR 0x00000040
XFS工具:
mkfs.xfs: 創建 xfs 文件系統
xfs_admin: 調整 xfs 文件系統的各種參數
xfs_copy: 拷貝 xfs 文件系統的內容到一個或多個目標系統(並行方式)
xfs_db: 調試或檢測 xfs 文件系統(查看文件系統碎片xfs_db -c frs -r /dev/sdh 等)
xfs_check: 檢測 xfs 文件系統的完整性
xfs_bmap: 查看一個文件的塊映射 --> xfs_io -r -p xfs_bmap -c bmap "OPT" file
xfs_repair: 嘗試修復受損的 xfs 文件系統 xfs_repair -n 僅報告問題,不修復
xfs_fsr: 碎片整理(xfs_fsr /dev/sdh)
xfs_quota: 管理 xfs 文件系統的磁盤配額
xfs_metadump: 將 xfs 文件系統的元數據 (metadata) 拷貝到一個文件中
xfs_mdrestore: 從一個文件中將元數據 (metadata) 恢復到 xfs 文件系統
xfsdump: 增量備份XFS文件系統
xfsrestore: 恢復XFS文件系統
xfs_growfs: 調整一個 xfs 文件系統大小(只能擴展)
xfs_freeze: 暫停(-f)和恢復(-u)xfs 文件系統
xfs_info: 查詢XFS文件系統信息
xfs_estimate: 評估XFS文件系統的空間
xfs_repair: 修復XFS文件系統
xfs_mkfile: 創建XFS文件系統
xfs_rtcp: XFS實時拷貝命令
xfs_ncheck: 從i節點號生成路徑
xfs_io: 調試XFS I/O路徑
xfs_logprint: 打印XFS文件系統日志
示例:
檢查文件系統:先確保umount
xfs_check /dev/sdd(盤符); echo $?
返回0表示正常
修復文件系統:
xfs_repair /dev/sdd (ext系列工具為fsck)
根據打印消息,修復失敗時:先執行 xfs_repair -L /dev/sdd( 清空日志,會丟失文件), 再執行 xfs_repair /dev/sdd, 再執行xfs_check /dev/sdd 檢查文件系統是否修復成功。
增大XFS文件系統:先用lvextend擴大XFS所在的LUN,
如: lvextend -L +5G /dev/mapper/lun5
xfs_growfs /demo (lun5在擴大之前已經格式化為XFS並掛載在/demo下 )
df -h 查看文件系統變化
案例:
mkfs.ext4 -E 擴展屬性 (以block為單位)
stride= 條帶單元大小
stripe_width= 條帶大小 (單位為block)
mount -o stripe= 條帶大小(單位為塊)
mkfs.xfs -d
sunit= 條帶單元大小(單位為扇區)
swidth= 條帶大小(單位為扇區)
mount -o sunit= swidth=
例如: 5個盤組成的raid5下創建的lun;chunk=64k;
此時格式化:
mkfs.ext4 -E stride=16(64K/4k block) lun設備
mount -o stripe=64(16*4個數據盤)
mkfs.xfs -d sunit=128 (64K/扇區) swidth=512 (128*4個數據盤)
mount -o sunit= swidth=
