Oracle下建立ASM磁碟總結

luashin發表於2016-01-18

文件結構圖:

第一章如何建立ASM磁碟

1.1前言

1.2建立ASM磁碟的各種方法

..1方法一:Faking方式

..2方法二:直接修改/etc/sysconfig/rawdevices配置raw()

..3方法三:udev方式

    1...1 udev下的方法一:uuid方式

        一、udev SCSI Rulers配置

            1、RedHat 5 udev SCSI rules配置

            2、RedHat 6 udev SCSI rules配置

        二、配置udev繫結的scsi_id

        三、建立並配置udev rules檔案

        四、udedadm進行測試

        五、新增完成後,重啟udev,不同Linux發行版重啟

        六、檢視繫結的asm,如果此時還是看顧不到asm disk,

    1...2 udev下的方法二:raw方式

        一、裸裝置概述

..4方法四:Asmlib方式

    1...1 系統版本號

    1...2 Oracle asmlib包下載

    1...3 上傳並安裝上述的三個rmp軟體包:

    1...4 配置ASM

    1...5 系統添磁碟

    1...6 grid軟體安裝完畢後配置asm_diskstring路徑

    1...7 測試

    1...8 日誌

    1...9 報錯:

        一、ASMDevice is already labeled for ASM disk
1.3 總結

1  前言
無論是安裝單機版的asm還是rac都離不開ASM磁碟組的建立,建立ASM磁碟組的關鍵是建立好需要的asm磁碟,發現很多網友安裝grid軟體和grid例項,都在磁碟的建立這裡有很大的問題,本人又是喜歡總結的人,那麼今天我就總結了下各種建立asm磁碟的方法,以備大家查閱。
之前的2篇文章中用到了asm磁碟的建立,連線如下:
Oracle 單例項ASM+11gR2安裝 :http://blog.itpub.net/26736162/viewspace-1205206/
在vmware  workstations + rhel6.5 下 一步一步搭建oracle 11gR2 rac+dg :http://blog.itpub.net/26736162/viewspace-1328156/


2  建立asm磁碟的各種方法
2.1 方法一:Faking 方式
該方法不需要新增額外的磁碟,直接在已有的磁碟上來建立,本人推薦的方法之一。
------------------------ 直接貼指令碼,root使用者下執行
mkdir -p /oracle/asmdisk
dd if=/dev/zero of=/oracle/asmdisk/disk1 bs=1024k count=1000
dd if=/dev/zero of=/oracle/asmdisk/disk2 bs=1024k count=1000
dd if=/dev/zero of=/oracle/asmdisk/disk3 bs=1024k count=1000
dd if=/dev/zero of=/oracle/asmdisk/disk4 bs=1024k count=1000
dd if=/dev/zero of=/oracle/asmdisk/disk5 bs=1024k count=1000
/sbin/losetup /dev/loop1 /oracle/asmdisk/disk1
/sbin/losetup /dev/loop2 /oracle/asmdisk/disk2
/sbin/losetup /dev/loop3 /oracle/asmdisk/disk3
/sbin/losetup /dev/loop4 /oracle/asmdisk/disk4
/sbin/losetup /dev/loop5 /oracle/asmdisk/disk5
raw /dev/raw/raw1 /dev/loop1
raw /dev/raw/raw2 /dev/loop2
raw /dev/raw/raw3 /dev/loop3
raw /dev/raw/raw4 /dev/loop4
raw /dev/raw/raw5 /dev/loop5
chmod 660 /dev/raw/raw1
chmod 660 /dev/raw/raw2
chmod 660 /dev/raw/raw3
chmod 660 /dev/raw/raw4
chmod 660 /dev/raw/raw5
chown oracle:dba /dev/raw/raw1
chown oracle:dba /dev/raw/raw2
chown oracle:dba /dev/raw/raw3
chown oracle:dba /dev/raw/raw4
chown oracle:dba /dev/raw/raw5
------ 將以下內容新增到檔案/etc/rc.local檔案中
/sbin/losetup /dev/loop1 /oracle/asmdisk/disk1
/sbin/losetup /dev/loop2 /oracle/asmdisk/disk2
/sbin/losetup /dev/loop3 /oracle/asmdisk/disk3
/sbin/losetup /dev/loop4 /oracle/asmdisk/disk4
/sbin/losetup /dev/loop5 /oracle/asmdisk/disk5
raw /dev/raw/raw1 /dev/loop1
raw /dev/raw/raw2 /dev/loop2
raw /dev/raw/raw3 /dev/loop3
raw /dev/raw/raw4 /dev/loop4
raw /dev/raw/raw5 /dev/loop5
chmod 660 /dev/raw/raw1
chmod 660 /dev/raw/raw2
chmod 660 /dev/raw/raw3
chmod 660 /dev/raw/raw4
chmod 660 /dev/raw/raw5
chown oracle:dba /dev/raw/raw1
chown oracle:dba /dev/raw/raw2
chown oracle:dba /dev/raw/raw3
chown oracle:dba /dev/raw/raw4
chown oracle:dba /dev/raw/raw5
檢視結果:
  

2.2 方法二:直接修改/etc/sysconfig/rawdevices配置raw(rhel6之後不支援)
採用下面的方式來增加磁碟,即直接修改/etc/sysconfig/rawdevices(root帳戶)
Redhat平臺對raw裝置的配置在redhat 5之後有了變化。在redhat 5之前,直接配置/etc/sysconfig/rawdevices,透過/etc/init.d/rawdevices來管理raw裝置的啟動和關 閉。在Redhat 5之後,原來的raw裝置介面已經取消了,redhat 5中透過udev規則進行配置。 要配置,需要編輯/etc/udev/rules.d/60-raw.rules這個檔案。
[root@oradb ~]# vim /etc/sysconfig/rawdevices
[root@oradb ~]# cat /etc/sysconfig/rawdevices --檢視增加的內容為raw6,raw7
/dev/raw/raw2 /dev/sdb6
/dev/raw/raw3 /dev/sdb7
chown oracle:dba /dev/raw/raw[6-7]  --修改屬主,否則建立磁碟組時提示許可權不夠
[root@rhel5 ~]# chown oracle:dba /dev/raw/raw6
[root@rhel5 ~]# chown oracle:dba /dev/raw/raw7
[root@rhel5 ~]# ll /dev/raw/
total 0
crw-rw---- 1 oracle dba 162, 1 Dec 30 14:47 raw1
crw-rw---- 1 oracle dba 162, 2 Dec 30 14:47 raw2
crw-rw---- 1 oracle dba 162, 3 Dec 30 14:36 raw3
crw-rw---- 1 oracle dba 162, 4 Dec 30 14:36 raw4
crw-rw---- 1 oracle dba 162, 5 Dec 30 14:36 raw5
crw------- 1 oracle dba 162, 6 Dec 30 14:36 raw6
crw------- 1 oracle dba 162, 7 Dec 30 14:36 raw7


重啟裸裝置服務
[root@rhel5 ~]# /sbin/service rawdevices restart
Assigning devices:
/dev/raw/raw6  -->   /dev/sdb6
/dev/raw/raw6: bound to major 8, minor 22
/dev/raw/raw7  -->   /dev/sdb7
/dev/raw/raw7: bound to major 8, minor 23
done
將下面的內容增加到/etc/rc.local檔案(root帳戶),重新啟動主機,使得屬主變為oracle
chown oracle:dba /dev/raw/raw6
chown oracle:dba /dev/raw/raw7
chmod 660 /dev/raw/raw6
chmod 660 /dev/raw/raw7
 
SQL> select instance_name,status from v$instance;
INSTANCE_NAME    STATUS
---------------- ------------
+ASM        STARTED
 
SQL> set line 999
SQL> select name,state,free_mb,required_mirror_free_mb,usable_file_mb from v$asm_diskgroup;
NAME STATE   FREE_MB   REQUIRED_MIRROR_FREE_MB  USABLE_FILE_MB
----- -------- --------- ------------------------ --------------
DATA MOUNTED  941    0                    941
DG1  MOUNTED 1862   0                    931
 
SQL> create diskgroup DG1 normal redundancy disk '/dev/raw/raw6','/dev/raw/raw7';  --建立磁碟組DG1
 
SQL> select * from v$fixed_table where name like '%ASM%'; --檢視和asm相關的檢視
 
SQL> select name,allocation_unit_size,state,type,free_mb,required_mirror_free_mb req_mi_fr_mb,usable_file_mb from v$asm_diskgroup;
NAME ALLOCATION_UNIT_SIZE STATE  TYPE  FREE_MB REQ_MI_FR_MB USABLE_FILE_MB
---- -------------------- ------- ------ ------- ------------ ---------------
DG1 1048576              MOUNTED NORMAL 296    0           148
 
SQL> create diskgroup DG2 normal redundancy disk '/dev/raw/raw3','/dev/raw/raw4';   --建立磁碟組DG2
 
SQL> select name,state,free_mb,required_mirror_free_mb,usable_file_mb from v$asm_diskgroup;   --檢視磁碟組的狀態及資訊
NAME STATE  FREE_MB    REQUIRED_MIRROR_FREE_MB USABLE_FILE_MB
---- ------- ---------- ----------------------- --------------
DG1 MOUNTED 296      0                       148
DG2 MOUNTED 296      0                       148
 
SQL> select disk_number,total_mb,free_mb from v$asm_disk;
DISK_NUMBER TOTAL_MB  FREE_MB
----------- ---------- ----------
  1    199    148
  0    199    148
  1    199    148
  0    199    148
重新啟動Linux 主機後
SQL> startup    --重新啟動ASM例項,收到了磁碟組insufficient 資訊
ASM instance started
ORA-15032: not all alterations performed
ORA-15063: ASM discovered an insufficient number of disks for diskgroup "DG2"
ORA-15063: ASM discovered an insufficient number of disks for diskgroup "DG1"
SQL> ho ls -hlt /dev/raw    # Linux主機重新啟動之後屬主性質已發生變化
total 0
crw------- 1 root root 162, 4 Nov 10 20:28 raw4
crw------- 1 root root 162, 3 Nov 10 20:28 raw3
crw------- 1 root root 162, 2 Nov 10 20:28 raw2
crw------- 1 root root 162, 1 Nov 10 20:28 raw1
原因:原始裝置在引導時會重新對映。預設情況下,在引導時原始裝置的擁有者將更改為root使用者
    將下面的內容增加到/etc/rc.local檔案(root帳戶),重新啟動主機,使得屬主變為oracle,則不再出現類似的提示
chown oracle:dba /dev/raw/raw1
chown oracle:dba /dev/raw/raw2
chown oracle:dba /dev/raw/raw3
chown oracle:dba /dev/raw/raw4
chmod 660 /dev/raw/raw1
chmod 660 /dev/raw/raw2
chmod 660 /dev/raw/raw3
chmod 660 /dev/raw/raw4
SQL> drop diskgroup dg1;   --將剛才建立的兩個磁碟組刪除
SQL> drop diskgroup dg2;
使用root帳戶清除/etc/udev/rules.d/60-raw.rules /etc/sysconfig/rawdevices以及/etc/rc.local剛剛增加的記錄
便於下面使用asmlib來建立asm磁碟


2.3 方法三:udev方式
又可以分為2種方式,採用uuid來繫結或採用raw來繫結,採用uuid需要新增多塊磁碟,而採用raw方式不需要新增多個磁碟。
2.3.1 udev下的方法一:uuid方式 
1、RedHat 5 udev SCSI Rules配置
1 獲取需要繫結為ASM Disk的磁碟uuid
# /sbin/scsi_id -g -u -s /block/sdb
SATA_VBOX_HARDDISK_VBd306dbe0-df3367e3_
 
2 新建/etc/udev/rules.d/99-oracle-asmdevices.rules,增加以下內容
KERNEL=="sd*1",BUS=="scsi",PROGRAM=="/sbin/scsi_id -g -u -s /block/$parent", RESULT=="SATA_VBOX_HARDDISK_VBd306dbe0-df3367e3_",NAME="asm-disk1",OWNER="oracle",GROUP="dba",MODE="0660"

3 重啟服務:
[root@rac1 ~]# start_udev
Starting udev:         [  OK  ]
 
2、RedHat 6 udev SCSI Rules
1 編輯/etc/scsi_id.config檔案,如果該檔案不存在,則建立該檔案,新增如下行:
options=--whitelisted --replace-whitespace
備註:在測試中,此步驟可以省略

2 獲取需要繫結為ASM Disk的磁碟uuid,比如我們要使用/dev/sdc作為ASM磁碟,那麼:
# scsi_id --whitelisted --replace-whitespace --device=/dev/sdc
1ATA_VBOX_HARDDISK_VB36a9e548-1838194a

# /sbin/scsi_id -g -u -d /dev/sdb
SATA_VBOX_HARDDISK_VBd306dbe0-df3367e3_
 
3 新建/etc/udev/rules.d/99-oracle-asmdevices.rules增加以下內容
KERNEL=="sd*1",BUS=="scsi",PROGRAM=="/sbin/scsi_id -g -u -d /dev/$parent",RESULT=="SATA_VBOX_HARDDISK_VBd306dbe0-df3367e3_",NAME="asm-disk1",OWNER="oracle",GROUP="dba",MODE="0660"

KERNEL=="dm-*",PROGRAM="scsi_id --page=0x83 --whitelisted --device=/dev/%k",RESULT=="3600c0ff00015c7b70253c05001000000",OWNER:="grid",GROUP:="oinstall"
KERNEL=="dm-*",PROGRAM="scsi_id --page=0x83 --whitelisted --device=/dev/%k",RESULT=="3600c0ff00015c7b72553c05001000000",OWNER:="grid",GROUP:="oinstall"
KERNEL=="dm-*",PROGRAM="scsi_id --page=0x83 --whitelisted --device=/dev/%k",RESULT=="3600c0ff00015c7b77165c05001000000",OWNER:="grid",GROUP:="oinstall"
KERNEL=="dm-*",PROGRAM="scsi_id --page=0x83 --whitelisted --device=/dev/%k",RESULT=="3600c0ff00015c7b73753c05001000000",OWNER:="grid",GROUP:="oinstall"
KERNEL=="dm-*",PROGRAM="scsi_id --page=0x83 --whitelisted --device=/dev/%k",RESULT=="3600c0ff00015c7b78065c05001000000",OWNER:="grid",GROUP:="oinstall"

KERNEL=="sd*",BUS=="scsi",PROGRAM=="/sbin/scsi_id --whitelisted --replace-whitespace --device=/dev/$name",RESULT=="3600c0ff00015c7b70253c05001000000",NAME="asmocrvote01", OWNER="grid", GROUP="asmadmin", MODE="0660"
KERNEL=="sd*",BUS=="scsi",PROGRAM=="/sbin/scsi_id --whitelisted --replace-whitespace --device=/dev/$name",RESULT=="3600c0ff00015c7b77165c05001000000",NAME="asmdata01", OWNER="grid", GROUP="asmadmin", MODE="0660"
KERNEL=="sd*",BUS=="scsi",PROGRAM=="/sbin/scsi_id --whitelisted --replace-whitespace --device=/dev/$name",RESULT=="3600c0ff00015c7b73753c05001000000",NAME="asmdata02", OWNER="grid", GROUP="asmadmin", MODE="0660"
KERNEL=="sd*",BUS=="scsi",PROGRAM=="/sbin/scsi_id --whitelisted --replace-whitespace --device=/dev/$name",RESULT=="3600c0ff00015c7b72553c05001000000",NAME="asmfra01",OWNER="grid",GROUP="asmadmin",MODE="0660"

4 重啟服務:
[root@rac1 ~]# start_udev
Starting udev:         [  OK  ]
 
 一、配置udev繫結的scsi_id
注意以下兩點:
首先切換到root使用者下:
①不同的作業系統scsi_id命令的位置不同。
[root@rhel5 ~]# cat /etc/issue
Red Hat Enterprise Linux Server release 5.5 (Tikanga)
Kernel \r on an \m
 
[root@rhel5 ~]# which scsi_id
/sbin/scsi_id

②編輯/etc/scsi_id.config檔案,如果該檔案不存在,則建立該檔案並新增如下行:
[root@localhost ~]# vim /etc/scsi_id.config
options=--whitelisted --replace-whitespace

5.3如果是使用VMware虛擬機器,直接輸入scsi_id命令可能無法獲取id,需修改VMware檔案引數,這一步如果在新增磁碟的時候做過這一步的話就可以跳過了,直接獲取uuid即可
[root@localhost ~]# scsi_id --whitelisted --replace-whitespace --device=/dev/sdb
[root@localhost ~]# scsi_id --whitelisted --replace-whitespace --device=/dev/sdc
D:\VMs\Oracle Database 11gR2\Oracle Database 11gR2.vmx
使用文字編輯器編輯該檔案,在尾部新增一行引數:
disk.EnableUUID="TRUE"
儲存檔案,重新啟動虛擬機器。這裡注意修改檔案的時候一定要在關機的狀態下修改,或者scsi_id -g -u /dev/sdc來獲得uuid,-g -u引數在rhel6以後已經不用了
[root@localhost share]# scsi_id --whitelisted --replace-whitespace --device=/dev/sdb
36000c29fbe57659626ee89b4fba07616
[root@localhost share]# scsi_id --whitelisted --replace-whitespace --device=/dev/sdc
36000c29384cde894e087e5f0fcaa80f4
[root@localhost share]# scsi_id --whitelisted --replace-whitespace --device=/dev/sdd
36000c29022aee23728231ed9b1f9743d
[root@localhost share]# scsi_id --whitelisted --replace-whitespace --device=/dev/sde
36000c2938f431664218d1d2632ff1352 
  
  二、建立並配置udev rules檔案
[root@localhost ~]# vim /etc/udev/rules.d/99-oracle-asmdevices.rules
KERNEL=="sd*",SUBSYSTEM=="block",PROGRAM=="/sbin/scsi_id --whitelisted --replace-whitespace --device=/dev/$name",RESULT=="36000c29fe0fc917d7e9982742a28ce7c",NAME="asm-diskb",OWNER="grid",GROUP="asmadmin",MODE="0660"
KERNEL=="sd*",SUBSYSTEM=="block",PROGRAM=="/sbin/scsi_id --whitelisted --replace-whitespace --device=/dev/$name",RESULT=="36000c293ffc0900fd932348de4b6baf8",NAME="asm-diskc",OWNER="grid",GROUP="asmadmin",MODE="0660"
根據步驟5獲取的ID修改RESULT值
這裡需要注意,一個KERNEL就是一行,不能換行的,我之前就是犯了這個錯誤的
  
新增4塊硬碟:
KERNEL=="sd*",SUBSYSTEM=="block",PROGRAM=="/sbin/scsi_id --whitelisted --replace-whitespace --device=/dev/$name",RESULT=="36000c29346c1344ffb26f0e5603d519e",NAME="asm-diskb",OWNER="grid",GROUP="asmadmin",MODE="0660"
KERNEL=="sd*",SUBSYSTEM=="block",PROGRAM=="/sbin/scsi_id --whitelisted --replace-whitespace --device=/dev/$name",RESULT=="36000c29d08ee059a345571054517cd03",NAME="asm-diskc",OWNER="grid",GROUP="asmadmin",MODE="0660"
KERNEL=="sd*",SUBSYSTEM=="block",PROGRAM=="/sbin/scsi_id --whitelisted --replace-whitespace --device=/dev/$name",RESULT=="36000c295037a910bfb765af8f400aa07", NAME="asm-diskd",OWNER="grid",GROUP="asmadmin",MODE="0660"
KERNEL=="sd*",SUBSYSTEM=="block",PROGRAM=="/sbin/scsi_id --whitelisted --replace-whitespace --device=/dev/$name",RESULT=="36000c2982bda048f642acd3c429ec983", NAME="asm-diske",OWNER="grid",GROUP="asmadmin",MODE="0660"
  
注意:這裡的GROUP="asmadmin",最好修改成GROUP="asmdba",不然最後可能用dbca建立資料庫例項的時候找不見磁碟組。
   

 三、udevadm進行測試
用udevadm進行測試,注意udevadm命令不接受/dev/sdc這樣的掛載裝置名,必須是使用/sys/block/sdc這樣的原始裝置名。
udevadm test /sys/block/sdcudevadm info --query=all --path=/sys/block/sdcudevadm info --query=all --name=asm-disk1
在顯示中,有類似如下輸出,表示測試正確,/dev/sdc裝置在udev啟動以後將會繫結為/dev/asm-disk1:
udevadm_test: UDEV_LOG=6
udevadm_test: DEVPATH=/devices/pci0000:00/0000:00:0d.0/host4/target4:0:0/4:0:0:0/block/sdcudevadm_test: MAJOR=8
udevadm_test: MINOR=32
udevadm_test: DEVNAME=/dev/asm-disk1
udevadm_test: DEVTYPE=disk
udevadm_test: ACTION=add
udevadm_test: SUBSYSTEM=block

 四、新增完成後,重啟udev,不同Linux發行版本重啟方式不一樣。
該步驟慢一點,大約可能需要30秒左右吧,等等等等。。。。。。
[root@localhost ~]# start_udev
Starting udev:                [  OK  ]
 
  五、檢視繫結的asm,如果此時還是看不到asm disk,請重啟作業系統後再檢視。
[root@localhost ~]# ll /dev/asm*
brw-rw---- 1 grid asmadmin 8, 17 Oct 17 14:26 /dev/asm-diskb
brw-rw---- 1 grid asmadmin 8, 33 Oct 17 14:26 /dev/asm-diskc
   
   
2.3.2 udev下的方法二:raw方式
a.配置裸裝置對映,修改/etc/udev/rules.d/60-raw.rules檔案
使用root帳戶修改/etc/udev/rules.d/60-raw.rules 按如下方式新增磁碟
[root@oradb ~]# cat /etc/udev/rules.d/60-raw.rules       --檢視新增的內容
ACTION=="add",KERNEL=="/dev/sdb8",RUN+="/bin/raw /dev/raw/raw8 %N"
ACTION=="add",ENV{MAJOR}=="8",ENV{MINOR}=="24",RUN+="/bin/raw /dev/raw/raw8 %M %m"
ACTION=="add",KERNEL=="/dev/sdb9",RUN+="/bin/raw /dev/raw/raw9 %N"
ACTION=="add",ENV{MAJOR}=="8",ENV{MINOR}=="25",RUN+="/bin/raw /dev/raw/raw9 %M %m"
ACTION=="add",KERNEL=="raw8",OWNER="grid",GROUP="asmadmin",MODE="0660"
ACTION=="add",KERNEL=="raw9",OWNER="grid",GROUP="asmadmin",MODE="0660"
 
[root@oradb ~]# start_udev    #重啟udev服務
Starting udev: [  OK  ]

[root@rhel5 ~]# raw -qa
/dev/raw/raw1: bound to major 7, minor 1
/dev/raw/raw2: bound to major 7, minor 2
/dev/raw/raw3: bound to major 7, minor 3
/dev/raw/raw4: bound to major 7, minor 4
/dev/raw/raw5: bound to major 7, minor 5
/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

[root@rhel5 ~]# ll /dev/raw*
crw------- 1 root root 162, 0 Dec 30 14:36 /dev/rawctl
/dev/raw:
total 0
crw------- 1 oracle dba      162, 1 Dec 30 15:29 raw1
crw------- 1 oracle dba      162, 2 Dec 30 15:29 raw2
crw------- 1 oracle dba      162, 3 Dec 30 14:36 raw3
crw------- 1 oracle dba      162, 4 Dec 30 14:36 raw4
crw------- 1 oracle dba      162, 5 Dec 30 14:36 raw5
crw------- 1 oracle dba      162, 6 Dec 30 15:29 raw6
crw------- 1 oracle dba      162, 7 Dec 30 15:29 raw7
crw-rw---- 1 grid  asmadmin      162, 8 Dec 30 15:28 raw8
crw-rw---- 1 grid  asmadmin      162, 9 Dec 30 15:28 raw9


SQL> create diskgroup DG2 external redundancy disk '/dev/raw/raw8';
Diskgroup created.

  一、裸裝置概述 
裸裝置:也叫裸分割槽(原始分割槽)是一種沒有經過格式化,不被Unix/Linux透過檔案系統來讀取的特殊字元裝置。裸裝置可以繫結一個分割槽,也可以繫結一個磁碟。 
字元裝置:對字元裝置的讀寫不需要透過OS的buffer。它不可被檔案系統mount。 
塊裝置:對塊裝置的讀寫需要透過OS的buffer,它可以被mount到檔案系統中。
這個與linux的版本相關,在舊版本中,最多隻可以有256個裸裝置,Linux 4下做多可以繫結81Array2個裸裝置。但是在linux下,最多隻能有255個分割槽,所以如果用裸裝置繫結分割槽,最多隻能繫結255個裸裝置。如果是用lvm,則沒有這個限制。
Linux下單個磁碟最多可以有15個分割槽。3個主分割槽 + 1個擴充套件分割槽 + 11個邏輯分割槽。 
建議的分割槽方法是:先分3個主分割槽,第四個分割槽為擴充套件分割槽,然後在擴充套件分割槽中再分成11個邏輯分割槽。 
注意,裸裝置不要繫結在擴充套件分割槽上。  
linux下如果需要使用裸裝置,則需要手工進行繫結,unix下則不用。 
因為Unix中每一個塊裝置都會有一個對應的字元裝置用於非快取(unbuffered)I/O,這就是他對應的裸裝置了。而Linux中rawio的則實現了一套非繫結(unbound)的裸裝置/dev/rawN或者/dev/raw/rawN和一個控制裝置/dev/rawct用來把他們繫結到塊裝置上。所以當需要使用一個裸裝置的時候,就需要把他和一個真實存在的塊裝置對應起來,這一個步驟實際上就是完成了Unix裡的自動對應一個非快取字元裝置。
major和minor device number
在unix/linux系統中,一切都是檔案。所有硬碟、軟盤、鍵盤等裝置都用檔案來代表,對應著/dev下面的檔案。對於應用程式來說,可以像對待普通檔案一樣開啟、關閉、讀寫這些裝置檔案。但是這種檔名,比如/dev/sda、/dev/raw/raw1都是使用者空間名稱,OS Kernel根本不知道這個名稱指的是什麼。在核心空間是透過major、minor device number來區分裝置的。 
major device number可以看作是裝置驅動程式,被同一裝置驅動程式管理的裝置有相同的major device number.這個數字實際是Kernel中device driver table的索引,這個表儲存著不同裝置驅動程式。而minor device number用來代表被訪問的具體裝置。也就是說Kernel根據major device number 找到裝置驅動程式,然後再從minor device number獲得裝置位置等屬性。所有這些major device number 是已經預先分配好的。詳細資訊可以從http://www.lanana.org/docs/device-list/devices-2.6+.txt 檢視。比如裸裝置是162,scsi塊裝置是8 
/etc/udev/rules.d/60-raw.rules 
Redhat平臺對raw裝置的配置在redhat 5之後有了變化。在redhat 5之前,直接配置/etc/sysconfig/rawdevices件,透過/etc/init.d/rawdevices來管理raw裝置的啟動和關 閉。在Redhat 5之後,原來的raw裝置介面已經取消了,redhat 5中透過udev規則進行配置。 要配置,需要編輯/etc/udev/rules.d/60-raw.rules這個檔案。
cat /etc/udev/rules.d/60-raw.rules
# Enter raw device bindings here.

# An example would be: 
# ACTION=="add",KERNEL=="sda",RUN+="/bin/raw /dev/raw/raw1 %N" 
# to bind /dev/raw/raw1 to /dev/sda, or 
# ACTION=="add",ENV{MAJOR}=="8",ENV{MINOR}=="1",RUN+="/bin/raw /dev/raw/raw2 %M %m" 
# to bind /dev/raw/raw2 to the device with major 8, minor 1. 
其中 
ACTION=="add", KERNEL="<device name>", RUN+="raw /dev/raw/rawX %N" 
配置裝置名稱,用你需要繫結的裝置名稱替換 <device name>(如:/dev/sda1),X為裸裝置號 
主/次號碼: 
ACTION=="add", ENV{MAJOR}="A", ENV{MINOR}="B", RUN+="raw /dev/raw/rawX %M %m"  
"A" 和 "B" 是裝置的主/次號碼,X是系統使用的raw裝置號碼。
個人對redhat管理raw的過程理解為: 在redhat 5中,是透過udev來管理raw裝置的,而udev是透過 MAJOR和MINOR來識別 raw裝置 。 故需要將裝置號和裸裝置號進行繫結,而主裝置號和次裝置號可以自行指定或者由系統自動分配。 根據red hat的官方文件中關於raw.rule的示例中說KERNEL==..或ENV{MAJOR}...只需要任意配置一個就可以,但有些網友經過試驗,驗證必須二者同時配置才可以。
配置/etc/udev/rules.d/60-raw.rules檔案
檢視磁碟分割槽情況
# fdisk -l /dev/sdb
Disk /dev/sdb: 4880 MB, 4880072704 bytes
255 heads, 63 sectors/track, 593 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
DeviceBoot   Start     End     Blocks   Id  System
/dev/sdb1    1       25      200781   83  Linux
/dev/sdb2    26       50      200812+   83  Linux
配置/etc/udev/rules.d/60-raw.rules檔案
# grep -v ^# /etc/udev/rules.d/60-raw.rules
ACTION=="add",KERNEL=="sdb1",RUN+="/bin/raw /dev/raw/raw1 %N"
ACTION=="add",KERNEL=="sdb2",RUN+="/bin/raw /dev/raw/raw2 %N"
ACTION=="add",ENV{MAJOR}=="3",ENV{MINOR}=="2",RUN+="/bin/raw /dev/raw/raw1 %M %m"
ACTION=="add",ENV{MAJOR}=="7",ENV{MINOR}=="2",RUN+="/bin/raw /dev/raw/raw2 %M %m"

啟動raw裝置
# start_udev
Starting udev:                  [  OK  ] 

檢視配置情況
# raw -qa
/dev/raw/raw1:  bound to major 8, minor 17 
/dev/raw/raw2:  bound to major 8, minor 18 
這裡筆者不清楚為什麼主裝置號和復裝置號並不和我在/etc/udev/rules.d/60-raw.rules指定的一樣,望瞭解的讀者告知,系統核心資訊如下 
# uname  -a 
Linux rac1 2.6.18-164.el5 #1 SMP Tue Aug 18 15:51:54 EDT 2009 i686 i686 i386 GNU/Linux 
# cat /etc/redhat-release 
Red Hat Enterprise Linux Server release 5.4 (Tikanga) 
可以透過如下方式指定 主裝置號和復裝置號 
# raw /dev/raw/raw1 1 1 
/dev/raw/raw1:  bound to major 1, minor 1 
raw /dev/raw/raw[n] /dev/xxx 
其中n的範圍是0-8191。raw目錄不存在的話會被自動建立。執行這個命令,就會在/dev/raw下生成一個對應的raw[n]檔案用命令方式繫結裸裝置在系統重啟後會失效。
刪除裸裝置 
# raw /dev/raw/raw2 0 0 
/dev/raw/raw2:  bound to major 0, minor 0 
# raw -qa 
/dev/raw/raw1:  bound to major 1, minor 1 
以上設定必須同時修改/etc/udev/rules.d/60-raw.rules才能保證重啟後生效,否則重啟後系統會重新讀取/etc/udev/rules.d/60-raw.rules
如需設定raw裝置的使用者和許可權資訊,可在/etc/udev/rules.d/60-raw.rules檔案裡新增如下資訊:
ACTION=="add",KERNEL=="raw1",OWNER="dave",GROUP="tianlesoftware",MODE="660"
如果有多個raw裝置,可以寫成:
ACTION=="add",KERNEL=="raw[1-4]",OWNER="dave",GROUP="tianlesoftware",MODE="660"
# chown oracle:oinstall /dev/raw/raw[1-4] 
# chmod 775 /dev/raw/raw[1-4]  
注意:在核心2.6.9-89.5AXS2之前使用/etc/sysconfig/rawdevices和/etc/udev/permissions.d/50-udev.permissions進行raw裝置的配置和許可權管理。在核心 2.6.18-128.7AXS3以後則使用了本文介紹的 /etc/udev/rules.d/60-raw.rules進行raw裝置的管理
確定裸裝置的大小比較笨的辦法是,找出看裸裝置對應的是那個實際的塊裝置,然後用fdisk -l /dev/[h,s]dXN看那個塊裝置的大小就好了。比較簡單的辦法是用blockdev命令來計算,如: 
# blockdev --getsize /dev/raw/raw1 
11718750  
11718750表示有多少OS BLIOCK。 
一般一個OS BLOCK大小是512位元組,所以11718750*512/1024/1024= 5722(m) 就是裸裝置的大小。
使用裸裝置作為oracle的資料檔案的注意事項
1、一個裸裝置只能放置一個資料檔案 
2、資料檔案的大小不能超過裸裝置的大小 
如果是日誌檔案,則裸裝置最大可用大小=裸裝置對應分割槽大小 - 1 * 512 (保留一個redo lock) 
如果是資料檔案,則裸裝置最大可用大小=裸裝置對應分割槽大小 - 2 * db_block_size(保留兩個block)為了簡單起見,對所有的檔案設定稱比裸裝置小1M即可。 
3、資料檔案最好不要設定稱自動擴充套件,如果設定稱自動擴充套件,一定要把maxsize設定設定為比裸裝置小 
4、linux下oracle不能直接把邏輯卷作為裸裝置,也要進行繫結。unix下就不需要。


2.4 方法四:Asmlib方式
asmlib是oracle提供的軟體,不支援rhel6了,具體參考:
http://blog.itpub.net/26736162/viewspace-1205206/
2.4.1 系統版本號
[root@rhel5 ~]# uname -rm
2.6.18-194.el5 x86_64
2.4.2 Oracle asmlib下載
1. 在官網()的搜尋中輸入asmlib搜尋後可以直接找到
  
http:///technetwork/server-storage/linux/asmlib/index-101839.html
  
 
  
選擇對應的版本 rhel5
去下載如下asm的三個rpm軟體包(本機器下載的是標紅的三個軟體包,安裝包一定要下載正確的版本否則導致後續配置無法進行),注意32位和64的差別:
  
  
Intel EM64T (x86_64) Architecture
Library and Tools
oracleasm-support-2.1.8-1.el5.x86_64.rpm
oracleasmlib-2.0.4-1.el5.x86_64.rpm
Drivers for kernel 2.6.18-194.el5
oracleasm-2.6.18-194.el5xen-2.0.5-1.el5.x86_64.rpm
oracleasm-2.6.18-194.el5debug-2.0.5-1.el5.x86_64.rpm
oracleasm-2.6.18-194.el5-debuginfo-2.0.5-1.el5.x86_64.rpm


2.4.3 上傳並安裝上述的三個rpm軟體包:
[root@rhel5 tmp]# ll oracleasm*
-rw-r--r-- 1 root root 137486 Dec 30 10:28 oracleasm-2.6.18-194.el5-2.0.5-1.el5.x86_64.rpm
-rw-r--r-- 1 root root  14176 Jun  2  2013 oracleasmlib-2.0.4-1.el5.x86_64.rpm
-rw-r--r-- 1 root root  90225 Jun  2  2013 oracleasm-support-2.1.8-1.el5.x86_64.rpm
[root@rhel5 tmp]# rpm -ivh oracleasm*.rpm
warning: oracleasm-2.6.18-194.el5-2.0.5-1.el5.x86_64.rpm: Header V3 DSA signature: NOKEY, key ID 1e5e0159
Preparing...         ########################################### [100%]
   1:oracleasm-support ########################################### [ 33%]
   2:oracleasm-2.6.18-194.el########################################### [ 67%]
   3:oracleasmlib       ########################################### [100%]


驗證安裝的包
[root@rhel5 ~]# rpm -qa | grep asm
oracleasm-2.6.18-194.el5-2.0.5-1.el5
oracleasmlib-2.0.4-1.el5
oracleasm-support-2.1.8-1.el5


  2.4.4 配置ASM
[root@rhel5 tmp]# /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 []: grid
Default group to own the driver interface []: asmadmin
Start Oracle ASM library driver on boot (y/n) [n]: y
Scan for Oracle ASM disks on boot (y/n) [y]: y
Writing Oracle ASM library driver configuration: done
Initializing the Oracle ASMLib driver:                   [  OK  ]
Scanning the system for Oracle ASMLib disks:             [  OK  ]


如果配置錯誤,可以重新配置:
[root@rhel5 tmp]# /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]: grid
Default group to own the driver interface [oinstall]: asmadmin
Start Oracle ASM library driver on boot (y/n) [y]: y
Scan for Oracle ASM disks on boot (y/n) [y]: y
Writing Oracle ASM library driver configuration: done
Initializing the Oracle ASMLib driver:                [  OK  ]
Scanning the system for Oracle ASMLib disks:          [  OK  ]


 2.4.5 系統新增磁碟
在Vmware分配幾個空閒的磁碟用於建立ASM磁碟,建議使用不同的磁碟控制器
下面使用個磁碟來組建ASM磁碟組,分別為sdd,sde,sdf,sdg
分別對個磁碟進行分割槽,列出sdd的分割槽樣例,其餘如法炮製
[root@oradb ~]# fdisk /dev/sdd
Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-261, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-261, default 261):
Using default value 261
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
系統新增一塊硬碟sdb,然後進行分割槽 fdisk /dev/sdb ,分割槽之後:
[root@rhel5 ~]# ll /dev/sdb*
brw-r----- 1 root disk 8, 16 Dec 30 10:54 /dev/sdb
brw-r----- 1 root disk 8, 17 Dec 30 10:59 /dev/sdb1
brw-r----- 1 root disk 8, 18 Dec 30 11:00 /dev/sdb2
brw-r----- 1 root disk 8, 19 Dec 30 11:00 /dev/sdb3
brw-r----- 1 root disk 8, 20 Dec 30 11:00 /dev/sdb4


[root@rhel5 ~]# /etc/init.d/oracleasm createdisk VOL1 /dev/sdb1
Marking disk "VOL1" as an ASM disk:        [  OK  ]
[root@rhel5 ~]# /etc/init.d/oracleasm createdisk VOL2 /dev/sdb2
Marking disk "VOL2" as an ASM disk:         [  OK  ]
[root@rhel5 ~]# /etc/init.d/oracleasm createdisk VOL3 /dev/sdb3
Marking disk "VOL3" as an ASM disk:       [  OK  ]
[root@rhel5 ~]# /etc/init.d/oracleasm createdisk VOL4 /dev/sdb4
Marking disk "VOL4" as an ASM disk:        [  OK  ]


[root@rhel5 oracle]# ll /dev/oracleasm/disks/*
brw-rw---- 1 grid asmadmin 8, 17 Dec 30 10:59 /dev/oracleasm/disks/VOL1
brw-rw---- 1 grid asmadmin 8, 18 Dec 30 11:00 /dev/oracleasm/disks/VOL2
brw-rw---- 1 grid asmadmin 8, 19 Dec 30 11:00 /dev/oracleasm/disks/VOL3
brw-rw---- 1 grid asmadmin 8, 20 Dec 30 11:00 /dev/oracleasm/disks/VOL4


[root@rhel5 ~]# /etc/init.d/oracleasm listdisks
VOL1
VOL2
VOL3
VOL4


[root@rhel5 ~]# /etc/init.d/oracleasm deletedisk VOL4
Removing ASM disk "VOL4":                      [  OK  ]
 
2.4.6 grid軟體安裝完畢後配置asm_diskstring路徑
[grid@rhel5 ~]$ sqlplus / as sysasm
SQL*Plus: Release 11.2.0.3.0 Production on Tue Dec 30 12:09:19 2014
Copyright (c) 1982, 2011, Oracle.  All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Automatic Storage Management option
SQL> alter system set asm_diskstring='/dev/raw/*','/dev/oracleasm/disks/VOL*';
System altered.
 
SQL> show parameter asm_diskstring
NAME      TYPE VALUE
------------------------------------ ----------- ------------------------------
asm_diskstring      string /dev/raw/*, /dev/oracleasm/disks/VOL*


SQL> set line 9999
SQL> SELECT a.group_number,disk_number,mount_status,a.name,path FROM v$asm_disk a;
GROUP_NUMBER DISK_NUMBER MOUNT_S NAME PATH
------------ ----------- ------- ------------------------------
0      0         CLOSED /dev/raw/raw5
0       1 CLOSED /dev/raw/raw4
0       2 CLOSED /dev/raw/raw3
0       3 CLOSED /dev/raw/raw2
0       4 CLOSED /dev/oracleasm/disks/VOL4
0       5 CLOSED /dev/oracleasm/disks/VOL3
0       6 CLOSED /dev/oracleasm/disks/VOL2
0       7 CLOSED /dev/oracleasm/disks/VOL1
1       0 CACHED DATA_0000 /dev/raw/raw1
9 rows selected.


磁碟搜尋路徑問題
SQL> create diskgroup DG1 normal redundancy disk 'ORCL:VOL1','ORCL:VOL2';
create diskgroup DG1 normal redundancy disk 'ORCL:VOL1','ORCL:VOL2'
*
ERROR at line 1:
ORA-15018: diskgroup cannot be created
ORA-15031: disk specification 'ORCL:VOL2' matches no disks
ORA-15031: disk specification 'ORCL:VOL1' matches no disks
使用oraclasm建立磁碟後,預設會在/dev/oracleasm/disks目錄下新增剛剛建立的磁碟對映。修改asm_diskstring修改路徑之後再次建立即可
SQL> alter system set asm_diskstring='/dev/oracleasm/disks/VOL*'


2.4.7 測試
SQL> drop diskgroup dg1;
Diskgroup dropped.
 
SQL> select name,state,free_mb,required_mirror_free_mb,usable_file_mb from v$asm_diskgroup;
NAME      STATE    FREE_MB REQUIRED_MIRROR_FREE_MB USABLE_FILE_MB
--------------- ----------- ------- ----------------------- --------------
DATA      MOUNTED   941   0                      941


SQL> create diskgroup DG1 normal redundancy failgroup FG1 disk '/dev/oracleasm/disks/VOL1' name VOL1 failgroup FG2 disk '/dev/raw/raw2' name VOL2;
 Diskgroup created.
 
SQL> select name,state,free_mb,required_mirror_free_mb,usable_file_mb from v$asm_diskgroup;
NAME   STATE  FREE_MB REQUIRED_MIRROR_FREE_MB USABLE_FILE_MB
------- -------- ------- ----------------------- --------------
DATA  MOUNTED 941   0                      941
DG1   MOUNTED 1862  0                      931


2.4.8 日誌
tail -f /var/log/oracleasm
 
2.4.9 報錯:
一、ASM: Device is already labeled for ASM disk
當一塊磁碟或分割槽已經被一個DataGroup用過,此時想用這塊磁碟或分割槽重新生成Asmlib生成Oracle 磁碟裝置時即會報標題的錯。
類似如下:
[oracle@v vfs]$ /etc/init.d/oracleasm createdisk VOL1 /dev/sda1
Marking disk "/dev/sda1" as an ASM disk: asmtool:
Device "/dev/sda1" is already labeled for ASM disk ""         [FAILED]


[oracle@v vfs]$ /etc/init.d/oracleasm deletedisk VOL1
Removing ASM disk "VOL1"                                      [FAILED]


解決問題其實很簡單,把磁碟頭清一下就可以了:
[oracle@v vfs]$ dd if=/dev/zero of=<your_raw_device> bs=1024 count=100


現在操作就該正常了:
oracle@vvfs$ dd if=/dev/zero of=/dev/sda1 bs=1024 count=100
100+0 records in
100+0 records out


[oracle@v vfs]$ /etc/init.d/oracleasm createdisk VOL /dev/sda1
Marking disk "/dev/sda1" as an ASM disk: [ OK ]


3 總結
    本文提到的4種方法各有優缺點,其中方法二和方法四是rhel6之前的版本支援,方法三需要新增多塊磁碟,方法一最直接,如若網友有興趣,可以列個表格來比對他們的區別。
注意:每一種方法建立asm磁碟後都需要修改asm_diskstring的路徑,否則不能找到新新增的磁碟:
SQL> alter system set asm_diskstring='/dev/raw/*','/dev/oracleasm/disks/VOL*';

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9034054/viewspace-1978545/,如需轉載,請註明出處,否則將追究法律責任。

相關文章