首頁  >  文章  >  運維  >  linux raw是什麼格式

linux raw是什麼格式

藏色散人
藏色散人原創
2023-03-14 09:33:092045瀏覽

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 name>", RUN+="raw /dev/raw/rawX %N"

配置裝置名稱,用你需要綁定的裝置名稱取代e6936c998ce51644b8613081728bb54c(如:/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视频教程

以上是linux raw是什麼格式的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn