linux raw是什么格式

linux raw是原始數據格式,在linux中表示“裸設備”,也叫裸分區、原始分區;linux raw是一種沒有經過格式化,不被Unix/Linux通過文件系統來讀取的特殊字符設備;裸設備可以綁定一個分區,也可以綁定一個磁盤。

linux raw是什么格式

本教程操作環境:linux5.9.8系統、Dell G3電腦。

linux raw是什么格式?

原始數據格式。

linux raw設備詳解

裸設備概述

裸設備:也叫裸分區(原始分區),是一種沒有經過格式化,不被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>",?RUN+="raw?/dev/raw/rawX?%N"</device>

配置設備名稱,用你需要綁定的設備名稱替換 (如:/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 ???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、一個裸設備只能放置一個數據文件

2、數據文件的大小不能超過裸設備的大小

如果是日志文件,則裸設備最大可用大小=裸設備對應分區大小 – 1 * 512 (保留一個redo lock)

如果是數據文件,則裸設備最大可用大小=裸設備對應分區大小 – 2 * db_block_size(保留兩個block)

為了簡單起見,對所有的文件設置稱比裸設備小1M即可。

3、數據文件最好不要設置稱自動擴展,如果設置稱自動擴展,一定要把maxsize設置設置為比裸設備小

4、linux下oracle不能直接把邏輯卷作為裸設備,也要進行綁定。unix下就不需要。

相關推薦:《Linux視頻教程

以上就是

? 版權聲明
THE END
喜歡就支持一下吧
點贊13 分享