udev绑定ASM磁盘组

博客介绍了在Linux系统中,udev和asmlib的作用,主要用于解决磁盘盘符变化导致ASM磁盘组无法正常挂载的问题。asmlib是Oracle在早期版本中提供的解决方案,而udev是通用的方法。在添加磁盘时,虚拟机需要设置disk.EnableUUID以获取UUID,通过udevadm工具查询硬盘信息,并创建规则文件进行设备绑定。

asmlib:
asmlib 是linux上面给磁盘/分区头上面打上asm的标记,供asm使用,而且当磁盘的盘符发生改变的时候,不会影响到asm disk,

从效果上说,和udev没有本质区别,在redhat 4和5中oracle提供asmlib程序,在6中,oracle只为oel提供,其他linux不再提供

udev:
udev 是为了防止在机器因为重启的时候,因为盘符发生改变,导致asm disk不能正常被dg应用,从而出现asm 磁盘组不能mount的故障

添加磁盘:
如果是虚拟机,要编辑vmx文件加入disk.EnableUUID =“TRUE” 否则无法查到磁盘的uuid,也就无法在配置文件中绑定。

进行分区:

fdisk /dev/sdb
[root@temple rules.d]# fdisk -l
 
Disk /dev/sda: 42.9 GB, 42949672960 bytes
255 heads, 63 sectors/track, 5221 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000023cd
 
   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          64      512000   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2              64        5222    41430016   8e  Linux LVM
 
Disk /dev/sdb: 8589 MB, 8589934592 bytes
255 heads, 63 sectors/track, 1044 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x383bd4c4
 
   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1        1044     8385898+  83  Linux


以上为磁盘信息。

方法一:

udevadm info -a -p /sys/block/sdb/sdb1查询硬盘信息

[root@temple rules.d]# udevadm info -a -p /sys/block/sdb/sdb1
 
Udevadm info starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.
 
  looking at device '/devices/pci0000:00/0000:00:0d.0/host1/target1:0:0/1:0:0:0/block/sdb/sdb1':
    KERNEL=="sdb1"
    SUBSYSTEM=="block"
    DRIVER==""
    ATTR{partition}=="1"
    ATTR{start}=="63"
    ATTR{size}=="16771797"
    ATTR{alignment_offset}=="0"
    ATTR{discard_alignment}=="0"
    ATTR{stat}=="     791    72121    73402      532        0        0        0        0        0      343      494"
    ATTR{inflight}=="       0        0"
 
  looking at parent device '/devices/pci0000:00/0000:00:0d.0/host1/target1:0:0/1:0:0:0/block/sdb':
    KERNELS=="sdb"
    SUBSYSTEMS=="block"
    DRIVERS==""
    ATTRS{range}=="16"
    ATTRS{ext_range}=="256"
    ATTRS{removable}=="0"
    ATTRS{ro}=="0"
    ATTRS{size}=="16777216"
    ATTRS{alignment_offset}=="0"
    ATTRS{discard_alignment}=="0"
    ATTRS{capability}=="52"
    ATTRS{stat}=="    1510    72178    79610      684        4        0        8      103        0      589      740"
    ATTRS{inflight}=="       0        0"
 
  looking at parent device '/devices/pci0000:00/0000:00:0d.0/host1/target1:0:0/1:0:0:0':
    KERNELS=="1:0:0:0"
    SUBSYSTEMS=="scsi"
    DRIVERS=="sd"
    ATTRS{device_blocked}=="0"
    ATTRS{type}=="0"
    ATTRS{scsi_level}=="6"
    ATTRS{vendor}=="ATA     "
    ATTRS{model}=="VBOX HARDDISK   "
    ATTRS{rev}=="1.0 "
    ATTRS{state}=="running"
    ATTRS{timeout}=="30"
    ATTRS{iocounterbits}=="32"
    ATTRS{iorequest_cnt}=="0x634"
    ATTRS{iodone_cnt}=="0x633"
    ATTRS{ioerr_cnt}=="0x9"
    ATTRS{modalias}=="scsi:t-0x00"
    ATTRS{evt_media_change}=="0"
    ATTRS{dh_state}=="detached"
    ATTRS{queue_depth}=="31"
    ATTRS{queue_ramp_up_period}=="120000"
    ATTRS{queue_type}=="simple"
 
  looking at parent device '/devices/pci0000:00/0000:00:0d.0/host1/target1:0:0':
    KERNELS=="target1:0:0"
    SUBSYSTEMS=="scsi"
    DRIVERS==""
 
  looking at parent device '/devices/pci0000:00/0000:00:0d.0/host1':
    KERNELS=="host1"
    SUBSYSTEMS=="scsi"
    DRIVERS==""
 
  looking at parent device '/devices/pci0000:00/0000:00:0d.0':
    KERNELS=="0000:00:0d.0"
    SUBSYSTEMS=="pci"
    DRIVERS=="ahci"
    ATTRS{vendor}=="0x8086"
    ATTRS{device}=="0x2829"
    ATTRS{subsystem_vendor}=="0x0000"
    ATTRS{subsystem_device}=="0x0000"
    ATTRS{class}=="0x010601"
    ATTRS{irq}=="21"
    ATTRS{local_cpus}=="3"
    ATTRS{local_cpulist}=="0-1"
    ATTRS{modalias}=="pci:v00008086d00002829sv00000000sd00000000bc01sc06i01"
    ATTRS{numa_node}=="-1"
    ATTRS{enable}=="1"
    ATTRS{broken_parity_status}=="0"
    ATTRS{msi_bus}==""
 
  looking at parent device '/devices/pci0000:00':
    KERNELS=="pci0000:00"
    SUBSYSTEMS==""
    DRIVERS==""

我们使用ATTR{start}=="63"  ATTR{size}=="16771797"来唯一标识这个设备 

绑定规则如下:

[root@temple rules.d]# pwd
/etc/udev/rules.d
[root@temple rules.d]# cat 99-oracle-asmdevices.rules 
KERNEL=="sdb1", SUBSYSTEM=="block", ATTR{start}=="63", ATTR{size}=="16771797", NAME="asmdisk1", OWNER="oracle", GROUP="oinstall", MODE="0660"


然后启动udev:

[root@temple rules.d]# cat 99-oracle-asmdevices.rules 
KERNEL=="sdb1", SUBSYSTEM=="block", ATTR{start}=="63", ATTR{size}=="16771797", NAME="asmdisk1", OWNER="oracle", GROUP="oinstall", MODE="0660"
[root@temple rules.d]# start_udev 
Starting udev:                                             [  OK  ]
[root@temple rules.d]# cd /dev
[root@temple dev]# pwd
/dev
[root@temple dev]# ll asmdisk1 
brw-rw----. 1 oracle oinstall 8, 17 Aug  4 20:18 asmdisk1

方法二:

[root@localhost /]# cd /etc/udev/rules.d

编辑udev配置文件:
[root@localhost rules.d]# vim 99-oracle-asmdisk.rules

KERNEL==“sdb1”(分好区的磁盘名), BUS==“scsi(磁盘接口类型)”, PROGRAM=="/sbin/scsi_id -g -u -d /dev/$parent", RESULT==“36000c291b2a2f86ca4eceb8f69083831”(磁盘uuid,通过scsi_id -g -u -d /dev/你的磁盘名)来查看), NAME=“asm_disk1”, OWNER=“grid”, GROUP=“asmadmin”, MODE=“0660”

KERNEL==“sdc1”, BUS==“scsi”, PROGRAM=="/sbin/scsi_id -g -u -d /dev/$parent", RESULT==“36000c29d47431e361164bc230529e4a6”, NAME=“asm_disk2”, OWNER=“grid”, GROUP=“asmadmin”, MODE=“0660”

KERNEL==“sdd1”, BUS==“scsi”, PROGRAM=="/sbin/scsi_id -g -u -d /dev/$parent", RESULT==“36000c29045413234891cb68a5e393ed4”, NAME=“asm_disk3”, OWNER=“grid”, GROUP=“asmadmin”, MODE=“0660”

KERNEL==“sde1”, BUS==“scsi”, PROGRAM=="/sbin/scsi_id -g -u -d /dev/$parent", RESULT==“36000c2963321f68b04e90f8b80fe3530”, NAME=“asm_disk4”, OWNER=“grid”, GROUP=“asmadmin”, MODE=“0660”

KERNEL==“sdf1”, BUS==“scsi”, PROGRAM=="/sbin/scsi_id -g -u -d /dev/$parent", RESULT==“36000c29e8704480918568ec80e9270c3”, NAME=“asm_disk5”, OWNER=“grid”, GROUP=“asmadmin”, MODE=“0660”

[root@localhost rules.d]# udevadm control --reload-rules
加载

[root@localhost rules.d]# start_udev
启动

[root@localhost rules.d]# ls -l /dev/asm*
brw-rw----. 1 grid asmadmin 8, 17 Mar 4 08:43 /dev/asm_disk1
brw-rw----. 1 grid asmadmin 8, 33 Mar 4 08:43 /dev/asm_disk2
brw-rw----. 1 grid asmadmin 8, 49 Mar 4 08:43 /dev/asm_disk3
brw-rw----. 1 grid asmadmin 8, 65 Mar 4 08:43 /dev/asm_disk4
brw-rw----. 1 grid asmadmin 8, 81 Mar 4 08:43 /dev/asm_disk5
确认添加成功

 

<think>我们正在处理一个关于OracleASM磁盘组重建的问题。用户提到原ASM磁盘组所挂载的存储损坏,现在有新挂载的存储,想要重建ASM磁盘组。根据OracleASM的特性,磁盘组是由多个磁盘组成的逻辑单元,用于存储数据库文件。当存储损坏时,我们需要使用新的存储来重新创建磁盘组,并恢复数据。但是,请注意:ASM磁盘组本身并不存储数据文件的元数据(如数据文件、控制文件等的位置和结构),这些信息存储在数据库的控制文件和参数文件中。因此,重建磁盘组后,我们还需要恢复数据库文件。步骤大致如下:1.确保新存储已经正确挂载到服务器上,并且操作系统可以识别这些磁盘。2.使用OracleASM工具(如asmca或sqlplus)创建新的磁盘组,将新存储的磁盘加入该磁盘组。3.如果有备份(如RMAN备份),则使用RMAN恢复数据库到新的磁盘组上。如果没有备份,但原磁盘组中的文件有镜像(如使用NORMAL或HIGH冗余),则可以通过重新挂载磁盘组来恢复,但这里原存储已损坏,所以只能从备份恢复。然而,用户的问题中并没有提到有备份,所以我们需要考虑如果没有备份怎么办?实际上,如果没有备份,原存储损坏且没有冗余,那么数据可能丢失。因此,重建磁盘组后,如果没有备份,我们无法恢复数据。但是,用户的问题集中在如何用新存储重建磁盘组,所以我们先回答这部分。具体步骤:1.检查新挂载的磁盘是否被操作系统识别。可以使用`fdisk-l`(Linux)或`format`(Solaris)等命令查看。2.为这些磁盘配置ASM磁盘。通常有两种方式:使用ASMLib或直接使用裸设备(或者使用udev规则绑定)。现在推荐使用udev规则来绑定磁盘并设置正确的权限。-例如,在Linux上,我们可以通过udev规则为磁盘设置固定的权限和所有者。参考引用[2]中的方法,确保磁盘的UUID被正确识别,并设置udev规则。-创建udev规则文件(如`/etc/udev/rules.d/99-oracle-asmdevices.rules`),内容示例:```KERNEL=="sd*",SUBSYSTEM=="block",PROGRAM="/sbin/scsi_id-g-u-d/dev/$name",RESULT=="<磁盘的SCSI_ID>",SYMLINK+="oracleasm/disk1",OWNER="grid",GROUP="asmadmin",MODE="0660"```需要为每块磁盘执行,并替换SCSI_ID(通过命令`/sbin/scsi_id-g-u-d/dev/sdX`获取)。3.重新加载udev规则:```udevadmcontrol--reload-rulesudevadmtrigger--type=devices--action=change```4.确认磁盘权限正确,并且`/dev/oracleasm/*`下的磁盘链接已创建(或者直接使用/dev/下由udev规则设置的设备)。5.以grid用户(OracleGridInfrastructure用户)登录,使用asmca图形工具或命令行工具(asmcmd或sqlplus)创建新的磁盘组。-命令行创建示例(在sqlplus中连接到ASM实例):```sqlCREATEDISKGROUPnew_dgEXTERNALREDUNDANCYDISK'/dev/oracleasm/disk1','/dev/oracleasm/disk2';```这里假设使用外部冗余(即无镜像),如果有多个磁盘且需要冗余,可以选择NORMAL或HIGH冗余,并指定故障组(参考引用[1]中关于故障组的设置)。6.创建磁盘组后,需要将数据库恢复到这个新的磁盘组上。这通常需要:-如果数据库的控制文件还在(比如控制文件有多个副本,其中一个在未损坏的存储上),那么可以启动数据库到mount状态,然后使用RMAN进行恢复。-如果没有可用的控制文件,则需要使用RMAN的恢复目录或控制文件自动备份来恢复控制文件,然后再恢复数据库。由于用户的问题主要是重建磁盘组,所以我们先完成磁盘组的重建步骤。相关问题:1.如何为新挂载的存储配置ASM磁盘?2.在创建新的ASM磁盘组时,如何选择冗余级别和故障组?3.重建ASM磁盘组后,如何恢复Oracle数据库?4.如果没有备份,原存储损坏后还有哪些数据恢复方法?5.如何验证新创建的ASM磁盘组是否正常工作?请注意,如果没有备份,且原存储完全损坏,数据恢复将非常困难。因此,强烈建议用户定期备份。下面,我们将按照用户要求的结构化方式回答,并生成相关问题。</think>### ASM磁盘组重建步骤 当原ASM磁盘组存储损坏后,需通过以下步骤使用新存储重建磁盘组并恢复数据: #### **1. 验证新存储设备** - **操作系统识别**:确认新存储已挂载且操作系统可识别(如Linux执行 `lsblk` 或 `fdisk -l`)。 - **获取磁盘标识符**: 使用 `scsi_id` 命令获取磁盘唯一UUID(确保 `disk.EnableUUID="TRUE"`[^2]): ```bash for i in $(ls /dev/sd* | grep -E 'sd[b-z]$'); do echo "Disk $i: $(/sbin/scsi_id -g -u -d $i)"; done ``` 输出示例: ```text Disk /dev/sdb: 36000c29ff0363b8ebda7309f6f26c8c3 Disk /dev/sdc: 36000c29811ad6d1353dd6df390513d3f ``` #### **2. 配置ASM磁盘** - **创建UDEV规则**(确保权限正确): 编辑 `/etc/udev/rules.d/99-oracle-asm.rules`,添加: ```bash KERNEL=="sd*", ENV{ID_SERIAL}=="36000c29ff0363b8ebda7309f6f26c8c3", SYMLINK+="oracleasm/disk01", OWNER="grid", GROUP="asmadmin", MODE="0660" ``` - **生效配置**: ```bash udevadm control --reload-rules udevadm trigger --type=devices --action=change ``` #### **3. 创建新ASM磁盘组** - **连接到ASM实例**: ```sql sqlplus / as sysasm ``` - **创建磁盘组**(按需选择冗余级别): ```sql CREATE DISKGROUP NEW_DG EXTERNAL REDUNDANCY -- 外部冗余 DISK '/dev/oracleasm/disk01', '/dev/oracleasm/disk02'; -- 或指定故障组(引用[1]语法): CREATE DISKGROUP NEW_DG NORMAL REDUNDANCY FAILGROUP FG1 DISK '/dev/oracleasm/disk01', FAILGROUP FG2 DISK '/dev/oracleasm/disk02'; ``` #### **4. 恢复数据库到新磁盘组** - **RMAN恢复**(需有效备份): ```sql RMAN> RESTORE CONTROLFILE FROM AUTOBACKUP; RMAN> RESTORE DATABASE; RMAN> RECOVER DATABASE; ``` - **修改参数文件**: 更新 `DB_CREATE_FILE_DEST` 指向新磁盘组: ```sql ALTER SYSTEM SET DB_CREATE_FILE_DEST = '+NEW_DG' SCOPE=SPFILE; ``` #### **关键注意事项** 1. **数据恢复依赖备份**:若原存储无冗余且无备份,数据将丢失。 2. **冗余策略选择**: - `EXTERNAL`:依赖存储自身冗余(如RAID)。 - `NORMAL`:ASM提供镜像(需至少2个故障组)。 - `HIGH`:三路镜像(需至少3个故障组)。 3. **故障组配置**:确保故障组对应物理隔离的存储设备[^1]。 --- ### 相关问题 1. ASM磁盘组如何配置多路径存储以提高可用性? 2. 无备份情况下,ASM磁盘组损坏后有哪些应急恢复方案? 3. 如何验证ASM磁盘组的冗余策略是否生效? 4. ASM磁盘组扩容时如何平衡数据分布? [^1]: Set the parameter where diskgroup is the name of the disk group and failuregroup is the name of the failure group, separating these variables with a period. Oracle ASM ignores the name of a failure group that you use in this parameter setting if the failure group does not exist in the named disk group. [^2]: 检查Vmware虚拟机配置文件xxx.vmx,确认EnableUUID是否为TRUE。执行`lsblk`命令查看挂载的硬盘,确认是否识别到UUID号。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值