shell脚本案例:RAC多路径-配置ASM磁盘设备权限

使用场景

在RAC多路径配置完成后,需要更改ASM磁盘设备的权限。这个步骤主要分为获取ASM逻辑设备的dm_uuid、配置/etc/udev/rules.d/99-oracle-asmdevices.rules文件、重新加载udev策略并激活策略。这个过程手动去做耗时耗力易出错,所以针对这个情况专门写了个脚本。

Linux版本

脚本代码

bash 复制代码
#!/bin/bash
RED='\033[0;31m'
GREEN='\033[0;32m'
NOCOLOR='\033[0m'


#配置前的asm设备权限
echo "配置前的asm设备权限"
printf "$RED%s %s\n" "`ls -lsa /dev/dm*`"
echo "                            "


#组的创建
echo -e  "\e[32m************************ \e[0m"
echo -e  "\e[32m组信息\e[0m"
echo -e  "\e[32m************************ \e[0m"

group=(oinstall dba oper asmadmin asmdba asmoper)
for i in "${group[@]}"
do
grep "^$i" /etc/group >& /dev/null
  if [ $? != 0 ];
         then
                 if [ $i = "oinstall" ];
                        then  groupadd -g 5001 oinstall; echo "oinstal组已添加"
                 elif [ $i = "dba" ];
                        then groupadd -g 5002 dba; echo "dba组已添加"
                 elif [ $i = "oper" ];
                        then groupadd -g 5003 oper; echo "oper组已添加"
                 elif [ $i = "asmadmin" ];
                        then groupadd -g 5004 asmadmin; echo "asmadmin组已添加"
                 elif [ $i = "asmoper" ];
                        then groupadd -g 5005 asmoper; echo "asmoper组已添加"
                 elif [ $i = "asmdba" ];
                        then groupadd -g 5006 asmdba; echo "asmdba组已添加"
                 fi
          else
              echo "$i组已存在"
        fi
done

#用户的创建
echo -e  "\e[32m************************ \e[0m"
echo -e  "\e[32m用户信息\e[0m"
echo -e  "\e[32m************************ \e[0m"



user=(grid oracle)
for i in "${user[@]}"
do
  grep "^$i" /etc/passwd >& /dev/null
  if [ $? != 0 ];
    then
            if [ $i = grid ]
                  then useradd -u 6002 -g oinstall -G asmadmin,asmdba,asmoper,oper,dba grid ;  echo grid | passwd --stdin grid ; echo "grid用户已添加"
                elif  [ $i = oracle ]
                  then useradd -u 6001 -g oinstall -G dba,asmdba,oper oracle; echo oracle | passwd --stdin oracle; echo "oracle用户已添加"
                fi
        else
                echo "$i用户已存在"
  fi
done

#提前清空规则配置文件
echo '' > /etc/udev/rules.d/99-oracle-asmdevices.rules


#配置asm设备规则文件
for i in `dmsetup ls |grep asm |awk '{print $1}'`
do
   for v in `udevadm info --query=all --name=/dev/mapper/$i |grep -i dm_uuid |awk -F"=" '{print $2}'`
   do
    echo KERNEL==\"dm-*\",ENV{DM_UUID}==\"$v\",OWNER=\"grid\",GROUP=\"asmadmin\",MODE=\"0060\" >> /etc/udev/rules.d/temp.rules
   done
done

#清除文件中的空白行
awk NF /etc/udev/rules.d/temp.rules > /etc/udev/rules.d/99-oracle-asmdevices.rules

#删除临时文件
rm -rf /etc/udev/rules.d/temp.rules

#重载激活规则文件
echo "                            "
echo -e  "\e[32m重载配置文件\e[0m"
/sbin/udevadm control --reload-rules
echo "                            "
echo -e  "\e[32m激活配置文件\e[0m"
/sbin/udevadm trigger --type=devices --action=change
echo "                            "

sleep 5
#配置后的设备权限
echo "配置后的设备权限"
printf "$GREEN%s %s\n" "`ls -lsa /dev/dm*`"
printf "$NOCOLOR%s %s\n" "*************任务完成**************"

执行效果

相关推荐
H_oRIZoN_10 分钟前
Linux入门DAY42【51 单片机】DS18B20 数字温度传感器完整解析(单总线原理 + 时序 + 读取流程)
linux·单片机·linux应用编程
j7~13 分钟前
【Linux网络加餐】(篇六)网络版计算器(上):模板方法模式、序列化与 JSON
linux·c++·json·序列化·反序列化·网络版计算机
流浪00138 分钟前
Linux系统篇34——信号(六):信号处理期间又来了怎么办?——sigaction、sa_mask、可重入函数与 volatile
linux·运维·面试·操作系统·信号处理·信号
学烹饪的小胡桃1 小时前
资产设备管理系统 WGFIX 怎么设置https访问
linux·运维·服务器·网络·安全
邪修king1 小时前
Re:Linux系统篇(二十六):文件系统(二):Ext 文件系统底层详解:从 inode、块组到软硬链接,结合 Windows 讲透文件管理本质
android·java·linux
Leon-Ning Liu2 小时前
Oracle 19c ASMB 进程 PGA 内存泄漏排查实战 (Bug 38610635)
数据库·oracle
步行cgn2 小时前
Spring 注入 null 和空字符串详解
数据库·spring·oracle
高亦真2 小时前
今天是学习嵌入式的第38天
linux·学习·算法
DYWorker0012 小时前
Linux驱动子系统:中断子系统 —— Consumer和Provider(005)
linux·驱动开发
草莓熊Lotso2 小时前
【Redis 进阶】主从复制深度解析:从配置落地到 PSYNC 同步原理
linux·开发语言·网络·数据库·redis·缓存·php