udev控制磁碟引導順序
--udev控制磁碟引導順序
vmware EXSi 虛擬化組的兄弟在對一臺虛擬機器主新增了N塊磁碟後,重啟後發現主機引導後分割槽的順序發生了變化,導致各個掛載點下掛載的檔案和之前不一致了。當時給出的解決方法是在/etc/fstab檔案中使用uuid,因為UUID不會變化。
一、使用uuid 掛載點固定磁碟
1、使用blkid命令獲取UUID
2、檢視/dev目錄獲取UUID
3、修改/etc/fstab檔案,使用uuid
按上面的方法修改後,重啟主機 ,發現所有的掛載點都正常了。
二、使用udev調整磁碟順序
可參考snipplr網站: http://snipplr.com/view/80310/replace-devsda-with-devsdb-device-name-assignment/
1、檢視本機的磁碟
可以看到一個大小為1G的vdb磁碟和一個大小為2G的vdc磁碟。
2、建立rule檔案
在/etc/udev/rules.d/建立一個rule檔案,具體內容如下
3、使用udevadm命令過載rule檔案
4、再檢視本地磁碟
再檢視發現vdb變成了2G,vdc變成了1G大小。
三、udev規則相關
1、udev規則運算子
2、udev規則的匹配鍵
3、udev重要的賦值鍵
4、udev 的值和可呼叫的替換運算子
四、udevadm與rule
透過udevadm檢視磁碟或分割槽資訊:
如有多塊磁碟,其中又有大小相同的,可以透過其他條件進行區分,如rules裡可以這樣寫:
注:一些老版本的udev裡包裡沒有udevadm,使用的是udevinfo命令。
五、uedv與asm 磁碟rule
1、scsi_id 獲取磁碟UUID
新版本中的scsi_id命令位於/usr/lib/udev/scsi_id 。
2、asm rule規則
3、重啟udev服務
4、檢視asm裝置
在centos7/redhat7 版本中的udev已不再單獨是一個包,而是在systemd包中包含了udev工具。rule規則除了/etc/udev/rules.d目錄,還有/usr/lib/udev/rules.d/ 目錄。
本文轉自: http://www.361way.com/udev-disk-order/3954.html
vmware EXSi 虛擬化組的兄弟在對一臺虛擬機器主新增了N塊磁碟後,重啟後發現主機引導後分割槽的順序發生了變化,導致各個掛載點下掛載的檔案和之前不一致了。當時給出的解決方法是在/etc/fstab檔案中使用uuid,因為UUID不會變化。
一、使用uuid 掛載點固定磁碟
1、使用blkid命令獲取UUID
-
[root@361way ~]# blkid
-
/dev/sda1: SEC_TYPE="msdos" UUID="F159-EA55" TYPE="vfat" PARTLABEL="EFI System Partition" PARTUUID="ed7d2e13-8197-4226-8fdc-47d4aa64aebb"
-
/dev/sda2: LABEL="boot" UUID="f7755604-99f2-4d94-ab1a-47b14def7e26" TYPE="xfs" PARTUUID="627c028f-bf10-4705-b465-d5118d8ee67d"
-
/dev/sda3: UUID="Bs0vJv-cena-E9eO-2WcM-iJNQ-26Mr-fGG1pr" TYPE="LVM2_member" PARTUUID="18c50ff9-0e0d-40ac-8e2a-4f7f768347ed"
-
/dev/mapper/cl-root: UUID="b2f57437-ba99-4a2d-9c82-a41037aa0e38" TYPE="xfs"
-
/dev/mapper/cl-swap: UUID="2930b30d-3039-442d-a210-da1d7775652e" TYPE="swap"
- /dev/mapper/cl-data: LABEL="data" UUID="cfc65b4e-0ca4-4b48-934e-5f668a4fb3b5" TYPE="xfs"
-
[root@361way ~]# ll /dev/disk/by-uuid/
-
總用量 0
-
lrwxrwxrwx 1 root root 10 11月 25 19:56 2930b30d-3039-442d-a210-da1d7775652e -> ../../dm-1
-
lrwxrwxrwx 1 root root 10 11月 25 19:56 b2f57437-ba99-4a2d-9c82-a41037aa0e38 -> ../../dm-0
-
lrwxrwxrwx 1 root root 10 11月 25 19:56 cfc65b4e-0ca4-4b48-934e-5f668a4fb3b5 -> ../../dm-2
-
lrwxrwxrwx 1 root root 10 11月 25 19:56 F159-EA55 -> ../../sda1
- lrwxrwxrwx 1 root root 10 11月 25 19:56 f7755604-99f2-4d94-ab1a-47b14def7e26 -> ../../sda2
-
[root@361way ~]# cat /etc/fstab
-
#
-
# /etc/fstab
-
# Created by anaconda on Mon Sep 8 16:38:29 2014
-
#
-
# Accessible filesystems, by reference, are maintained under '/dev/disk'
-
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
-
#
-
/dev/mapper/cl-root / xfs defaults 1 1
-
UUID=f7755604-99f2-4d94-ab1a-47b14def7e26 /boot xfs defaults 1 2
-
UUID=F159-EA55 /boot/efi vfat umask=0077,shortname=winnt 0 0
-
/dev/mapper/cl-data /data xfs defaults,noatime,nobarrier 1 2
- /dev/mapper/cl-swap swap swap defaults 0 0
二、使用udev調整磁碟順序
可參考snipplr網站: http://snipplr.com/view/80310/replace-devsda-with-devsdb-device-name-assignment/
1、檢視本機的磁碟
-
[root@localhost rules.d]# fdisk -l
-
Disk /dev/vda: 21.5 GB, 21474836480 bytes
-
16 heads, 63 sectors/track, 41610 cylinders
-
Units = cylinders of 1008 * 512 = 516096 bytes
-
Sector size (logical/physical): 512 bytes / 512 bytes
-
I/O size (minimum/optimal): 512 bytes / 512 bytes
-
Disk identifier: 0x0001bcdb
-
Device Boot Start End Blocks Id System
-
/dev/vda1 * 3 1018 512000 83 Linux
-
Partition 1 does not end on cylinder boundary.
-
/dev/vda2 1018 41611 20458496 8e Linux LVM
-
Partition 2 does not end on cylinder boundary.
-
Disk /dev/vdb: 1073 MB, 1073741824 bytes --vdb 1G
-
16 heads, 63 sectors/track, 2080 cylinders
-
Units = cylinders of 1008 * 512 = 516096 bytes
-
Sector size (logical/physical): 512 bytes / 512 bytes
-
I/O size (minimum/optimal): 512 bytes / 512 bytes
-
Disk identifier: 0x00000000
-
Disk /dev/vdc: 2147 MB, 2147483648 bytes --vdc 2G
-
16 heads, 63 sectors/track, 4161 cylinders
-
Units = cylinders of 1008 * 512 = 516096 bytes
-
Sector size (logical/physical): 512 bytes / 512 bytes
-
I/O size (minimum/optimal): 512 bytes / 512 bytes
- Disk identifier: 0x00000000
2、建立rule檔案
在/etc/udev/rules.d/建立一個rule檔案,具體內容如下
-
# cat 10-local.rules
-
KERNEL=="vdb", NAME="vdc"
- KERNEL=="vdc", NAME="vdb"
-
# udevadm control --reload-rules
- # udevadm trigger
-
[root@localhost ~]# fdisk -l
-
Disk /dev/vda: 21.5 GB, 21474836480 bytes
-
16 heads, 63 sectors/track, 41610 cylinders
-
Units = cylinders of 1008 * 512 = 516096 bytes
-
Sector size (logical/physical): 512 bytes / 512 bytes
-
I/O size (minimum/optimal): 512 bytes / 512 bytes
-
Disk identifier: 0x0001bcdb
-
Device Boot Start End Blocks Id System
-
/dev/vda1 * 3 1018 512000 83 Linux
-
Partition 1 does not end on cylinder boundary.
-
/dev/vda2 1018 41611 20458496 8e Linux LVM
-
Partition 2 does not end on cylinder boundary.
-
Disk /dev/vdb: 2147 MB, 2147483648 bytes --vdb已變成2G
-
16 heads, 63 sectors/track, 4161 cylinders
-
Units = cylinders of 1008 * 512 = 516096 bytes
-
Sector size (logical/physical): 512 bytes / 512 bytes
-
I/O size (minimum/optimal): 512 bytes / 512 bytes
-
Disk identifier: 0x00000000
-
Disk /dev/vdc: 1073 MB, 1073741824 bytes --vdc已變成1G
-
16 heads, 63 sectors/track, 2080 cylinders
-
Units = cylinders of 1008 * 512 = 516096 bytes
-
Sector size (logical/physical): 512 bytes / 512 bytes
-
I/O size (minimum/optimal): 512 bytes / 512 bytes
- Disk identifier: 0x00000000
三、udev規則相關
1、udev規則運算子
-
“==”:比較鍵、值,若等於,則該條件滿足;
-
“!=”: 比較鍵、值,若不等於,則該條件滿足;
-
“=”: 對一個鍵賦值;
-
“+=”:為一個表示多個條目的鍵賦值。
- “:=”:對一個鍵賦值,並拒絕之後所有對該鍵的改動。目的是防止後面的規則檔案對該鍵賦值。
-
ACTION: 事件 (uevent) 的行為,例如:add( 新增裝置 )、remove( 刪除裝置 )。
-
KERNEL: 核心裝置名稱,例如:sda, cdrom。
-
DEVPATH:裝置的 devpath 路徑。
-
SUBSYSTEM: 裝置的子系統名稱,例如:sda 的子系統為 block。
-
BUS: 裝置在 devpath 裡的匯流排名稱,例如:usb。
-
DRIVER: 裝置在 devpath 裡的裝置驅動名稱,例如:ide-cdrom。
-
ID: 裝置在 devpath 裡的識別號。
-
SYSFS{filename}: 裝置的 devpath 路徑下,裝置的屬性檔案“filename”裡的內容。
-
ENV{key}: 環境變數。在一條規則中,可以設定最多五條環境變數的 匹配鍵。
-
PROGRAM:呼叫外部命令。
- RESULT: 外部命令 PROGRAM 的返回結果
-
NAME:在 /dev下產生的裝置檔名。只有第一次對某個裝置的 NAME 的賦值行為生效,之後匹配的規則再對該裝置的 NAME 賦值行為將被忽略。如果沒有任何規則對裝置的 NAME 賦值,udev 將使用核心裝置名稱來產生裝置檔案。
-
SYMLINK:為 /dev/下的裝置檔案產生符號連結。由於 udev 只能為某個裝置產生一個裝置檔案,所以為了不覆蓋系統預設的 udev 規則所產生的檔案,推薦使用符號連結。
-
OWNER, GROUP, MODE:為裝置設定許可權。
- ENV{key}:匯入一個環境變數
-
$kernel, %k:裝置的核心裝置名稱,例如:sda、cdrom。
-
$number, %n:裝置的核心號碼,例如:sda3 的核心號碼是 3。
-
$devpath, %p:裝置的 devpath路徑。
-
$id, %b:裝置在 devpath裡的 ID 號。
-
$sysfs{file}, %s{file}:裝置的 sysfs裡 file 的內容。其實就是裝置的屬性值。
-
例如:$sysfs{size} 表示該裝置 ( 磁碟 ) 的大小。
-
$env{key}, %E{key}:一個環境變數的值。
-
$major, %M:裝置的 major 號。
-
$minor %m:裝置的 minor 號。
-
$result, %c:PROGRAM 返回的結果。
-
$parent, %P:父裝置的裝置檔名。
-
$root, %r:udev_root的值,預設是 /dev/。
-
$tempnode, %N:臨時裝置名。
-
%%:符號 % 本身。
- $$:符號 $ 本身。
四、udevadm與rule
透過udevadm檢視磁碟或分割槽資訊:
-
[root@localhost rules.d]# udevadm info -a -p /sys/block/vdb
-
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:06.0/virtio3/block/vdb':
-
KERNEL=="vdb"
-
SUBSYSTEM=="block"
-
DRIVER==""
-
ATTR{range}=="16"
-
ATTR{ext_range}=="16"
-
ATTR{removable}=="0"
-
ATTR{ro}=="0"
-
ATTR{size}=="2097152"
-
ATTR{alignment_offset}=="0"
-
ATTR{discard_alignment}=="0"
-
ATTR{capability}=="10"
-
ATTR{stat}==" 276 13 2312 8 0 0 0 0 0 8 8"
-
ATTR{inflight}==" 0 0"
-
ATTR{serial}==""
-
looking at parent device '/devices/pci0000:00/0000:00:06.0/virtio3':
-
KERNELS=="virtio3"
-
SUBSYSTEMS=="virtio"
-
DRIVERS=="virtio_blk"
-
ATTRS{device}=="2"
-
ATTRS{vendor}=="6900"
-
ATTRS{status}=="0x00000007"
-
ATTRS{modalias}=="virtio:d00000002v00001AF4"
-
ATTRS{features}=="0010101101100000000000000000110000000000000000000000000000000000"
-
looking at parent device '/devices/pci0000:00/0000:00:06.0':
-
KERNELS=="0000:00:06.0"
-
SUBSYSTEMS=="pci"
-
DRIVERS=="virtio-pci"
-
ATTRS{vendor}=="0x1af4"
-
ATTRS{device}=="0x1001"
-
ATTRS{subsystem_vendor}=="0x1af4"
-
ATTRS{subsystem_device}=="0x0002"
-
ATTRS{class}=="0x010000"
-
ATTRS{irq}=="11"
-
ATTRS{local_cpus}=="1"
-
ATTRS{local_cpulist}=="0"
-
ATTRS{modalias}=="pci:v00001AF4d00001001sv00001AF4sd00000002bc01sc00i00"
-
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==""
-
SUBSYSTEM=="block", ATTR{size}=="234441648", NAME="my_hard_disk"
-
SUBSYSTEM=="block", SUBSYSTEMS=="scsi", ATTRS{model}=="ST3120827AS", NAME="my_hard_disk"
- KERNEL=="sda1" ATTR{size}=="2096753" NAME="asm_ocr"
五、uedv與asm 磁碟rule
1、scsi_id 獲取磁碟UUID
-
[root@localhost ~]# /sbin/scsi_id -g -u /dev/sdb
-
3690b11c0002be80e00000ce3514380db
-
[root@localhost ~]# /sbin/scsi_id -g -u /dev/sdc
-
3690b11c0002be80e00000ce5514380f8
-
[root@localhost ~]# /sbin/scsi_id -g -u /dev/sdd
- 3690b11c0002be80e00000ce75143810c
2、asm rule規則
-
#cat /etc/udev/rules.d/99-Oracle-asmdevices.rules
-
KERNEL=="sd?1",BUS="scsi",PROGRAM=="/sbin/scsi_id -g -u -d /dev/$parent",
-
RESULT=="3690b11c0002be80e00000ce3514380db",
-
NAME="asm-crs01", OWNER="grid",GROUP="asmadmin",MODE="0660"
-
KERNEL=="sd?1",BUS="scsi",PROGRAM=="/sbin/scsi_id -g -u -d /dev/$parent",
-
RESULT=="3690b11c0002be80e00000ce5514380f8",
-
NAME="asm-data01", OWNER="grid",GROUP="asmadmin",MODE="0660"
-
KERNEL=="sd?1",BUS="scsi",PROGRAM=="/sbin/scsi_id -g -u -d /dev/$parent",
-
RESULT=="3690b11c0002be80e00000ce75143810c",
- NAME="asm-data02", OWNER="grid",GROUP="asmadmin",MODE="0660"
-
[root@localhost rules.d]# /sbin/partprobe /dev/sdb1
-
[root@localhost rules.d]# /sbin/partprobe /dev/sdc1
-
[root@localhost rules.d]# /sbin/partprobe /dev/sdd1
- [root@localhost rules.d]# /sbin/start_udev
-
[root@localhost rules.d]# ll /dev/asm*
-
brw-rw----. 1 root root 8, 17 3月 27 11:30 /dev/asm-crs01
-
brw-rw----. 1 root root 8, 33 3月 27 11:30 /dev/asm-data01
- brw-rw----. 1 root root 8, 49 3月 27 11:30 /dev/asm-data02
在centos7/redhat7 版本中的udev已不再單獨是一個包,而是在systemd包中包含了udev工具。rule規則除了/etc/udev/rules.d目錄,還有/usr/lib/udev/rules.d/ 目錄。
本文轉自: http://www.361way.com/udev-disk-order/3954.html
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/17086096/viewspace-1966497/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- AIX磁碟順序調整AI
- Linux 修改核心啟動預設引導順序Linux
- JS控制音訊順序播放JS音訊
- 雲伺服器修改Linux系統核心的引導順序伺服器Linux
- C/C++多引數函式引數的計算順序與壓棧順序C++函式
- NLS引數優先順序解析
- 命令執行順序控制與管道
- 佇列順序性引發的思考佇列
- Java流程控制02:順序結構Java
- 深入理解 linux磁碟順序寫、隨機寫Linux隨機
- 引數匹配順序——Python學習之引數(三)Python
- udev+multipath配合繫結磁碟dev
- OEL5.7 UDEV繫結磁碟dev
- HttpClient和HttpGet 引數的優先順序HTTPclient
- Shell指令碼控制docker容器啟動順序指令碼Docker
- docker compose 服務啟動順序控制Docker
- Spring如何控制Bean的載入順序SpringBean
- 漏洞優先順序技術(VPT)導論
- 繼承中引數傳遞及呼叫順序繼承
- 如何修改 VoiceOver 朗讀控制元件的順序控制元件
- 使用udev擴充套件ASM磁碟組dev套件ASM
- linux下udev重新繫結磁碟Linuxdev
- rhel 5.5UDEV繫結asm磁碟devASM
- UDEV方式配置Oracle RAC ASM共享磁碟devOracleASM
- PLSQL Language Referenc-PL/SQL控制語句-順序控制語句-NULLSQLNull
- 順序表
- 順序控制和狀態機之間的差別
- ajax非同步導致js方法順序執行不了非同步JS
- python運算子及優先順序順序Python
- 第2章 順序表及其順序儲存
- Android高亮引導控制元件Android控制元件
- 引導過程與服務控制
- 順序表應用5:有序順序表歸併
- 順序表應用6:有序順序表查詢
- Oracle RAC 環境 引數檔案的啟動順序Oracle
- js中同名變數或者引數的優先順序JS變數
- 不合理的執行順序引發的死鎖
- springboot~AutoConfigureAfter如何控制Bean的注入順序Spring BootBean