XFS最大日志大小 – SW RAID 10(mdadm) – SLES 11 SP1

对于可以在XFS文件系统中设置的最大元数据日志大小,我有点困惑。 我在任何地方都能find相同的信息:最大尺寸为64K块或128M,以较小者为准。 对于标准的4K块大小,我有最大的元数据logsize = min(256M,128M)= 128M。 公平的,但是当我试图创build一个大于128M的元数据日志的文件系统,我没有得到任何的错误,这是由xfs_info命令的输出确认的:

ingrid:/home/engineer # mkfs.xfs -f -l size=1024m /dev/md0 meta-data=/dev/md0 isize=256 agcount=16, agsize=2359280 blks = sectsz=512 attr=2 data = bsize=4096 blocks=37748480, imaxpct=25 = sunit=16 swidth=64 blks naming =version 2 bsize=4096 ascii-ci=0 log =internal log bsize=4096 blocks=262144, version=2 = sectsz=512 sunit=16 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 

内部日志的版本2中是否有任何新function可以覆盖128M限制?

 ingrid:/home/engineer # uname -a Linux sles11-064-VM-esocl00-i1r0-mysql 2.6.32.19-0.3-default #1 SMP 2010-09-17 20:28:21 +0200 x86_64 x86_64 x86_64 GNU/Linux # rpm -qa | grep -i xfs xfsprogs-3.1.1-0.1.36 xfsdump-3.0.4-0.1.35 

非常感谢您给我的任何build议。

解决了。 我不得不通过mkfs.xfs的源代码。 首先我安装了:

  xfsprogs-3.1.1-0.1.36.src.rpm 

我们来看看/ usr / src / packages:

  #ls -ltr |  grep xfsprogs-3.1.1
 -rw -r  -  r-- 1 root root xfsprogs-3.1.1.tar.bz2 

解压和列表:

  #cd xfsprogs-3.1.1
 #ls
 aclocal.m4 configure db估计growfs io libxcmd logprint Makefile mkfs README rtcp
 config.guess configure.in debian fsck include libdisk libxfs ltmain.sh man po release.sh VERSION
 config.sub copy doc fsr install-sh libhandle libxlog m4 mdrestore配额修复 

我们对mkfs.xfs感兴趣,因此:

 # vi mkfs/xfs_mkfs.c void validate_log_size(__uint64_t logblocks, int blocklog, int min_logblocks) { if (logblocks < min_logblocks) { fprintf(stderr, _("log size %lld blocks too small, minimum size is %d blocks\n"), (long long)logblocks, min_logblocks); usage(); } if (logblocks > XFS_MAX_LOG_BLOCKS) { fprintf(stderr, _("log size %lld blocks too large, maximum size is %lld blocks\n"), (long long)logblocks, XFS_MAX_LOG_BLOCKS); usage(); } if ((logblocks << blocklog) > XFS_MAX_LOG_BYTES) { fprintf(stderr, _("log size %lld bytes too large, maximum size is %lld bytes\n"), (long long)(logblocks << blocklog), XFS_MAX_LOG_BYTES); usage(); } } 

元数据日志的限制由variablesXFS_MAX_LOG_BLOCKS和XFS_MAX_LOG_BYTES设置。 这些variables在include / xfs_fs.h中定义:

 #define XFS_MIN_AG_BLOCKS 64 #define XFS_MIN_LOG_BLOCKS 512ULL #define XFS_MAX_LOG_BLOCKS (1024 * 1024ULL) #define XFS_MIN_LOG_BYTES (10 * 1024 * 1024ULL) /* keep the maximum size under 2^31 by a small amount */ #define XFS_MAX_LOG_BYTES \ ((2 * 1024 * 1024 * 1024ULL) - XFS_MIN_LOG_BYTES) 

所以,对于这个版本的XFS我们有:

 XFS_MAX_LOG_BLOCKS = 1048576 <<< XFS_MIN_LOG_BYTES = 10485760 XFS_MAX_LOG_BYTES = (2*1024*1024*1024)-(10485760) = 2136997888 = 2038M <<<< 

使用4 KB的块大小(标准):

1048576 * 4096 = 4294967296 = 4096M

我认为日志的最大大小是XFS_MAX_LOG_BYTES和XFS_MAX_LOG_BLOCKS * block_size之间的最小值。 事实上:

  # mkfs.xfs -f -l size=2039m /dev/md0 log size 2138046464 bytes too large, maximum size is 2136997888 bytes Usage: mkfs.xfs /* blocksize */ [-b log=n|size=num] /* data subvol */ [-d agcount=n,agsize=n,file,name=xxx,size=num, (sunit=value,swidth=value|su=num,sw=num), sectlog=n|sectsize=num /* inode size */ [-i log=n|perblock=n|size=num,maxpct=n,attr=0|1|2] /* log subvol */ [-l agnum=n,internal,size=num,logdev=xxx,version=n sunit=value|su=num,sectlog=n|sectsize=num, lazy-count=0|1] /* label */ [-L label (maximum 12 characters)] /* naming */ [-n log=n|size=num,version=2|ci] /* prototype file */ [-p fname] /* quiet */ [-q] /* realtime subvol */ [-r extsize=num,size=num,rtdev=xxx] /* sectorsize */ [-s log=n|size=num] /* version */ [-V] devicename <devicename> is required unless -d name=xxx is given. <num> is xxx (bytes), xxxs (sectors), xxxb (fs blocks), xxxk (xxx KiB), xxxm (xxx MiB), xxxg (xxx GiB), xxxt (xxx TiB) or xxxp (xxx PiB). <value> is xxx (512 byte blocks). 

希望这可以帮助!