参考:http://www.cnoug.org/viewthread.php?tid=40
我的Unix文件系统的Blocksize究竟多大呢?
所有Oracle的文档都说,Oracle的DB_BLOCK_SIZE应该是操作系统的Blocksize的整数倍。
但是Unix那么多,很多人都不知道他的Unix的文件系统的Blocksize是多大。
下面我们就依次来分析分析,不同Unix的文件系统的Blocksize分别是多少:
首先,我们都知道,文件系统的Block大小,是创建文件系统的时候指定的,一般Unix都会根据对应设备文件的大小,
给一个相应的Block大小。
一般这个Block大小,都是创建文件系统之后就无法更改的,就和Oracle的db_block_size一个德行。:D
Linux:
这是我们最容易可以接触到的Unix。我们拿Linux下面最常见的文件系统:Ext2来分析。
我们可以通过mkfs -t ext2 /dev/sdXN 来创建文件系统。
如果我们不指定文件系统的Block大小,Linux会根据设备文件的大小,自动选择适当的BLOCKSIZE。
如何指定Linux的文件系统的BlockSize呢?
mk2efs -B 8192 /dev/sdXN
那么,对于已经创建的文件系统,我们怎么检查当前文件系统的BlockSize呢?答案是用Tune2fs来检查:
请看:
[root@dwdb /]# tune2fs -l /dev/sda9
tune2fs 1.23, 15-Aug-2001 for EXT2 FS 0.5b, 95/08/09
Filesystem volume name: <none>
Last mounted on: <not available>
Filesystem UUID: 72e96995-fee0-4921-85f8-f9d5d2cad1f8
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
Filesystem features: filetype sparse_super large_file
Filesystem state: not clean
Errors behavior: Continue
Filesystem OS type: Linux
Inode count: 6082944
Block count: 12161197
Reserved block count: 608059
Free blocks: 2308319
Free inodes: 6081568
First block: 0
Block size: 4096
Fragment size: 4096
Blocks per group: 32768
Fragments per group: 32768
Inodes per group: 16352
Inode blocks per group: 511
Last mount time: Mon Nov 4 16:36:27 2002
Last write time: Mon Nov 4 16:57:33 2002
Mount count: 11
Maximum mount count: 37
Last checked: Sun Aug 18 21:10:08 2002
Check interval: 15552000 (6 months)
Next check after: Fri Feb 14 21:10:08 2003
Reserved blocks uid: 0 (user root)
Reserved blocks gid: 0 (group root)
First inode: 11
Inode size: 128
通过上面的结果,我们很容易就可以看到文件系统的Block大小就是4096.
在Solaris机器上,默认的Block大小是8K
我们如何指定Solaris文件系统的Block大小呢?
newfs -b 4096 /dev/c0txdxsx 里面的-b 来指定Block大小,覆盖默认的8K.
其实8k 是一个可以的数字,没有必要覆盖这个缺省参数。
那么我们如何检查当前已有文件系统的Block大小呢?
bash-2.05# fstyp -v /dev/rdsk/c0t2d0s0 |more
ufs
magic 11954 format dynamic time Mon Nov 4 17:46:05 2002
sblkno 16 cblkno 24 iblkno 28 dblkno 408
sbsize 2048 cgsize 4096 cgoffset 160 cgmask 0xfffffff0
ncg 697 size 17827200 blocks 17553949
bsize 4096 shift 12 mask 0xfffff000
fsize 1024 shift 10 mask 0xfffffc00
frag 4 shift 2 fsbtodb 1
minfree 1% maxbpg 1024 optim time
maxcontig 256 rotdelay 0ms rps 120
csaddr 408 cssize 11264 shift 8 mask 0xffffff00
ntrak 10 nsect 320 spc 3200 ncyl 11142
cpg 16 bpg 6400 fpg 25600 ipg 3040
nindir 1024 inopb 32 nspf 2
nbfree 4388485 ndir 2 nifree 2118876 nffree 4
cgrotor 0 fmod 0 ronly 0 logbno 0
我们可以看到,这个文件系统的Block大小是4K。
当然,最简单的还是
df -g:D
实际上,很多高端的Solaris机器,都配置了Veritas的文件系统,所以我们也有必要来研究一下Veritas的VXFS的一些情况。
vxfs 的默认的Block大小也是8K
同样,创建vxfs的文件系统,也是可以指定改文件系统的Block大小的:
# mkfs -F vxfs -o bsize=4096 /dev/vx/rdsk/edidg/test_vol
version 4 layout
10240 sectors, 1280 blocks of size 4096, log size 256 blocks
unlimited inodes, largefiles not supported
1280 data blocks, 992 free data blocks
1 allocation units of 32768 blocks, 32768 data blocks
last allocation unit has 1280 data blocks
我们检查现有文件系统的Block大小,也是使用fstyp 命令:
# fstyp -v /dev/vx/dsk/edidg/test_vol
vxfs
magic a501fcf5 version 4 ctime Mon Nov 4 18:06:42 2002
logstart 0 logend 0
bsize 4096 size 1280 dsize 1280 ninode 0 nau 0
defiextsize 0 ilbsize 0 immedlen 96 ndaddr 10
aufirst 0 emap 0 imap 0 iextop 0 istart 0
bstart 0 femap 0 fimap 0 fiextop 0 fistart 0 fbstart 0
nindir 2048 aulen 32768 auimlen 0 auemlen 2
auilen 0 aupad 0 aublocks 32768 maxtier 15
inopb 16 inopau 0 ndiripau 0 iaddrlen 2 bshift 12
inoshift 4 bmask fffff000 boffmask fff checksum e2cda323
oltext1 15 oltext2 518 oltsize 1 checksum2 31d
free 987 ifree 0
efree 1 1 2 0 1 2 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
HP Unix和Solaris的命令也是一样的,通过fstyp也可以检查到那个Block的大小啦。
在Newfs的时候,也可以指定Block的大小了。
#newfs -F hfs -f 8192 /dev/vg01/rlvol1
至于HP上面的vxfs ,和Solaris上的vxfs也是一码事情啦。
在AIX下面,默认的大小是4K。
在smit fs下面来创建文件系统的大小。
Tru64,偶就不知道了。
说了这么多,其实都没有什么意义。
我们创建数据库,一般很少会选择BlockSize小于8k的。
而几乎所有Unix文件系统的Blocksize,都不会默认大于8K.