在AIX平台上创建LV时候,block size=4k,逻辑卷的第一个4K用于存储逻辑卷的信息,其余存储用户数据,所以将数据库数据文件从文件系统形式转化成裸设备的时候,需要跳过第一个4K,具体命令如下:
# dd if =/path/FS.dbf f=/dev/rlv_name bs=4k seek=1
但如果卷组中的多个PV进行条带化,oracle10g安装文档中,创建lv必须采用以下命令:
#mklv -y lv_name -T O -w n -s n -r n vgname PPs
其中 -T O 表示逻辑卷第一个4K可以直接存储用户数据,而不是存储逻辑卷信息,为什么需要这种设置呢?
通常我们数据库db_block_size=8K,意味着数据库的一个block占用逻辑卷的2个blocks( lv block size=4k),stripe size的大小无论设置多大,都有可能造成数据库的某个block跨两个不同的PV,例如两个PV盘的条带化是16K,创建32K的lv,则第一个16K位于PV1,第二个16K位于PV2,因为LV的第一个block size=4K是给系统用,则第一个PV1只剩下12K给数据库用,但数据库的db_block_size=8K,造成了数据库的第二个db block的前4K存储PV1,后面4k存储在PV2,其存在的风险是数据库强制关闭,可能造成数据块的损坏。如果db_block_size=4K就不存在上述问题。
同样的道理,如果一个lv跨多个PV(no stripe),在创建lv的时候,因为卷组中PP得大小是8K的整数倍,所以创建LV需要使用-T O参数,确保数据块不会分裂到两个PV中,而不采用-T O参数创建LV的时候,LV占用第一个PV的大小是先减去4K,所得值不能被8K整除,使得LV占用第一个PV上的空间,最后一个数据块前4K,在PV1,后面4K在第二个PV中,造成数据块的割裂。
我们一旦采用-T O参数时候,文件系统转化成裸设备命令要修改为:
# dd if =/path/FS.dbf f=/dev/rlv_name bs=4k
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/354732/viewspace-663950/
,如需转载,请注明出处,否则将追究法律责任。