ASM磁盘组是作为一个逻辑单元管理的一个ASM磁盘池。与其他任何LVM一样,ASM管理大量物理卷并将其作为一个或多个逻辑卷呈交给Oracle。物理卷可以是实际的磁盘或磁盘的分区,或者是隶属操作系统的卷管理器的卷。无论采用哪种方式,都不能使用任何文件系统格式化,必须是裸设备。
在Linux上,ASM能引用磁盘作为裸设备,或通过使用ASMLib软件。
直接使用裸设备的方法:
1. 在RHEL6以前的可以直接通过rawdevices的管理方法,系统安装后默认已存在/etc/init.d/rawdevices和/etc/sysconfig/rawdevices这两个文件。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
<code># cat /etc/redhat-release</code>
<code>Red Hat Enterprise Linux Server release 5.8 (Tikanga)</code>
<code># rpm -qf /etc/init.d/rawdevices /etc/sysconfig/rawdevices</code>
<code>initscripts-8.45.42-1.el5</code>
<code># cat /etc/init.d/rawdevices</code>
<code>#!/bin/bash</code>
<code>#</code>
<code># rawdevices This shell script assignes rawdevices to block devices</code>
<code># chkconfig: 345 56 44</code>
<code># description: This scripts assignes raw devices to block devices \</code>
<code># (such as hard drive partitions). This is for the use \</code>
<code># of applications such as Oracle. You can set up the \</code>
<code># raw device to block device mapping by editing \</code>
<code># the file /etc/sysconfig/rawdevices.</code>
<code># config: /etc/sysconfig/rawdevices</code>
<code>[ -f </code><code>/bin/raw</code> <code>] || </code><code>exit</code> <code>0</code>
<code>[ -f </code><code>/etc/sysconfig/rawdevices</code> <code>] || </code><code>exit</code> <code>0</code>
<code># Exit if the file just has the default comments.</code>
<code>LC_ALL=C </code><code>/bin/egrep</code> <code>-q -</code><code>v</code> <code>"^ *#"</code> <code>/etc/sysconfig/rawdevices</code> <code>2></code><code>/dev/null</code> <code>|| </code><code>exit</code> <code>0</code>
<code>. </code><code>/etc/init</code><code>.d</code><code>/functions</code>
<code>function</code> <code>assign_raw()</code>
<code>{</code>
<code> </code><code>LC_ALL=C </code><code>egrep</code> <code>-</code><code>v</code> <code>'^ *#'</code> <code>/etc/sysconfig/rawdevices</code> <code>|</code>
<code> </code><code>while</code> <code>read</code> <code>RAW BLOCK; </code><code>do</code>
<code> </code><code>if</code> <code>[ -n </code><code>"$RAW"</code> <code>-a -n </code><code>"$BLOCK"</code> <code>]; </code><code>then</code>
<code> </code><code>rawdirname=${RAW%/*}</code>
<code> </code><code>if</code> <code>[ </code><code>"$rawdirname"</code> <code>= </code><code>"/dev"</code> <code>-a -d </code><code>/dev/raw</code> <code>]; </code><code>then</code>
<code> </code><code>echo</code> <code>$</code><code>" Please correct your /etc/sysconfig/rawdevices:"</code>
<code> </code><code>echo</code> <code>$</code><code>" rawdevices are now located in the directory /dev/raw/ "</code>
<code> </code><code>echo</code> <code>$</code><code>" If the command 'raw' still refers to /dev/raw as a file."</code>
<code> </code><code>echo</code> <code>$</code><code>" you'll have to upgrade your util-linux package"</code>
<code> </code><code>exit</code> <code>0</code>
<code> </code><code>fi</code>
<code> </code><code>if</code> <code>[ </code><code>"$rawdirname"</code> <code>= </code><code>"/dev/raw"</code> <code>-a -f </code><code>/dev/raw</code> <code>]; </code><code>then</code>
<code> </code><code>echo</code> <code>" $RAW --> $BLOCK"</code><code>;</code>
<code> </code><code>raw $RAW $BLOCK</code>
<code> </code><code>fi</code>
<code> </code><code>done</code>
<code>}</code>
<code># See how we were called.</code>
<code>case</code> <code>"$1"</code> <code>in</code>
<code> </code><code>start)</code>
<code> </code><code># Assign devices</code>
<code> </code><code>echo</code> <code>$</code><code>"Assigning devices: "</code>
<code> </code><code>assign_raw</code>
<code>#添加以下两行(默认不存在),即默认情况下生成的裸设备为root所有,</code>
<code>#所以必须修改属主,否则oracle用户无法使用裸设备</code>
<code> </code><code>sleep</code> <code>5</code>
<code> </code><code>chown</code> <code>-R oracle:oinstall </code><code>/dev/raw/</code>
<code> </code><code>echo</code> <code>$</code><code>"done"</code>
<code> </code><code>;;</code>
<code> </code><code>stop)</code>
<code> </code><code># No action to be taken here</code>
<code> </code><code>status)</code>
<code> </code><code>ID=`</code><code>id</code> <code>-u`</code>
<code> </code><code>if</code> <code>[ $ID -</code><code>eq</code> <code>0 ]; </code><code>then</code>
<code> </code><code>raw -qa</code>
<code> </code><code>else</code>
<code> </code><code>echo</code> <code>$</code><code>"You need to be root to use this command ! "</code>
<code> </code><code>fi</code>
<code> </code><code>restart|reload)</code>
<code> </code><code>$0 start</code>
<code> </code><code>*)</code>
<code> </code><code>echo</code> <code>$</code><code>"Usage: $0 {start|stop|status|restart}"</code>
<code> </code><code>exit</code> <code>1</code>
<code>esac</code>
<code>exit</code> <code>0</code>
<code># vi /etc/sysconfig/rawdevices //映射将要绑定的裸设备</code>
<code>/dev/raw/raw10</code> <code>/dev/sda10</code>
<code>/dev/raw/raw11</code> <code>/dev/sda11</code>
<code>/dev/raw/raw12</code> <code>/dev/sda12</code>
<code>/dev/raw/raw13</code> <code>/dev/sda13</code>
<code>/dev/raw/raw14</code> <code>/dev/sda14</code>
<code># chkconfig rawdevices on</code>
<code># service rawdevices start</code>
<code>Assigning devices:</code>
<code> </code><code>/dev/raw/raw10</code> <code>--> </code><code>/dev/sda10</code>
<code>/dev/raw/raw10</code><code>: bound to major 8, minor 10</code>
<code> </code><code>/dev/raw/raw11</code> <code>--> </code><code>/dev/sda11</code>
<code>/dev/raw/raw11</code><code>: bound to major 8, minor 11</code>
<code> </code><code>/dev/raw/raw12</code> <code>--> </code><code>/dev/sda12</code>
<code>/dev/raw/raw12</code><code>: bound to major 8, minor 12</code>
<code> </code><code>/dev/raw/raw13</code> <code>--> </code><code>/dev/sda13</code>
<code>/dev/raw/raw13</code><code>: bound to major 8, minor 13</code>
<code> </code><code>/dev/raw/raw14</code> <code>--> </code><code>/dev/sda14</code>
<code>/dev/raw/raw14</code><code>: bound to major 8, minor 14</code>
<code>done</code>
<code># ls -l /dev/raw/</code>
<code>total 0</code>
<code>crw-rw----. 1 oracle oinstall 162, 10 May 27 08:37 raw10</code>
<code>crw-rw----. 1 oracle oinstall 162, 11 May 27 08:37 raw11</code>
<code>crw-rw----. 1 oracle oinstall 162, 12 May 27 08:37 raw12</code>
<code>crw-rw----. 1 oracle oinstall 162, 13 May 27 08:37 raw13</code>
<code>crw-rw----. 1 oracle oinstall 162, 14 May 27 08:37 raw14</code>
<code>crw-rw----. 1 oracle oinstall 162, 0 May 27 08:19 rawctl</code>
<code># raw -qa</code>
2. 在RHEL6中,系统里面虽然已经不存在/etc/sysconfig/rawdevices和/etc/init.d/rawdevices文件了,但是依然支持rawdevices的方式,可以通过如下方法来管理raw文件。
手动创建/etc/sysconfig/rawdevices和/etc/init.d/rawdevices文件,然后依然以rawdevices的方式
通过udev来管理raw,同样也可以通过udev固定磁盘对应的设备名
以下介绍udev的方式:
<code># fdisk -l /dev/sdb</code>
<code>Disk </code><code>/dev/sdb</code><code>: 2147 MB, 2147483648 bytes</code>
<code>255 heads, 63 sectors</code><code>/track</code><code>, 261 cylinders</code>
<code>Units = cylinders of 16065 * 512 = 8225280 bytes</code>
<code> </code><code>Device Boot Start End Blocks Id System</code>
<code>/dev/sdb1</code> <code>1 261 2096451 5 Extended</code>
<code>/dev/sdb5</code> <code>1 25 200749+ 83 Linux</code>
<code>/dev/sdb6</code> <code>26 50 200781 83 Linux</code>
<code>/dev/sdb7</code> <code>51 75 200781 83 Linux</code>
<code>/dev/sdb8</code> <code>76 100 200781 83 Linux</code>
<code>/dev/sdb9</code> <code>101 125 200781 83 Linux</code>
<code># vi /etc/udev/rules.d/60-raw.rules</code>
<code>ACTION==</code><code>"add"</code><code>,KERNEL==</code><code>"sdb5"</code><code>,RUN+=</code><code>"/bin/raw /dev/raw/raw5 %N"</code><code>,OWNER=</code><code>"oracle"</code><code>, GROUP=</code><code>"oinstall"</code><code>, MODE=</code><code>"660"</code>
<code>ACTION==</code><code>"add"</code><code>,KERNEL==</code><code>"sdb6"</code><code>,RUN+=</code><code>"/bin/raw /dev/raw/raw6 %N"</code><code>,OWNER=</code><code>"oracle"</code><code>, GROUP=</code><code>"oinstall"</code><code>, MODE=</code><code>"660"</code>
<code>ACTION==</code><code>"add"</code><code>,KERNEL==</code><code>"sdb7"</code><code>,RUN+=</code><code>"/bin/raw /dev/raw/raw7 %N"</code><code>,OWNER=</code><code>"oracle"</code><code>, GROUP=</code><code>"oinstall"</code><code>, MODE=</code><code>"660"</code>
<code>ACTION==</code><code>"add"</code><code>,KERNEL==</code><code>"sdb8"</code><code>,RUN+=</code><code>"/bin/raw /dev/raw/raw8 %N"</code><code>,OWNER=</code><code>"oracle"</code><code>, GROUP=</code><code>"oinstall"</code><code>, MODE=</code><code>"660"</code>
<code>ACTION==</code><code>"add"</code><code>,KERNEL==</code><code>"sdb9"</code><code>,RUN+=</code><code>"/bin/raw /dev/raw/raw9 %N"</code><code>,OWNER=</code><code>"oracle"</code><code>, GROUP=</code><code>"oinstall"</code><code>, MODE=</code><code>"660"</code>
<code># start_udev</code>
<code>Starting udev: [ OK ]</code>
<code>/dev/raw/raw5</code><code>: bound to major 8, minor 21</code>
<code>/dev/raw/raw6</code><code>: bound to major 8, minor 22</code>
<code>/dev/raw/raw7</code><code>: bound to major 8, minor 23</code>
<code>/dev/raw/raw8</code><code>: bound to major 8, minor 24</code>
<code>/dev/raw/raw9</code><code>: bound to major 8, minor 25</code>
<code># ls -l /dev/raw</code>
<code>crw-rw---- 1 oracle oinstall 162, 5 Jun 9 17:15 raw5</code>
<code>crw-rw---- 1 oracle oinstall 162, 6 Jun 9 17:15 raw6</code>
<code>crw-rw---- 1 oracle oinstall 162, 7 Jun 9 17:15 raw7</code>
<code>crw-rw---- 1 oracle oinstall 162, 8 Jun 9 17:15 raw8</code>
<code>crw-rw---- 1 oracle oinstall 162, 9 Jun 9 17:15 raw9</code>
ASMLib:(非Linux系统只能使用裸设备的方法)
ASMLib是一组可选的位于ASM和硬件之间的一个内核驱动程序工具,也是作为一个应用程序库通过Oracle数据库软件访问ASM磁盘。
它是Oracle 10g和11g单实例数据库以及RAC的ASM特性支持库。ASM和数据库实例可以使用ASMLib作为可替代的磁盘访问接口。
ASMLib有以下三个组件:
内核驱动:oracleasm Linux中支持oracle ASMLib的内核驱动程序(需根据内核版本下载)
支持工具:oracleasm-support 提供用于配置和启动ASM驱动程序的实用工具
应用程序库:oracleasmlib 提供了实际的ASM库
<code># uname -r</code>
<code>2.6.18-308.el5</code>
<code># ls oracleasm*</code>
<code>oracleasm-2.6.18-308.el5-2.0.5-1.el5.x86_64.rpm</code>
<code>oracleasm-support-2.1.8-1.el5.x86_64.rpm</code>
<code>oracleasmlib-2.0.4-1.el5.x86_64.rpm</code>
<code># rpm -ivh oracleasmlib*</code>
<code>warning: oracleasm-2.6.18-308.el5-2.0.5-1.el5.x86_64.rpm: Header V3 DSA signature: NOKEY, key ID 1e5e0159</code>
<code>Preparing... </code><code>########################################### [100%]</code>
<code> </code><code>1:oracleasm-support </code><code>########################################### [100%]</code>
<code> </code><code>2:oracleasm-2.6.18-308.el</code><code>########################################### [100%]</code>
<code> </code><code>3:oracleasmlib </code><code>########################################### [100%]</code>
<code># /etc/init.d/oracleasm configure</code>
<code>Configuring the Oracle ASM library driver.</code>
<code>This will configure the on-boot properties of the Oracle ASM library</code>
<code>driver. The following questions will determine whether the driver is</code>
<code>loaded on boot and what permissions it will have. The current values</code>
<code>will be shown </code><code>in</code> <code>brackets (</code><code>'[]'</code><code>). Hitting <ENTER> without typing an</code>
<code>answer will keep that current value. Ctrl-C will abort.</code>
<code>Default user to own the driver interface []: oracle</code>
<code>Default group to own the driver interface []: oinstall</code>
<code>Start Oracle ASM library driver on boot (y</code><code>/n</code><code>) [n]: y</code>
<code>Scan </code><code>for</code> <code>Oracle ASM disks on boot (y</code><code>/n</code><code>) [y]:</code>
<code>Writing Oracle ASM library driver configuration: </code><code>done</code>
<code>Initializing the Oracle ASMLib driver: [ OK ]</code>
<code>Scanning the system </code><code>for</code> <code>Oracle ASMLib disks: [ OK ]</code>
<code># /etc/init.d/oracleasm enable</code>
<code>Writing Oracle ASM library driver configuration: [ OK ]</code>
<code>Loading module </code><code>"oracleasm"</code><code>: [ OK ]</code>
<code>Mounting ASMlib driver filesystem: [ OK ]</code>
<code>Scanning system </code><code>for</code> <code>ASM disks: [ OK ]</code>
<code># /etc/init.d/oracleasm createdisk VOL1 /dev/sda5</code>
<code>Marking disk </code><code>"VOL2"</code> <code>as an ASM disk: [ OK ]</code>
<code># /etc/init.d/oracleasm createdisk VOL2 /dev/sda6</code>
<code># /etc/init.d/oracleasm createdisk VOL3 /dev/sda7</code>
<code>Marking disk </code><code>"VOL3"</code> <code>as an ASM disk: [ OK ]</code>
<code># /etc/init.d/oracleasm createdisk VOL4 /dev/sda8</code>
<code>Marking disk </code><code>"VOL4"</code> <code>as an ASM disk: [ OK ]</code>
<code># /etc/init.d/oracleasm createdisk VOL5 /dev/sda9</code>
<code>Marking disk </code><code>"VOL5"</code> <code>as an ASM disk: [ OK ]</code>
<code># /etc/init.d/oracleasm scandisks</code>
<code>Scanning system </code><code>for</code> <code>ASM disks:[ OK ]</code>
<code># /etc/init.d/oracleasm listdisks</code>
<code>VOL1</code>
<code>VOL2</code>
<code>VOL3</code>
<code>VOL4</code>
<code>VOL5</code>
<code># ll /dev/oracleasm/disks/</code>
<code>brw-rw---- 1 oracle oinstall 8, 5 Jun 3 09:53 VOL1</code>
<code>brw-rw---- 1 oracle oinstall 8, 6 Jun 3 10:00 VOL2</code>
<code>brw-rw---- 1 oracle oinstall 8, 7 Jun 3 10:00 VOL3</code>
<code>brw-rw---- 1 oracle oinstall 8, 8 Jun 3 10:00 VOL4</code>
<code>brw-rw---- 1 oracle oinstall 8, 9 Jun 3 10:00 VOL5</code>
<code>//</code><code>到这里ASM的工作就完成了,这里的磁盘可以被Oracle所使用,使用oracleasm-discover来探测ASM硬盘:</code>
<code># oracleasm-discover</code>
<code>Using ASMLib from </code><code>/opt/oracle/extapi/64/asm/orcl/1/libasm</code><code>.so</code>
<code>[ASM Library - Generic Linux, version 2.0.4 (KABI_V2)]</code>
<code>Discovered disk: ORCL:VOL1 [4899762 blocks (2508678144 bytes), maxio 512]</code>
<code>Discovered disk: ORCL:VOL2 [4899762 blocks (2508678144 bytes), maxio 512]</code>
<code>Discovered disk: ORCL:VOL3 [4899762 blocks (2508678144 bytes), maxio 512]</code>
<code>Discovered disk: ORCL:VOL4 [4899762 blocks (2508678144 bytes), maxio 512]</code>
<code>Discovered disk: ORCL:VOL5 [7373772 blocks (3775371264 bytes), maxio 512]</code>
本文转自Vnimos51CTO博客,原文链接:http://blog.51cto.com/vnimos/1220666,如需转载请自行联系原作者