天天看点

创建ASM磁盘组

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&gt;</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  --&gt;   $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>--&gt;   </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>--&gt;   </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>--&gt;   </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>--&gt;   </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>--&gt;   </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 &lt;ENTER&gt; 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,如需转载请自行联系原作者