創建ASM磁盤組

ASM磁盤組是作爲一個邏輯單元管理的一個ASM磁盤池。與其他任何LVM一樣,ASM管理大量物理卷並將其作爲一個或多個邏輯卷呈交給Oracle。物理卷可以是實際的磁盤或磁盤的分區,或者是隸屬操作系統的卷管理器的卷。無論採用哪種方式,都不能使用任何文件系統格式化,必須是裸設備

在Linux上,ASM能引用磁盤作爲裸設備,或通過使用ASMLib軟件。

  • 直接使用裸設備的方法:

1. 在RHEL6以前的可以直接通過rawdevices的管理方法,系統安裝後默認已存在/etc/init.d/rawdevices和/etc/sysconfig/rawdevices這兩個文件。

# cat /etc/redhat-release
Red Hat Enterprise Linux Server release 5.8 (Tikanga)
# rpm -qf /etc/init.d/rawdevices /etc/sysconfig/rawdevices
initscripts-8.45.42-1.el5
initscripts-8.45.42-1.el5
# cat /etc/init.d/rawdevices
#!/bin/bash
#
# rawdevices       This shell script assignes rawdevices to block devices
#
# chkconfig: 345 56 44
# description: This scripts assignes raw devices to block devices \
#              (such as hard drive partitions). This is for the use \
#              of applications such as Oracle. You can set up the \
#              raw device to block device mapping by editing \
#              the file /etc/sysconfig/rawdevices.
# config: /etc/sysconfig/rawdevices
[ -f /bin/raw ] || exit 0
[ -f /etc/sysconfig/rawdevices ] || exit 0
# Exit if the file just has the default comments.
LC_ALL=C /bin/egrep -q -v "^ *#" /etc/sysconfig/rawdevices 2>/dev/null || exit 0
. /etc/init.d/functions
function assign_raw()
{
   LC_ALL=C egrep -v '^ *#' /etc/sysconfig/rawdevices |
   while read RAW BLOCK; do
     if [ -n "$RAW" -a -n "$BLOCK" ]; then
         rawdirname=${RAW%/*}
         if [ "$rawdirname" = "/dev" -a -d /dev/raw ]; then
           echo $"  Please correct your /etc/sysconfig/rawdevices:"
           echo $"     rawdevices are now located in the directory /dev/raw/ "
           echo $"  If the command 'raw' still refers to /dev/raw as a file."
           echo $"   you'll have to upgrade your util-linux package"
           exit 0
         fi
         if [ "$rawdirname" = "/dev/raw" -a -f /dev/raw ]; then
           echo $"  Please correct your /etc/sysconfig/rawdevices:"
           echo $"     rawdevices are now located in the directory /dev/raw/ "
           echo $"  If the command 'raw' still refers to /dev/raw as a file."
           echo $"   you'll have to upgrade your util-linux package"
           exit 0
         fi
       echo "           $RAW  -->   $BLOCK";
       raw $RAW $BLOCK
     fi
   done
}
# See how we were called.
case "$1" in
  start)
        # Assign devices
        echo $"Assigning devices: "
        assign_raw
#添加以下兩行(默認不存在),即默認情況下生成的裸設備爲root所有,
#所以必須修改屬主,否則oracle用戶無法使用裸設備
        sleep 5
        chown -R oracle:oinstall /dev/raw/
        echo $"done"
        ;;
  stop)
        # No action to be taken here
        ;;
  status)
        ID=`id -u`
        if [ $ID -eq 0 ]; then
          raw -qa
        else
          echo $"You need to be root to use this command ! "
        fi
        ;;
  restart|reload)
        $0 start
        ;;
  *)
        echo $"Usage: $0 {start|stop|status|restart}"
        exit 1
esac
exit 0


# vi /etc/sysconfig/rawdevices                //映射將要綁定的裸設備
/dev/raw/raw10  /dev/sda10
/dev/raw/raw11  /dev/sda11
/dev/raw/raw12  /dev/sda12
/dev/raw/raw13  /dev/sda13
/dev/raw/raw14  /dev/sda14
# chkconfig rawdevices on
# service rawdevices start
Assigning devices:
           /dev/raw/raw10  -->   /dev/sda10
/dev/raw/raw10: bound to major 8, minor 10
           /dev/raw/raw11  -->   /dev/sda11
/dev/raw/raw11: bound to major 8, minor 11
           /dev/raw/raw12  -->   /dev/sda12
/dev/raw/raw12: bound to major 8, minor 12
           /dev/raw/raw13  -->   /dev/sda13
/dev/raw/raw13: bound to major 8, minor 13
           /dev/raw/raw14  -->   /dev/sda14
/dev/raw/raw14: bound to major 8, minor 14
done
# ls -l /dev/raw/
total 0
crw-rw----. 1 oracle oinstall 162, 10 May 27 08:37 raw10
crw-rw----. 1 oracle oinstall 162, 11 May 27 08:37 raw11
crw-rw----. 1 oracle oinstall 162, 12 May 27 08:37 raw12
crw-rw----. 1 oracle oinstall 162, 13 May 27 08:37 raw13
crw-rw----. 1 oracle oinstall 162, 14 May 27 08:37 raw14
crw-rw----. 1 oracle oinstall 162,  0 May 27 08:19 rawctl
# raw -qa
/dev/raw/raw10: bound to major 8, minor 10
/dev/raw/raw11: bound to major 8, minor 11
/dev/raw/raw12: bound to major 8, minor 12
/dev/raw/raw13: bound to major 8, minor 13
/dev/raw/raw14: bound to major 8, minor 14


2. 在RHEL6中,系統裏面雖然已經不存在/etc/sysconfig/rawdevices和/etc/init.d/rawdevices文件了,但是依然支持rawdevices的方式,可以通過如下方法來管理raw文件。

  1. 手動創建/etc/sysconfig/rawdevices和/etc/init.d/rawdevices文件,然後依然以rawdevices的方式

  2. 通過udev來管理raw,同樣也可以通過udev固定磁盤對應的設備名

以下介紹udev的方式:

# fdisk -l /dev/sdb
Disk /dev/sdb: 2147 MB, 2147483648 bytes
255 heads, 63 sectors/track, 261 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1         261     2096451    5  Extended
/dev/sdb5               1          25      200749+  83  Linux
/dev/sdb6              26          50      200781   83  Linux
/dev/sdb7              51          75      200781   83  Linux
/dev/sdb8              76         100      200781   83  Linux
/dev/sdb9             101         125      200781   83  Linux
# vi /etc/udev/rules.d/60-raw.rules
ACTION=="add",KERNEL=="sdb5",RUN+="/bin/raw /dev/raw/raw5 %N",OWNER="oracle", GROUP="oinstall", MODE="660"
ACTION=="add",KERNEL=="sdb6",RUN+="/bin/raw /dev/raw/raw6 %N",OWNER="oracle", GROUP="oinstall", MODE="660"
ACTION=="add",KERNEL=="sdb7",RUN+="/bin/raw /dev/raw/raw7 %N",OWNER="oracle", GROUP="oinstall", MODE="660"
ACTION=="add",KERNEL=="sdb8",RUN+="/bin/raw /dev/raw/raw8 %N",OWNER="oracle", GROUP="oinstall", MODE="660"
ACTION=="add",KERNEL=="sdb9",RUN+="/bin/raw /dev/raw/raw9 %N",OWNER="oracle", GROUP="oinstall", MODE="660"
# raw -qa
# start_udev
Starting udev: [  OK  ]
# raw -qa
/dev/raw/raw5:  bound to major 8, minor 21
/dev/raw/raw6:  bound to major 8, minor 22
/dev/raw/raw7:  bound to major 8, minor 23
/dev/raw/raw8:  bound to major 8, minor 24
/dev/raw/raw9:  bound to major 8, minor 25
# ls -l /dev/raw
total 0
crw-rw---- 1 oracle oinstall 162,  5 Jun  9 17:15 raw5
crw-rw---- 1 oracle oinstall 162,  6 Jun  9 17:15 raw6
crw-rw---- 1 oracle oinstall 162,  7 Jun  9 17:15 raw7
crw-rw---- 1 oracle oinstall 162,  8 Jun  9 17:15 raw8
crw-rw---- 1 oracle oinstall 162,  9 Jun  9 17:15 raw9


  • ASMLib:(非Linux系統只能使用裸設備的方法)

ASMLib是一組可選的位於ASM和硬件之間的一個內核驅動程序工具,也是作爲一個應用程序庫通過Oracle數據庫軟件訪問ASM磁盤。

它是Oracle 10g和11g單實例數據庫以及RAC的ASM特性支持庫。ASM和數據庫實例可以使用ASMLib作爲可替代的磁盤訪問接口。

ASMLib有以下三個組件:

內核驅動:oracleasm            Linux中支持oracle ASMLib的內核驅動程序(需根據內核版本下載)

支持工具:oracleasm-support    提供用於配置和啓動ASM驅動程序的實用工具

應用程序庫:oracleasmlib       提供了實際的ASM庫

# uname -r
2.6.18-308.el5
# ls oracleasm*
oracleasm-2.6.18-308.el5-2.0.5-1.el5.x86_64.rpm
oracleasm-support-2.1.8-1.el5.x86_64.rpm
oracleasmlib-2.0.4-1.el5.x86_64.rpm
# rpm -ivh oracleasmlib*
warning: oracleasm-2.6.18-308.el5-2.0.5-1.el5.x86_64.rpm: Header V3 DSA signature: NOKEY, key ID 1e5e0159
Preparing...                ########################################### [100%]
   1:oracleasm-support      ########################################### [100%]
   2:oracleasm-2.6.18-308.el########################################### [100%]
   3:oracleasmlib           ########################################### [100%]
# /etc/init.d/oracleasm configure
Configuring the Oracle ASM library driver.
This will configure the on-boot properties of the Oracle ASM library
driver.  The following questions will determine whether the driver is
loaded on boot and what permissions it will have.  The current values
will be shown in brackets ('[]').  Hitting <ENTER> without typing an
answer will keep that current value.  Ctrl-C will abort.
Default user to own the driver interface []: oracle
Default group to own the driver interface []: oinstall
Start Oracle ASM library driver on boot (y/n) [n]: y
Scan for Oracle ASM disks on boot (y/n) [y]:
Writing Oracle ASM library driver configuration: done
Initializing the Oracle ASMLib driver: [  OK  ]
Scanning the system for Oracle ASMLib disks: [  OK  ]
# /etc/init.d/oracleasm enable
Writing Oracle ASM library driver configuration: [  OK  ]
Loading module "oracleasm": [  OK  ]
Mounting ASMlib driver filesystem: [  OK  ]
Scanning system for ASM disks: [  OK  ]
# /etc/init.d/oracleasm createdisk VOL1 /dev/sda5
Marking disk "VOL2" as an ASM disk: [  OK  ]
# /etc/init.d/oracleasm createdisk VOL2 /dev/sda6
Marking disk "VOL2" as an ASM disk: [  OK  ]
# /etc/init.d/oracleasm createdisk VOL3 /dev/sda7
Marking disk "VOL3" as an ASM disk: [  OK  ]
# /etc/init.d/oracleasm createdisk VOL4 /dev/sda8
Marking disk "VOL4" as an ASM disk: [  OK  ]
# /etc/init.d/oracleasm createdisk VOL5 /dev/sda9
Marking disk "VOL5" as an ASM disk: [  OK  ]
# /etc/init.d/oracleasm scandisks
Scanning system for ASM disks:[  OK  ]
# /etc/init.d/oracleasm listdisks
VOL1
VOL2
VOL3
VOL4
VOL5
# ll /dev/oracleasm/disks/
total 0
brw-rw---- 1 oracle oinstall 8, 5 Jun  3 09:53 VOL1
brw-rw---- 1 oracle oinstall 8, 6 Jun  3 10:00 VOL2
brw-rw---- 1 oracle oinstall 8, 7 Jun  3 10:00 VOL3
brw-rw---- 1 oracle oinstall 8, 8 Jun  3 10:00 VOL4
brw-rw---- 1 oracle oinstall 8, 9 Jun  3 10:00 VOL5
//到這裏ASM的工作就完成了,這裏的磁盤可以被Oracle所使用,使用oracleasm-discover來探測ASM硬盤:
# oracleasm-discover
Using ASMLib from /opt/oracle/extapi/64/asm/orcl/1/libasm.so
[ASM Library - Generic Linux, version 2.0.4 (KABI_V2)]
Discovered disk: ORCL:VOL1 [4899762 blocks (2508678144 bytes), maxio 512]
Discovered disk: ORCL:VOL2 [4899762 blocks (2508678144 bytes), maxio 512]
Discovered disk: ORCL:VOL3 [4899762 blocks (2508678144 bytes), maxio 512]
Discovered disk: ORCL:VOL4 [4899762 blocks (2508678144 bytes), maxio 512]
Discovered disk: ORCL:VOL5 [7373772 blocks (3775371264 bytes), maxio 512]




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章