裸設備概述html
裸設備:也叫裸分區(原始分區),是一種沒有通過格式化,不被Unix/Linux經過文件系統來讀取的特殊字符設備。裸設備能夠綁定一個分區,也能夠綁定一個磁盤。
字符設備:對字符設備的讀寫不須要經過OS的buffer。它不可被文件系統mount。
塊設備:對塊設備的讀寫須要經過OS的buffer,它能夠被mount到文件系統中。linux
這個與linux的版本相關,在舊版本中,最多隻能夠有256個裸設備,Linux 4下作多能夠綁定81Array2個裸設備。可是在linux下,最多隻能有255個分區,因此,若是用裸設備綁定分區,最多隻能綁定255個裸設備。若是是用lvm,則沒有這個限制。spring
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 numbermvc
在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 oracle
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這個文件。.net
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.unix
其中
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設備號碼。htm
我的對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
Device Boot 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 * 512 (保留一個redo lock)
若是是數據文件,則裸設備最大可用大小=裸設備對應分區大小 - 2 * db_block_size(保留兩個block)
爲了簡單起見,對全部的文件設置稱比裸設備小1M便可。
三、數據文件最好不要設置稱自動擴展,若是設置稱自動擴展,必定要把maxsize設置設置爲比裸設備小
四、linux下oracle不能直接把邏輯卷做爲裸設備,也要進行綁定。unix下就不須要。
參考至:《大話Oracle Rac》張曉明著
Configuring raw devices (multipath) for Oracle Clusterware 10g Release 2 (10.2.0) on RHEL5-OEL5 [ID 564580.1]
http://www.cnblogs.com/spring3mvc/archive/2010/11/26/2414737.html http://blog.csdn.net/tianlesoftware/archive/2010/11/30/6045137.aspx http://bianxq.iteye.com/blog/510445 http://blog.csdn.net/tianlesoftware/article/details/5796962 http://www.sudu.cn/info/html/edu/20080102/281296.html http://www.edward-han.com/175.html http://www.cnblogs.com/rootq/articles/1487267.html本文原創,轉載請註明出處、做者