在Oracle数据库的高可用存储架构中,ASM(自动存储管理)是常用的存储管理方案,而基于裸设备创建ASM磁盘是很多生产环境的首选配置方式,这种方式可以绕过操作系统的文件系统缓存,提升存储读写性能。

前置环境准备
首先确认服务器已经安装了Oracle ASM相关的软件包,同时当前用户拥有root权限或者sudo权限。需要提前确认待使用的裸设备已经挂载到服务器,比如/dev/sdb、/dev/sdc这类未分区的块设备,可以通过lsblk命令查看当前服务器的块设备列表。
# 查看当前块设备列表 lsblk
裸设备分区处理
如果裸设备没有进行分区,需要先使用fdisk或者parted工具进行分区,通常建议将整个裸设备划分为一个主分区即可。以下是以/dev/sdb为例的分区操作示例:
# 进入fdisk分区工具 fdisk /dev/sdb # 输入n创建新分区 # 输入p选择主分区 # 分区号默认1,起始扇区默认,结束扇区默认(使用全部空间) # 输入w保存分区表 # 刷新分区表 partprobe /dev/sdb
分区完成后会生成对应的分区设备,比如/dev/sdb1,这就是后续要配置为ASM磁盘的裸设备分区。
配置ASM磁盘权限
ASM实例需要能够读写裸设备分区,因此需要修改对应分区的权限和属主,通常将属主设置为oracle用户,属组设置为asmadmin组,权限设置为660。
# 修改/dev/sdb1的属主和属组 chown oracle:asmadmin /dev/sdb1 # 修改权限 chmod 660 /dev/sdb1
为了避免服务器重启后权限恢复,需要将权限配置添加到/etc/udev/rules.d/目录下对应的规则文件中,创建99-oracle-asm.rules文件,添加如下内容:
# 配置ASM磁盘权限规则 KERNEL=="sdb1", OWNER="oracle", GROUP="asmadmin", MODE="0660"
保存后执行udevadm trigger命令让规则生效。
创建ASM磁盘
使用Oracle提供的asmtool或者oracleasm工具来创建ASM磁盘,以下是通过oracleasm工具的操作流程:
# 初始化oracleasm oracleasm configure -i # 按照提示设置用户为oracle,组为asmadmin,其他选项默认即可 # 加载oracleasm模块 oracleasm init # 创建ASM磁盘,将/dev/sdb1标记为DATA1磁盘 oracleasm createdisk DATA1 /dev/sdb1 # 查看当前已创建的ASM磁盘列表 oracleasm listdisks
如果列表中出现DATA1,说明ASM磁盘创建成功。如果需要让其他节点也能发现该磁盘,可以在对应节点执行oracleasm scandisks命令扫描磁盘。
验证ASM磁盘可用性
登录到ASM实例,查询v$asm_disk视图确认磁盘已经被ASM识别:
-- 登录ASM实例 sqlplus / as sysasm -- 查询ASM磁盘信息 SELECT name, path, state FROM v$asm_disk;
如果查询结果显示DATA1磁盘的状态为NORMAL,说明该ASM磁盘已经可以正常用于存储分配。
注意事项
- 裸设备不要被操作系统挂载为文件系统,否则会导致ASM磁盘创建失败。
- 多节点环境中每个节点的udev规则和oracleasm配置需要保持一致。
- 创建ASM磁盘前务必确认裸设备中的数据已经备份,操作会清空裸设备上的原有数据。