一、环境
原oracle 11gR2 RAC,asm磁盘时间久远需要更换,一下是更换磁盘的相关操作,当然,如果扩容也是同样的操作,只是不需要再平衡之后删除磁盘组里的磁盘而已。
二、查看盘符信息
备注:安全起见,操作之前停数据库实例、ASM实例
1、确定磁盘信息
首先确认划分的盘符为:
查看挂载磁盘信息并确认:hw-disk1,hw-disk2,hw-disk3,hw-disk4,hw-disk5
使用命令:fdisk -l
明确是被及链路正常。
这说明,已由两条链路sds / sdx复合成一条链路,设备名为hw-disk1。
使用命令:multipath –ll
hw-disk1 (36e8681910065f3a6b497f099000000a5) dm-20 HUAWEI,XSG1 size=1.5T features='0' hwhandler='0' wp=rw |-+- policy='round-robin 0' prio=1 status=active | `- 0:0:1:2 sds 65:32 active ready running `-+- policy='round-robin 0' prio=1 status=enabled `- 1:0:1:2 sdx 65:112 active ready running hw-disk2 (36e8681910065f3a6b4980160000000a6) dm-19 HUAWEI,XSG1 size=3.0G features='0' hwhandler='0' wp=rw |-+- policy='round-robin 0' prio=1 status=active | `- 0:0:1:3 sdt 65:48 active ready running `-+- policy='round-robin 0' prio=1 status=enabled `- 1:0:1:3 sdy 65:128 active ready running hw-disk3 (36e8681910065f3a6b4982e7d000000a7) dm-17 HUAWEI,XSG1 size=3.0G features='0' hwhandler='0' wp=rw |-+- policy='round-robin 0' prio=1 status=active | `- 0:0:1:4 sdu 65:64 active ready running `-+- policy='round-robin 0' prio=1 status=enabled `- 1:0:1:4 sdz 65:144 active ready running hw-disk4 (36e8681910065f3a6b4983dc7000000a8) dm-22 HUAWEI,XSG1 size=3.0G features='0' hwhandler='0' wp=rw |-+- policy='round-robin 0' prio=1 status=active | `- 0:0:1:5 sdv 65:80 active ready running `-+- policy='round-robin 0' prio=1 status=enabled `- 1:0:1:5 sdaa 65:160 active ready running hw-disk5 (36e8681910065f3a6b4979ad8000000a3) dm-21 HUAWEI,XSG1 size=750G features='0' hwhandler='0' wp=rw |-+- policy='round-robin 0' prio=1 status=active | `- 0:0:1:1 sdr 65:16 active ready running `-+- policy='round-robin 0' prio=1 status=enabled `- 1:0:1:1 sdw 65:96 active ready running |
根据/dev/mapper/mpathn 是multipath虚拟出来的多路径设备,我们应该使用这个设备;
确定挂载盘符为:hw-disk1,hw-disk2,hw-disk3,hw-disk4,hw-disk5
/dev/mapper/mpathn 是multipath虚拟出来的多路径设备,我们应该使用这个设备; /dev/mpath/mpathn 是udev设备管理器创建的,实际上就是指向下面的dm-n设备,仅为了方便,不能用来挂载; /dev/dm-n 是软件内部自身使用的,不能被软件以外使用,不可挂载。 简单来说,就是我们应该使用/dev/mapper/下的设备符。对该设备即可用fdisk进行分区,或创建为pv。 |
三、磁盘分区及挂载
使用root用户操作
1、创建新的磁盘分区
[root@qasdbb ~]# fdisk /dev/mapper/hw-disk1 //进入磁盘
1)选择分区号,linux基本分区和扩展分区之和不能大于4,所以在1-4直接选择,一般是从大到小按编号选:输入命令n,然后输入1。
2)输入命令t,然后输入分区类型,输入8e表示虚拟逻辑卷分区,后期硬盘分区空间不足可以在线扩容。
3)输入命令w,重写分区表。
[root@qasdbb ~]# fdisk /dev/mapper/hw-disk1 Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel Building a new DOS disklabel with disk identifier 0x1ca8d9fd. Changes will remain in memory only, until you decide to write them. After that, of course, the previous content won't be recoverable. Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite) WARNING: DOS-compatible mode is deprecated. It's strongly recommended to switch off the mode (command 'c') and change display units to sectors (command 'u'). Command (m for help): u Changing display/entry units to sectors Command action e extended p primary partition (1-4) p Partition number (1-4): 1 First sector (63-3221225471, default 63): 2048 Last sector, +sectors or +size{K,M,G} (2048-3221225471, default 3221225471): Using default value 3221225471 Command (m for help): t Selected partition 1 Hex code (type L to list codes): 8e Changed system type of partition 1 to 8e (Linux LVM) Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. WARNING: Re-reading the partition table failed with error 22: Invalid argument. The kernel still uses the old table. The new table will be used at the next reboot or after you run partprobe(8) or kpartx(8) Syncing disks. |
2、查看创建的分区
1)使用fdisk –l查看创建的分区,有时候会看不到创建的新分区,此时使用fdisk命令看不到新建的分区信息。
2)partprobe 是一个可以修改kernel中分区表的工具,可以使kernel重新读取分区表而不用重启系统。命令:partprobe /dev/mapper/hw-disk1
[root@qasdbb ~]# partprobe /dev/mapper/hw-disk1 |
数据库使用的到此结束,后期需要转为oracleASM可识别的。
下面操作的是hw-disk5的750G的盘,供系统使用,129和130都有
接着上述操作继续进行
3、 格式化分区
假设通过上述步骤所创建的新分区为/dev/mapper/hw-disk1p1, 可以通过下面命令将其格式化为ext4文件系统格式:,其他所需磁盘,相同的操作即可:
使用命令:mkfs.ext4 /dev/mapper/hw-disk1p1 //格式化逻辑卷
[root@qasdbb dev]# mkfs.ext4 /dev/mapper/hw-disk1p1
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
49152000 inodes, 196606976 blocks
9830348 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4294967296
6000 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
102400000
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 36 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
4、创建asm磁盘信息:
/etc/init.d/oracleasm createdisk ASMDISK01 /dev/mapper/hw-disk1p1
/etc/init.d/oracleasm createdisk OCR_VOTE01 /dev/mapper/hw-disk2p1
/etc/init.d/oracleasm createdisk OCR_VOTEB02 /dev/mapper/hw-disk3p1
/etc/init.d/oracleasm createdisk OCR_VOTEB03 /dev/mapper/hw-disk4p1
/etc/init.d/oracleasm scandisks //很重要
5、向ASM磁盘组中加盘(grid用户的sysasm)
SQL> select GROUP_NUMBER,DISK_NUMBER, MODE_STATUS,HEADER_STATUS, MODE_STATUS,state,TOTAL_MB,FREE_MB,name,PATH from v$asm_disk;
SQL> alter diskgroup data_dg add disk '/dev/oracleasm/disks/ASMDISK01 ';
SQL> select GROUP_NUMBER,DISK_NUMBER, MODE_STATUS,HEADER_STATUS,MODE_STATUS,state,TOTAL_MB,FREE_MB,name,PATH from v$asm_disk;
添加完磁盘之后,oracle会自动做重平衡rebalance操作,可以通过视图查看
SQL> select * from v$asm_operation;
SOFAR:就是目前为止挪动的AU数量
EST_WORK:估计要挪动的AU数量
EST_RATE:估计每分钟挪动的AU数量
EST_MINUTES:估计挪动多少分钟
重平衡的过程就是从其他的磁盘向新磁盘挪动数据的过程,如果数据量很大,这个时间会很长,可以更改power值加快速度,默认power值为1,可根据存储性能将此值设置大一些(power取值0-11),数据平衡完毕复原power值即可
SQL> show parameter asm_power_limit; SQL> alter diskgroup datadg rebalance power 11; |
注:power=0是停止rebalance操作
也可在加盘时直接添加rebalance指令,如下:
SQL> alter diskgroup datadg add disk '/dev/asm-diskh' rebalance power 8;
注:如添加磁盘报错(新增磁盘不为全新盘,有旧数据在里头),可使用dd命令将磁盘头信息清除掉
dd if=/dev/oracleasm/disks/ASMDISKA2 of=/app/backup_asm_haeder_ASMDISKA2 bs=1024 count=1000;
dd if=/dev/oracleasm/disks/ASMDISKA1 of=/app/backup_asm_haeder_ASMDISKA1 bs=1024 count=1000;
dd if=/dev/oracleasm/disks/ASMDISKA3 of=/app/backup_asm_haeder_ASMDISKA3 bs=1024 count=1000;
dd if=/dev/oracleasm/disks/ASMCDP1 of=/app/backup_asm_haeder_ASMCDP1 bs=1024 count=1000;
dd if=/dev/oracleasm/disks/ASMCDP2 of=/app/backup_asm_haeder_ASMCDP2 bs=1024 count=1000;
//上述操作是备份复制数据
dd if=/dev/zero of=/dev/oracleasm/disks/ASMDISKA1 bs=1024 count=1000;
dd if=/dev/zero of=/dev/oracleasm/disks/ASMDISKA2 bs=1024 count=1000;
dd if=/dev/zero of=/dev/oracleasm/disks/ASMDISKA3 bs=1024 count=1000;
dd if=/dev/zero of=/dev/oracleasm/disks/ASMCDP1 bs=1024 count=1000;
dd if=/dev/zero of=/dev/oracleasm/disks/ASMCDP2 bs=1024 count=1000;
dd if=/dev/zero of=/dev/oracleasm/disks/ASMCDP3 bs=1024 count=1000;
//上述操作是用空字节覆盖文件的前1024个字节
6、删除原磁盘
SQL> select GROUP_NUMBER,DISK_NUMBER, MODE_STATUS,HEADER_STATUS, MODE_STATUS,state,TOTAL_MB,FREE_MB,name,PATH from v$asm_disk;
SQL> alter diskgroup data_dg drop disk 'DATA_DG_0002' rebalance power 8; --按照name来删除
SQL> select * from v$asm_operation;
SQL> select GROUP_NUMBER,DISK_NUMBER, MODE_STATUS,HEADER_STATUS, MODE_STATUS,state,TOTAL_MB,FREE_MB,name,PATH from v$asm_disk;