暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

RHEL7 – 通过UDEV的方式配置RAW设备:BASH: START_UDEV: COMMAND NOT FOUND

原创 喻一桓 2021-06-25
4397

在以前,部署Oracle RAC的时候,会涉及到RAW的共享存储的配置,具体可以查阅:
http://d-prototype.com/archives/513
检索【为raw配置udev策略】

可以从中看到,在过去写好了UDEV策略之后,为了让UDEV的策略生效,使用的方式是:start_udev

[root@11g-node1 ~]# cat /etc/udev/rules.d/60-raw.rules 
# Enter raw device bindings here.
#
# An example would be:
#   ACTION=="add", KERNEL=="sda", RUN+="/bin/raw /dev/raw/raw1 %N"
# to bind /dev/raw/raw1 to /dev/sda, or
#   ACTION=="add", ENV{MAJOR}=="8", ENV{MINOR}=="1", RUN+="/bin/raw /dev/raw/raw2 %M %m"
# to bind /dev/raw/raw2 to the device with major 8, minor 1.
 
# for Oracle database 11g RAC
KERNEL=="raw*",OWNER="grid",GROUP="asmadmin",MODE="0660"
 
#-----------------------
[root@11g-node1 ~]# 
[root@11g-node1 ~]# ll /dev/raw
total 0
crw------- 1 root root 162, 1 Aug  2 22:50 raw1
crw------- 1 root root 162, 2 Aug  2 22:50 raw2
[root@11g-node1 ~]# 
[root@11g-node1 ~]# start_udev 
Starting udev:                                             [  OK  ]
[root@11g-node1 ~]# 
[root@11g-node1 ~]# ll /dev/raw
total 0
crw-rw---- 1 grid asmadmin 162, 1 Aug  2 22:50 raw1
crw-rw---- 1 grid asmadmin 162, 2 Aug  2 22:50 raw2
[root@11g-node1 ~]# 

但是在RHEL7之后的版本中,系统移除了start_udev命令:

[root@oracle1 rules.d]# cat /etc/redhat-release 
CentOS Linux release 7.8.2003 (Core)
[root@oracle1 rules.d]# 
[root@oracle1 rules.d]# start_udev
bash: start_udev: command not found...
[root@oracle1 rules.d]# 

那么,在这样的操作系统上如何让UDEV的策略即时生效呢?
通过重启对应的UDEV的系统服务。

先看看我们的共享磁盘:

[root@oracle1 rules.d]# fdisk -l /dev/sdb
 
Disk /dev/sdb: 15.3 GB, 15334375424 bytes, 29949952 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x9702fc0e
 
   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048      206847      102400   83  Linux
/dev/sdb2          206848      411647      102400   83  Linux
/dev/sdb3          411648     4605951     2097152   83  Linux
/dev/sdb4         4605952    29949951    12672000   83  Linux
[root@oracle1 rules.d]# 
[root@oracle1 rules.d]# ls -ltr /dev/sdb*
brw-rw---- 1 root disk 8, 16 Jun 25 15:28 /dev/sdb
brw-rw---- 1 root disk 8, 20 Jun 25 15:28 /dev/sdb4
brw-rw---- 1 root disk 8, 18 Jun 25 15:28 /dev/sdb2
brw-rw---- 1 root disk 8, 17 Jun 25 15:28 /dev/sdb1
brw-rw---- 1 root disk 8, 19 Jun 25 15:28 /dev/sdb3
[root@oracle1 rules.d]# 

可以看到,共享磁盘确实存在。

我们的UDEV策略是这样写的:

[root@oracle1 rules.d]# cat /etc/udev/rules.d/60-raw.rules 
ACTION=="add",KERNEL=="sdb1",RUN+="/bin/raw /dev/raw/raw1 %N"
ACTION=="add",KERNEL=="sdb2",RUN+="/bin/raw /dev/raw/raw2 %N"
ACTION=="add",KERNEL=="sdb3",RUN+="/bin/raw /dev/raw/raw3 %N"
ACTION=="add",KERNEL=="sdb4",RUN+="/bin/raw /dev/raw/raw4 %N"
ACTION=="add",KERNEL=="raw[1-4]",OWNER="root",GROUP="root",MODE="660"
[root@oracle1 rules.d]# 

这时候,先查看一下RAW的状态:

[root@oracle1 rules.d]# ls -ltr /dev/raw/                             
total 0
crw-rw---- 1 root disk 162, 0 Jun 25 15:26 rawctl
[root@oracle1 rules.d]# 

可以看到,当前是没有RAW的。

一、通过:udevadm

网上有很多方法是通过udevadm命令让UDEV的配置即时生效的,我们来验证一下:
例如:
/sbin/udevadm control –reload-rules
/sbin/udevadm trigger –type=devices –action=change

[root@oracle1 rules.d]# udevadm trigger --type=devices --action=change
[root@oracle1 rules.d]# 
[root@oracle1 rules.d]# ls -ltr /dev/raw/                             
total 0
crw-rw---- 1 root disk 162, 0 Jun 25 15:26 rawctl
[root@oracle1 rules.d]# 
[root@oracle1 rules.d]# ls -ltr /dev/raw/
total 0
crw-rw---- 1 root disk 162, 0 Jun 25 15:28 rawctl
[root@oracle1 rules.d]# 
[root@oracle1 rules.d]# 
[root@oracle1 rules.d]# ls -ltr /dev/raw/
total 0
crw-rw---- 1 root disk 162, 0 Jun 25 15:28 rawctl
[root@oracle1 rules.d]# 
[root@oracle1 rules.d]# ls -ltr /dev/raw/
total 0
crw-rw---- 1 root disk 162, 0 Jun 25 15:28 rawctl
[root@oracle1 rules.d]# 
[root@oracle1 rules.d]# ls -ltr /dev/raw/
total 0
crw-rw---- 1 root disk 162, 0 Jun 25 15:28 rawctl
[root@oracle1 rules.d]# 
[root@oracle1 rules.d]# ls -ltr /dev/raw/
total 0
crw-rw---- 1 root disk 162, 0 Jun 25 15:28 rawctl
[root@oracle1 rules.d]# 
[root@oracle1 rules.d]# ls -ltr /dev/raw/
total 0
crw-rw---- 1 root disk 162, 0 Jun 25 15:28 rawctl
[root@oracle1 rules.d]# 
[root@oracle1 rules.d]# ls -ltr /dev/raw/
total 0
crw-rw---- 1 root disk 162, 0 Jun 25 15:28 rawctl
[root@oracle1 rules.d]# 
[root@oracle1 rules.d]# ls -ltr /dev/raw/
total 0
crw-rw---- 1 root disk 162, 0 Jun 25 15:28 rawctl
[root@oracle1 rules.d]# 
[root@oracle1 rules.d]# ls -ltr /dev/raw/
total 0
crw-rw---- 1 root disk 162, 0 Jun 25 15:28 rawctl
[root@oracle1 rules.d]# 
[root@oracle1 rules.d]# ls -ltr /dev/raw/
total 0
crw-rw---- 1 root disk 162, 0 Jun 25 15:28 rawctl
[root@oracle1 rules.d]# 

可以看到,udevadm命令在执行完成后,过了很久,RAW的策略依旧没有得到应用。

二、通过:重启UDEV相关的服务

先看看系统中有哪些UDEV相关的服务:

[root@oracle1 rules.d]# ls -ltr /usr/lib/systemd/system/ | grep udev
-rw-r--r--. 1 root root  751 Apr  1  2020 systemd-udev-trigger.service
-rw-r--r--. 1 root root  827 Apr  1  2020 systemd-udev-settle.service
-rw-r--r--. 1 root root  812 Apr  1  2020 systemd-udevd.service
-rw-r--r--. 1 root root  570 Apr  1  2020 systemd-udevd-kernel.socket
-rw-r--r--. 1 root root  595 Apr  1  2020 systemd-udevd-control.socket
-rw-r--r--. 1 root root  668 Apr  1  2020 initrd-udevadm-cleanup-db.service
lrwxrwxrwx. 1 root root   56 May 13 10:39 dracut-pre-udev.service -> ../../dracut/modules.d/98systemd/dracut-pre-udev.service
[root@oracle1 rules.d]# 

其中头五个的服务说明如下:

systemd-udev-settle.service  loaded active exited  udev Wait for Complete Device Initialization
systemd-udev-trigger.service loaded active exited  udev Coldplug all Devices
systemd-udevd.service        loaded active running udev Kernel Device Manager
systemd-udevd-control.socket loaded active running udev Control Socket
systemd-udevd-kernel.socket  loaded active running udev Kernel Socket

在这里,解决我们上面即时应用RAW策略的问题的相关服务是:systemd-udev-trigger.service

下面来尝试一下:

[root@oracle1 rules.d]# systemctl restart systemd-udev-trigger
[root@oracle1 rules.d]# 
[root@oracle1 rules.d]# ls -ltr /dev/raw/                     
total 0
crw-rw---- 1 root disk 162, 0 Jun 25 15:28 rawctl
[root@oracle1 rules.d]# ls -ltr /dev/raw/
total 0
crw-rw---- 1 root disk 162, 0 Jun 25 15:28 rawctl
[root@oracle1 rules.d]# ls -ltr /dev/raw/
total 0
crw-rw---- 1 root disk 162, 0 Jun 25 15:28 rawctl
crw------- 1 root root 162, 1 Jun 25 15:28 raw1
crw------- 1 root root 162, 3 Jun 25 15:28 raw3
crw------- 1 root root 162, 2 Jun 25 15:28 raw2
crw------- 1 root root 162, 4 Jun 25 15:28 raw4
[root@oracle1 rules.d]# 

可以看到,服务【systemd-udev-trigger】重启后,过了一会儿,RAW设备的资源就按照我们在UDEV策略中配置的方式,运行起来了。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论