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=