天天看點

建立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,如需轉載請自行聯系原作者