1. 程式人生 > >在紅帽企業Linux 5上怎樣新增裸裝置對映

在紅帽企業Linux 5上怎樣新增裸裝置對映

解決方法:

裸裝置介面在紅帽企業Linux 5上已經被去掉了。現在可以通過udev規則配置裸裝置。

為了新增裸裝置對映,在/etc/udev/rules.d/60-raw.rules 新增一行,格式和下面的一樣:

ACTION=="add", KERNEL="<device name>", RUN+="raw /dev/raw/rawX %N"

主/從號:

ACTION=="add", ENV{MAJOR}="A", ENV{MINOR}="B", RUN+="raw /dev/raw/rawX %M %m"

以需要邦定的裝置名(例如/dev/sda1)替換上面的<device name>。"A"和"B"是需要邦定的主/從號。"X"是系統將要使用的裸裝置的序號。

如果之前存在一個大的/etc/sysconfig/rawdevices檔案,可以使用下面的指令碼作轉換:

#!/bin/sh
grep -v "^ *#" /etc/sysconfig/rawdevices | grep -v "^$" | while read dev major
minor ; do
if [ -z "$minor" ]; then
echo "ACTION==\"add\", KERNEL==\"${major##/dev/}\",
RUN+=\"/usr/bin/raw $dev %N\""
else
echo "ACTION==\"add\", ENV{MAJOR}==\"$major\",
ENV{MINOR}==\"$minor\", RUN+=\"/usr/bin/raw $dev %M %m\""
fi
done



AS5 和AS4 的方法完全不同
AS5
設定重新啟動自動掛載裸裝置
vi /etc/udev/rules.d/60-raw.rules
ACTION=="add", KERNEL=="sdd1", RUN+="/bin/raw /dev/raw/raw1 %N"
ACTION=="add", KERNEL=="sde1", RUN+="/bin/raw /dev/raw/raw2 %N"
ACTION=="add", KERNEL=="sdf1", RUN+="/bin/raw /dev/raw/raw3 %N"


AS4
vi /etc/sysconfig/rawdevices
/dev/raw/raw1 /dev/sdc1
/dev/raw/raw2 /dev/sdd1
# /sbin/service rawdevices restart


-------------------------------------------------------------------------------------------------

繫結裸裝置

raw /dev/raw/raw<N> /dev/<blockdev>

刪除裸裝置

raw /dev/raw/raw<N> 0 0

如用raw /dev/raw/raw1 0 0 刪除裸裝置/dev/raw/raw1

1、什麼裸裝置?字元裝置?塊裝置?
裸裝置:也叫裸分割槽(原始分割槽),是一種沒有經過格式化,不被Unix/Linux通過檔案系統來讀取的特殊字元裝置。裸裝置可以繫結一個分割槽,也可以繫結一個磁碟。
字元裝置:對字元裝置的讀寫不需要通過OS的buffer。它不可被檔案系統mount。
塊裝置:對塊裝置的讀寫需要通過OS的buffer,它可以被mount到檔案系統中。

2、一個系統可以有多少個裸裝置?
這個與linux的版本相關,在舊版本中,最多隻可以有256個裸裝置,Linux 4下做多可以繫結8192個裸裝置。
但是在linux下,最多隻能有255個分割槽,所以,如果用裸裝置繫結分割槽,最多隻能繫結255個裸裝置。
如果是用lvm,則沒有這個限制。

3、Linux下單個磁碟最多可以有多少個分割槽?
15個。3個主分割槽 + 1個擴充套件分割槽 + 11個邏輯分割槽。
建議的分割槽方法是:先分3個主分割槽,第四個分割槽為擴充套件分割槽,然後在擴充套件分割槽中再分成11個邏輯分割槽。
注意,裸裝置不要繫結在擴充套件分割槽上。

4、linux下是否需要繫結裸裝置?unix呢?
linux下如果需要使用裸裝置,則需要手工進行繫結。
unix下則不用。

因為Unix中每一個塊裝置都會有一個對應的字元裝置用於非快取(unbuffered)I/O,這就是他對應的裸裝置了。
而Linux中rawio的則實現了一套非繫結(unbound)的裸裝置/dev/rawN或者/dev/raw/rawN和一個控制裝置/dev/rawct用來把他們繫結到塊裝置上。所以當需要使用一個裸裝置的時候,就需要把他和一個真實存在的塊裝置對應起來,這一個步驟實際上就是完成了Unix裡的自動對應一個非快取字元裝置。

5、linux如何繫結裸裝置?
兩種方式:
1)命令繫結
raw /dev/raw/raw[n] /dev/xxx
其中n的範圍是0-8191。raw目錄不存在可以建立。
執行這個命令,就會在/dev/raw下生成一個對應的raw[n]檔案
用命令方式繫結裸裝置在系統重啟後會失效。

2)修改檔案
修改/etc/sysconfig/rawdevices檔案如下,以開機時自動載入裸裝置,如:
/dev/raw/raw1 /dev/sdb1
這種方式是通過啟動服務的方式來繫結裸裝置。

也可以把這個命令寫在/etc/rc.local上,使每次啟動都執行這些命令。

6、如何把裸裝置作為oracle資料檔案?有什麼需要注意的?
1)繫結裸裝置
參考上文
2)改變裸裝置屬主
兩種方法:
. 把命令解除安裝/etc/rc.local上
chown oracle:oinstall /dev/raw/raw1
. 修改/etc/udev/permissions.d/50-udev.permissions檔案
將/etc/udev/permissions.d/50-udev.permissions的113行

raw/*:root:disk:0660
修改為
raw/*:oracle:oinstall:0660

這個的意思是修改裸裝置的預設屬主為oracle:oinstall,預設的mode是0660。

如果是用lvm,也需要把邏輯卷繫結到裸裝置上,過程和繫結到普通分割槽類似。

7、使用裸裝置作為oracle資料檔案有什麼需要注意的?
使用裸裝置作為oracle的資料檔案必須注意以下幾點:
1)一個裸裝置只能放置一個數據檔案
2)資料檔案的大小不能超過裸裝置的大小
如果是日誌檔案,則裸裝置最大可用大小=裸裝置對應分割槽大小 - 1 * 512 (保留一個redo lock)
如果是資料檔案,則裸裝置最大可用大小=裸裝置對應分割槽大小 - 2 * db_block_size(保留兩個block)
為了簡單起見,對所有的檔案設定稱比裸裝置小1M即可。
3)資料檔案最好不要設定稱自動擴充套件,如果設定稱自動擴充套件,一定要把maxsize設定設定為比裸裝置小

8、是否可以直接用邏輯卷作為oracle資料檔案?
linux下oracle不能直接把邏輯卷作為裸裝置,也要進行繫結。unix下就不需要。

9、如何知道當前綁定了什麼裸裝置?
rqw -qa命令列出當前繫結的所有裸裝置。

10、如何知道某個裸裝置的大小
比較笨的辦法是,找出看裸裝置對應的是那個實際的塊裝置,然後用fdisk -l /dev/[h,s]dXN看那個塊裝置的大小就好了。
比較簡單的辦法是用blockdev命令來計算,如:
#blockdev --getsize /dev/raw/raw1
11718750
11718750表示有多少OS BLIOCK。
一般一個OS BLOCK大小是512位元組,所以11718750*512/1024/1024/1024 = 5722(m) 就是裸裝置的大小。

11、資料庫中可以同時以檔案和裸裝置作為資料檔案嗎?
可以。甚至在同一個表空間中,也可以部分資料檔案用檔案系統,部分檔案用裸裝置。
但是不建議這樣做,因為會增加管理的複雜度。

12、可以把至於裸裝置的資料檔案設成自動擴充套件嗎?
可以,但同時要設定maxsize,且maxsize不能超過:裸裝置大小 - 2*db_block_size

13、如何修改裸裝置的預設許可權
兩種方法:
1)要修改/etc/rc.d/rc.local檔案,加入如下:
chown root:oinstall /dev/raw/raw1
chown root:oinstall /dev/raw/raw2
chown root:oinstall /dev/raw/raw3
...
chmod 660 /dev/raw/raw1
chmod 660 /dev/raw/raw2
chmod 660 /dev/raw/raw3
...

2)實際上還有更簡單的方法就是,修改/etc/udev/permissions.d/50-udev.permissions檔案:
raw/*:root:disk:0660

raw/*:root:oinstall:0660

這樣就可以了!

14、如何取消裸裝置的繫結
用raw把major and minor設成0就可以取消裸裝置的繫結。如:
raw /dev/raw/raw1 0 0
這個命令取消繫結裸裝置的繫結,/dev/raw/raw1會被刪除

15、裸裝置可以繫結的物件可以什麼?
可以繫結整個沒有分割槽的硬碟、可以繫結硬碟的某個分割槽、可以繫結邏輯卷等。



------------------------------------------------------------------------------------------
如果你使用Linux比較長時間了,那你就知道,在對待裝置檔案這塊,Linux改變了幾次策略。在Linux早期,裝置檔案僅僅是是一些帶有適當的屬性 集的普通檔案,它由mknod命令建立,檔案存放在/dev目錄下。後來,採用了devfs,一個基於核心的動態裝置檔案系統,他首次出現在2.3.46 核心中。Mandrake,Gentoo等Linux分發版本採用了這種方式。devfs建立的裝置檔案是動態的。但是devfs有一些嚴重的限制,從 2.6.13版本後移走了。目前取代他的便是文字要提到的udev--一個使用者空間程式。

目前很多的Linux分發版本採納了udev的方式,因為它在Linux裝置訪問,特別是那些對裝置有極端需求的站點(比如需要控制上千個硬碟)和熱插拔裝置(比如USB攝像頭和MP3播放器)上解決了幾個問題。下面我我們來看看如何管理udev裝置。

實 際上,對於那些為磁碟,終端裝置等準備的標準配置檔案而言,你不需要修改什麼。但是,你需要了解udev配置來使用新的或者外來裝置,如果不修改配置,這 些裝置可能無法訪問,或者說Linux可能會採用不恰當的名字,屬組或許可權來建立這些裝置檔案。你可能也想知道如何修改RS-232串列埠,音訊裝置等檔案 的屬組或者許可權。這點在實際的Linux實施中是會遇到的。


為什麼使用udev

在此之前的裝置檔案管理方法(靜態檔案和devfs)有幾個缺點:

* 不確定的裝置對映。特別是那些動態裝置,比如USB裝置,裝置檔案到實際裝置的對映並不可靠和確定。舉一個例子:如果你有兩個USB印表機。一個可能稱為 /dev/usb/lp0,另外一個便是/dev/usb/lp1。但是到底哪個是哪個並不清楚,lp0,lp1和實際的裝置沒有一一對應的關係,因為他 可能因為發現裝置的順序,印表機本身關閉等原因而導致這種對映並不確定。理想的方式應該是:兩個印表機應該採用基於他們的序列號或者其他標識資訊的唯一設 備檔案來對映。但是靜態檔案和devfs都無法做到這點。

*沒有足夠的主/輔裝置號。我們知道,每一個裝置檔案是有兩個8位的數字:一個是主裝置號 ,另外一個是輔裝置號來分配的。這兩個8位的數字加上裝置型別(塊裝置或者字元裝置)來唯一標識一個裝置。不幸的是,關聯這些身邊的的數字並不足夠。

*/dev目錄下檔案太多。一個系統採用靜態裝置檔案關聯的方式,那麼這個目錄下的檔案必然是足夠多。而同時你又不知道在你的系統上到底有那些裝置檔案是啟用的。

*命名不夠靈活。儘管devfs解決了以前的一些問題,但是它自身又帶來了一些問題。其中一個就是命名不夠靈活;你別想非常簡單的就能修改裝置檔案的名字。預設的devfs命令機制本身也很奇怪,他需要修改大量的配置檔案和程式。;

*核心記憶體使用,devfs特有的另外一個問題是,作為核心驅動模組,devfs需要消耗大量的記憶體,特別當系統上有大量的裝置時(比如上面我們提到的系統一個上有好幾千磁碟時)

udev的目標是想解決上面提到的這些問題,他通採用使用者空間(user-space)工具來管理/dev/目錄樹,他和檔案系統分開。知道如何改變預設配置能讓你之大如何定製自己的系統,比如建立裝置字元連線,改變裝置檔案屬組,許可權等。

udev配置檔案

主要的udev配置檔案是/etc/udev/udev.conf。這個檔案通常很短,他可能只是包含幾行#開頭的註釋,然後有幾行選項:

udev_root="/dev/"

udev_rules="/etc/udev/rules.d/"

udev_log="err"

上面的第二行非常重要,因為他表示udev規則儲存的目錄,這個目錄儲存的是以.rules結束的檔案。每一個檔案處理一系列規則來幫助udev分配名字給裝置檔案以保證能被核心識別。
你 的/etc/udev/rules.d下面可能有好幾個udev規則檔案,這些檔案一部分是udev包安裝的,另外一部分則是可能是別的硬體或者軟體包生 成的。比如在Fedora Core 5系統上,sane-backends包就會安裝60-libsane.rules檔案,另外initscripts包會安裝60-net.rules文 件。這些規則檔案的檔名通常是兩個數字開頭,它表示系統應用該規則的順序。

規則檔案裡的規則有一系列的鍵/值對組成,鍵/值對之間用逗 號(,)分割。每一個鍵或者是使用者匹配鍵,或者是一個賦值鍵。匹配鍵確定規則是否被應用,而賦值鍵表示分配某值給該鍵。這些值將影響udev建立的裝置文 件。賦值鍵可以處理一個多值列表。匹配鍵和賦值鍵操作符解釋見下表:
                      udev 鍵/值對操作符

操作符     匹配或賦值t                         解釋

----------------------------------------

 ==            匹配              相等比較

 !=            匹配             不等比較

 =            賦值              分配一個特定的值給該鍵,他可以覆蓋之前的賦值。

 +=      賦值              追加特定的值給已經存在的鍵

 :=            賦值                  分配一個特定的值給該鍵,後面的規則不可能覆蓋它。 


這有點類似我們常見的程式語言,比如C語言。只是這裡的鍵一次可以處理多個值。有一些鍵在udev規則檔案裡經常出現,這些鍵的值可以使用萬用字元(*,?,甚至範圍,比如[0-9]),這些常用鍵列舉如下:
常用udev鍵

鍵        含義

ACTION         一個時間活動的名字,比如add,當裝置增加的時候

KERNEL         在核心裡看到的裝置名字,比如sd*表示任意SCSI磁碟裝置

DEVPATH       核心裝置錄進,比如/devices/*

SUBSYSTEM       子系統名字,比如sound,net

BUS         匯流排的名字,比如IDE,USB

DRIVER         裝置驅動的名字,比如ide-cdrom

ID           獨立於核心名字的裝置名字

SYSFS{ value}       sysfs屬性值,他可以表示任意

ENV{ key}       環境變數,可以表示任意

PROGRAM       可執行的外部程式,如果程式返回0值,該鍵則認為為真(true)

RESULT         上一個PROGRAM呼叫返回的標準輸出。

NAME         根據這個規則建立的裝置檔案的檔名。注意:僅僅第一行的NAME描述是有效的,後面的均忽略。

                                 如果你想使用使用兩個以上的名字來訪問一個裝置的話,可以考慮SYMLINK鍵。

SYMLINK       根據規則建立的字元連線名

OWNER         裝置檔案的屬組

GROUP         裝置檔案所在的組。

MODE         裝置檔案的許可權,採用8進位制

RUN         為裝置而執行的程式列表

LABEL         在配置檔案裡為內部控制而採用的名字標籤(下下面的GOTO服務)

GOTO         跳到匹配的規則(通過LABEL來標識),有點類似程式語言中的GOTO

IMPORT{ type}     匯入一個檔案或者一個程式執行後而生成的規則集到當前檔案

WAIT_FOR_SYSFS   等待一個特定的裝置檔案的建立。主要是用作時序和依賴問題。

PTIONS         特定的選項: last_rule 對這類裝置終端規則執行; ignore_device 忽略當前規則; ignore_remove 忽略接下來的並移走請求。

           all_partitions 為所有的磁碟分割槽建立裝置檔案。


我們給出一個列子來解釋如何使用這些鍵。下面的例子來自Fedora Core 5系統的標準配置檔案。

KERNEL=="*", OWNER="root" GROUP="root", MODE="0600"
KERNEL=="tty", NAME="%k", GROUP="tty", MODE="0666", OPTIONS="last_rule"
KERNEL=="scd[0-9]*", SYMLINK+="cdrom cdrom-%k"
KERNEL=="hd[a-z]", BUS=="ide", SYSFS{removable}=="1", SYSFS{device/media}=="cdrom", SYMLINK+="cdrom cdrom-%k"
ACTION=="add", SUBSYSTEM=="scsi_device", RUN+="/sbin/modprobe sg"

上面的例子給出了5個規則,每一個都是KERNEL或者ACTION鍵開頭:

*第一個規則是預設的,他匹配任意被核心識別到的裝置,然後設定這些裝置的屬組是root,組是root,訪問許可權模式是0600(-rw-------)。這也是一個安全的預設設定保證所有的裝置在預設情況下只有root可以讀寫。
*第二個規則也是比較典型的規則了。它匹配終端裝置(tty),然後設定新的許可權為0600,所在的組是tty。它也設定了一個特別的裝置檔名:%K。在這裡例子裡,%k代表裝置的核心名字。那也就意味著核心識別出這些裝置是什麼名字,就建立什麼樣的裝置檔名。

*第三行開始的KERNEL=="scd[0-9]*",表示 SCSI CD-ROM 驅動. 它建立一對裝置符號連線:cdrom和cdrom-%k。

*第四行,開始的 KERNEL=="hd[a-z]", 表示ATA CDROM驅動器。這個規則建立和上面的規則相同的符號連線。ATA CDROM驅動器需要sysfs值以來區別別的ATA裝置,因為SCSI CDROM可以被核心唯一識別。.

*第五行以 ACTION=="add"開始,它告訴udev增加 /sbin/modprobe sg 到命令列表,當任意SCSI裝置增加到系統後,這些命令將執行。其效果就是計算機應該會增加sg核心模組來偵測新的SCSI裝置。

當然,上面僅僅是一小部分例子,如果你的系統採用了udev方式,那你應該可以看到更多的規則。如果你想修改裝置的許可權或者建立信的符號連線,那麼你需要熟讀這些規則,特別是要仔細注意你修改的那些與之相關的裝置。

修改你的udev配置

在修改udev配置之前,我們一定要仔細,通常的考慮是:你最好不要修改系統預置的那些規則,特別不要指定影響非常廣泛的配置,比如上面例子中的第一行。不正確的配置可能會導致嚴重的系統問題或者系統根本就無法這個正確的訪問裝置。

而 我們正確的做法應該是在/etc/udev/rules.d/下建立一個信的規則檔案。確定你給出的檔案的字尾是rules檔名給出的數字序列應該比標 準配置檔案高。比如,你可以建立一個名為99-my-udev.rules的規則檔案。在你的規則檔案中,你可以指定任何你想修改的配置,比如,假設你修 改修改floppy裝置的所在組,還準備建立一個信的符號連線/dev/floppy,那你可以這麼寫:
KERNEL=="fd[0-9]*", GROUP="users",   SYMLINK+="floppy"

有些發行版本,比如Fedora,採用了外部指令碼來修改某些特定裝置的屬組,組關係和許可權。因此上面的改動可能並不見得生效。如果你遇到了這個問題,你就需要跟蹤和修改這個指令碼來達到你的目的。或者你可以修改PROGRAM或RUN鍵的值來做到這點。

某些規則的修改可能需要更深的挖掘。比如,你可能想在一個裝置上使用sysfs資訊來唯一標識一個裝置。這些資訊最好通過udevinfo命令來獲取。
$ udevinfo –a –p $(udevinfo –q path  –n /dev/hda)
上 面的命令兩次使用udevinfo:一次是返回sysfs裝置路徑(他通常和我們看到的Linux裝置檔名所在路徑--/dev/hda--不同);第 二次才是查詢這個裝置路徑,結果將是非常常的syfs資訊彙總。你可以找到最夠的資訊來唯一標誌你的裝置,你可以採用適當的替換udev配置檔案中的 SYSFS選項。下面的結果就是上面的命令輸出

[[email protected] rules.d]# udevinfo -a -p $(udevinfo -q path    -n  /dev/hda1)

Udevinfo starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.

looking at device '/block/hda/hda1':
   KERNEL=="hda1"
   SUBSYSTEM=="block"
   DRIVER==""
   ATTR{stat}=="    1133     2268        2        4"
   ATTR{size}=="208782"
   ATTR{start}=="63"
   ATTR{dev}=="3:1"

looking at parent device '/block/hda':
   KERNELS=="hda"
   SUBSYSTEMS=="block"
   DRIVERS==""
   ATTRS{stat}=="   28905    18814  1234781   302540    34087   133247   849708   981336        0   218340  1283968"
   ATTRS{size}=="117210240"
   ATTRS{removable}=="0"
   ATTRS{range}=="64"
   ATTRS{dev}=="3:0"

looking at parent device '/devices/pci0000:00/0000:00:1f.1/ide0/0.0':
   KERNELS=="0.0"
   SUBSYSTEMS=="ide"
   DRIVERS=="ide-disk"
   ATTRS{modalias}=="ide:m-disk"
   ATTRS{drivename}=="hda"
   ATTRS{media}=="disk"

looking at parent device '/devices/pci0000:00/0000:00:1f.1/ide0':
   KERNELS=="ide0"
   SUBSYSTEMS==""
   DRIVERS==""

looking at parent device '/devices/pci0000:00/0000:00:1f.1':
   KERNELS=="0000:00:1f.1"
   SUBSYSTEMS=="pci"
   DRIVERS=="PIIX_IDE"
   ATTRS{broken_parity_status}=="0"
   ATTRS{enable}=="1"
   ATTRS{modalias}=="pci:v00008086d000024CAsv0000144Dsd0000C009bc01sc01i8a"
   ATTRS{local_cpus}=="1"
   ATTRS{irq}=="11"
   ATTRS{class}=="0x01018a"
   ATTRS{subsystem_device}=="0xc009"
   ATTRS{subsystem_vendor}=="0x144d"
   ATTRS{device}=="0x24ca"
   ATTRS{vendor}=="0x8086"

looking at parent device '/devices/pci0000:00':
   KERNELS=="pci0000:00"
   SUBSYSTEMS==""
   DRIVERS==""


舉 一個例子:假設你想修改USB掃描器的配置。通過一系列的嘗試,你已經為這個掃描器標識了Linux裝置檔案(每次開啟掃描器時,名字都會變)。你可以使 用上面的命令替換這個正確的Linux裝置檔名,然後定位輸出的採用SYSFS{idVendor}行和SYSFS{idProduct}行。最後你可 以使用這些資訊來為這個掃描器建立新的選項。


SYSFS{idVendor}=="0686", \

SYSFS{idProduct}=="400e", \

SYMLINK+="scanner", MODE="0664", \

group="scanner"

上面的例子表示將掃描器的組設定為scanner,訪問許可權設定為0664,同時建立一個/dev/scanner的符號連線。


----------------------------------------------------------------------------------------------------------------------------------

Udev (簡體中文)

From ArchWiki

注意: 如果您是從DevFS升級到Udev, 請檢視 DevFS to Udev.

這篇文件將介紹udev的一些新的變化。從084版開始,udev能夠代替hotplug和coldplug的所有功能。正因為這樣,hotplug包已經從Arch倉庫中去掉了。

[edit] 重要提示

...切記,在使用udev載入任何modules(核心模組)之前(無論是否是啟動時自動載入),您必須在/etc/rc.confMOD_AUTOLOAD選項設定為yes ,否則您必須手動載入這些modules。您可以修改rc.conf中的MODULES或者使用modprobe命令來手動載入您所需要的modules。另一種方法是用hwdetect --modules生成系統硬體的modules列表,然後將這個列表新增到rc.conf中讓系統啟動時自動載入這些modules

[edit] 基本需求

  • 核心: 2.6.15或更高版本。
  • 您將無法在fstab和bootloader設定中再使用DevFS格式的裝置名稱! 更多相關內容請檢視DevFS to Udev

[edit] 最近更新

  • startudev程式被取出。如果需要重新載入udev規則請使用 /etc/start_udev
  • Udev代替了hotplughwdetect的功能。同時我們儲存了hwdetect,並且只在 mkinitrd程式生成initrd的時候用到。
  • Udev可以同時載入多個模組,這樣可以加快啟動速度,然而,這樣做的結果是她不能保證每次載入的順序,所以當你使用多音效卡或網絡卡的時候就會出現問題,這個問題下面將會再討論。

[edit] 模組禁用列表

udev也會犯錯或載入錯誤的模組。為了防止錯誤的發生,你可以使用模組禁用列表 。一旦加入該列表的模組,無論是啟動時,或者時執行時(如usb硬碟等)udev都不會載入這些模組。

只需在您在 rc.confMODULES中對應模組前加上感嘆號(!)就可禁用該模組。

例如,

MODULES=(!moduleA !moduleB)

[edit] load_modules: 有用的啟動引數

如果您在核心啟動引數中加入load_modules=off,那麼udev會停止任何自動載入工作. 如果系統出現問題時,這個功能會十分有用。如果udev載入了有問題的模組導致系統掛起或者其它嚴重的問題時,你可以使用這個引數來禁用自動載入,以此來防止載入有問題的模組。

[edit] 已知的硬體問題

- BusLogic裝置被損壞而且導致啟動時宕機。

 這是一個核心的Bug目前還沒有修正。

- PCMCIA讀卡器被認為是可移除裝置.

 把它們加入到/etc/pmount.allow中,使用hal的pmount來讀取

[edit] 自動載入帶來的一些問題

[edit] CPUFreq模組

我門還沒有找到一個很好的方法載入不同的CPUFreq控制器,所以我們把從自動載入程序裡把它去掉了。如果您需要測量CPU頻率,你必須在rc.confMODULES佇列中顯式的加入合適的模組。

[edit] 聲音問題和一些不能自動載入的模組

一些使用者跟蹤發現問題出在/etc/modprobe.conf中一些舊的部分,試著去掉這些舊的部分再試試看。

[edit] 多個同類型裝置(網絡卡,音效卡)每次啟動的都不同

因為udev同時載入所有模組,所以一些裝置可能初始化順序不同。例如同時有兩個網絡卡時,它們總是在eth0eth1之間變來變去。

常用的解決辦法是在您的rc.conf檔案中通過修改MODULES佇列來指明順序。這個佇列裡的模組將在udev自動載入之前由系統載入,因此您可以控制模組在啟動時載入順序。

# 在e100之前載入8139too

MODULES=(8139too e100)

另一個解決網絡卡的方法是使用udev-sanctified方法為每個網絡卡靜態命名。建立檔案/etc/udev/rules.d/10-network.rules然後將不同的網絡卡通過MAC地址繫結到不同的名字上:

SUBSYSTEM=="net", SYSFS{address}=="aa:bb:cc:dd:ee:ff", NAME="lan0"

SUBSYSTEM=="net", SYSFS{address}=="ff:ee:dd:cc:bb:aa", NAME="wlan0"

同時,您需要注意以下內容:

  • 您可以通過下面的命令獲得網絡卡的MAC地址:: udevinfo -a -p /sys/class/net/<你的網絡卡>
  • 注意在udev規則檔案中使用小寫的16進位制MAC地址,因為udev無法識別大寫的MAC地址。
  • 一些使用者在使用舊的命名方式時出現問題,例如: eth0, eth1, 等等. 如果出現這個問題,試試使用 "lan"或者"wlan"之類的名字.

注意不要忘記修改您的/dec/rc.conf和其它使用ethX命名的配置檔案。

[edit] 自己編譯核心造成的一些已知問題

[edit] Udev無法啟動

請確定您的核心版本大於或等於2.6.15。較早的核心沒有udev自動裝載所需要的uevent功能。

[edit] CD/DVD符號和許可權錯誤

如果您使用2.6.15的核心的話,您需要安裝ABS的uevent補丁(它從2.6.16核心中抽取了一些uevent功能)。您可以使用abs命令來同步ABS樹,然後您就可以在/var/abs/kernels/kernel26/下找到abs補丁。

[edit] Udev小竅門

[edit] 自動載入usb裝置

KERNEL=="sd[a-z]", NAME="%k", SYMLINK+="usb%m", GROUP="users", OPTIONS="last_rule"

ACTION=="add", KERNEL=="sd[a-z][0-9]", SYMLINK+="usb%n", GROUP="users", NAME="%k"

ACTION=="add", KERNEL=="sd[a-z][0-9]", RUN+="/bin/mkdir -p /mnt/usb%n"

ACTION=="add", KERNEL=="sd[a-z][0-9]", PROGRAM=="/lib/udev/vol_id -t %N", RESULT=="vfat", RUN+="/bin/mount -t vfat -o rw,noauto,sync,dirsync,noexec,nodev,noatime,dmask=000,fmask=111 /dev/%k /mnt/usb%n", OPTIONS="last_rule"

ACTION=="add", KERNEL=="sd[a-z][0-9]", RUN+="/bin/mount -t auto -o rw,noauto,sync,dirsync,noexec,nodev,noatime /dev/%k /mnt/usb%n", OPTIONS="last_rule"

ACTION=="remove", KERNEL=="sd[a-z][0-9]", RUN+="/bin/umount -l /mnt/usb%n"

ACTION=="remove", KERNEL=="sd[a-z][0-9]", RUN+="/bin/rmdir /mnt/usb%n", OPTIONS="last_rule"

把這些udev規則放到/etc/udev/rules.d/下任何一個檔名以.rules結尾的檔案中,例如/etc/udev/rules.d/sda.rules。

如果想同時建立/media到/mnt符號連線,可以使用下面的版本:

KERNEL=="sd[a-z]", NAME="%k", SYMLINK+="usbhd-%k", GROUP="users", OPTIONS="last_rule" 

ACTION=="add", KERNEL=="sd[a-z][0-9]", SYMLINK+="usbhd-%k", GROUP="users", NAME="%k" 

ACTION=="add", KERNEL=="sd[a-z][0-9]", RUN+="/bin/mkdir -p /media/usbhd-%k" 

ACTION=="add", KERNEL=="sd[a-z][0-9]", RUN+="/bin/ln -s /media/usbhd-%k /mnt/usbhd-%k" 

ACTION=="add", KERNEL=="sd[a-z][0-9]", PROGRAM=="/lib/udev/vol_id -t %N", RESULT=="vfat", RUN+="/bin/mount -t vfat -o rw,noauto,sync,dirsync,noexec,nodev,noatime,dmask=000,fmask=111 /dev/%k /media/usbhd-%k", OPTIONS="last_rule" 

ACTION=="add", KERNEL=="sd[a-z][0-9]", RUN+="/bin/mount -t auto -o rw,noauto,sync,dirsync,noexec,nodev,noatime /dev/%k /media/usbhd-%k", OPTIONS="last_rule" 

ACTION=="remove", KERNEL=="sd[a-z][0-9]", RUN+="/bin/rm -f /mnt/usbhd-%k" 

ACTION=="remove", KERNEL=="sd[a-z][0-9]", RUN+="/bin/umount -l /media/usbhd-%k" 

ACTION=="remove", KERNEL=="sd[a-z][0-9]", RUN+="/bin/rmdir /media/usbhd-%k", OPTIONS="last_rule"

注意!如果你是用的其它的固定裝置(例如SATA的硬碟,您可以從/etc/fstab中檢視)被識別為/dev/sdX,您必須從sd[a-z] 中去掉你的那個sdX。例如,如果您的SATA硬碟被是識別為/dev/sda,您就需要把所有的“sd[a-z]”替換成“sd[b-z]”。 在規則檔案的檔名前加上數字(如:010.udev.rules)是個很好的主意,這樣udev在讀取標準規則前,將會讀取這個規則檔案。 這些規則設定後不需要修改/etc/fstab檔案。請檢視mount命令的引數來修改許可權等特性(您可以從論壇搜尋檢視mount命令的引數,然後根據 您的需要修改它們)。

相關推薦

紅帽企業Linux 5怎樣新增裝置對映

解決方法: 裸裝置介面在紅帽企業Linux 5上已經被去掉了。現在可以通過udev規則配置裸裝置。 為了新增裸裝置對映,在/etc/udev/rules.d/60-raw.rules 新增一行,格式和下面的一樣: ACTION=="add", KERNEL="<device name>",

amlogic平臺android 系統linux核心中新增i2c裝置實現i2c的讀寫

上一篇,我介紹瞭如何在uboot中新增i2c裝置,以及移植i2c的讀寫介面。簡單來說uboot階段使用i2c裝置和平臺關聯性比較大,但不同平臺套路是差不多的。你可以將uboot階段看作是引導androi

Linux伺服器新增開放埠號

今天在實驗室需要重新配置一下gstore服務,以用於實驗測試,我們只有一臺可供實驗的伺服器,server服務又只能跑一次。開始我以為開一個screen就可以了,後來才明白我太傻了,需要開放一個新的埠。 開放埠的方法: 方法一:命令列方式                1.

如何在現有的 Linux 系統新增新的磁碟

[[email protected] ~]# vi /etc/fstab## /etc/fstab# Created by anaconda on Sun Sep 17 22:40:58 2017## Accessible filesystems, by reference, are maintai

【svn】 如何在Linux伺服器新增svn賬戶的教程

1、先找到svn的安裝路徑。命令:cd/(cd/後面寫自己的安裝路徑)2、檢視路徑下有哪些檔案或資料夾。命令:ls3、發現一個5個,其中有一個資料夾叫conf。4、進入conf資料夾,並檢視。命令:cd conf、命令:ls5、發現有5個檔案。6、先編輯authz檔案,在[g

SQL Server On Linux5)——Linux新增磁碟

接上文:SQL Server On Linux(4)——Linux 初步配置 隨著資料庫的使用時間越來越久,空間問題越顯突出。這個時候其中一個手段就是加空間。很多時候是通過加磁碟來實現。在很多規範化的企業裡面,有專門的IT人員負責運維伺服器,DBA通常只負責管理資料庫。但是作

RHEL6.5Oracle ACFS與Linux samba一起使用時遇到的bug

perf out back through sam cli 一個 ora general RHEL上的Oracle ACFS與linux samba一起使用時遇到的bug 一、環境介紹: cat /etc/issue的結果為: Red Hat Enterpri

Linux CentOS6.5搭建環境遇到的問題

warn 主機名 span his 不為 rpm mysqld password oca 1.卸載CentOS自帶的JDK 查看centos上 安裝的jdk:rpm -qa|grep jdk 出現如下:     java-1.7.0-openjdk-1.7.0.45-

GO語言環境在Red Hat Linux 7.5的配置

load F12 jpg 如圖所示 ado ins linux版本 ipo 語言 這篇文章是我根據goland的官方文檔及自己的實踐總結出來的一份基礎向GO語言環境在Linux系統上的配置教程,使用的Linux版本:Red Hat Enterprise Linux Serv

Linux和Solaris系統新增預設路由和靜態路由方法

1.Linux伺服器上新增預設或者靜態路由 新增靜態路由:route add -net 10.0.0.0/8 gw 10.30.222.190 新增靜態路由:route add -net 192.168.0.0/16 gw 10.30.222.190 新增預設路由:route add -ne

5.linux驅動開發-第6部分-5.6.misc類裝置與蜂鳴器驅動》

《5.linux驅動開發-第6部分-5.6.misc類裝置與蜂鳴器驅動》 第一部分、章節目錄 5.6.1.板載蜂鳴器驅動測試 5.6.2.misc類裝置介紹 5.6.3.misc驅動框架原始碼分析1 5.6.4.misc驅動框架原始碼分析2 5.6.5.蜂鳴器驅動原始碼分析1 5.6.6

5步解決移動裝置的300ms點選延遲

大多數基於觸控的瀏覽器裝置,在點選時都會有個 300ms 的事件觸發等待時間,做過 web app 開發的同學應該都遇到過這個情況,通過下面的5步可以輕鬆搞定這個延遲。 1、不要太糾結於此 是否能接受這 300ms 的時間延遲,往往取決於你的應用和目標受眾,比如:如果是個內容為主,並且選單較少的

win10基礎安裝linux系統,新增雙系統啟動項

1、 本機安裝Centos7mini(注意點:進入安裝介面先修改下面的內容,修改為U盤名稱) 2、 配置檔案/boot/grub2/grub.cfg,完成雙系統啟動設定。   3、 配置ip地址 nmcli conn add type ethernet ifname XXXX con-n

laravel5.5新增對分頁樣式的修改一頁和下一頁

laravel自帶的分頁樣式有點醜,laravel支援自定義樣式的,想把上一頁和下一頁顯示成漢字而不是<<和>>百度了一下都是去重寫分頁的函式render,於是打開了laravel分頁的原始碼;render()和links()方法是支援傳遞檢視的;在v

如何在lvm對映裝置安裝Oracle資料庫

本文主要介紹了Oracle 10g在lvm對映的裸裝置上的安裝過程,包括建立磁碟分割槽、建立PV、建立VG、建立相關的lv、以及裸裝置配置檔案的更改等,希望能夠對您有所幫助。 Oracle 10g在lvm對映的裸裝置上的安裝過程,需要建立PV、VG以及相應的lv等操作,本文主要介紹了這一安裝過程,接

linux系統安裝mysql-5.6.27資料庫超詳細步驟

安裝前準備:到mysql官網(https://dev.mysql.com/downloads/mysql/)下載mysql編譯好的二進位制安裝包,來到官網,我們拉到頁面的下部,找到相應的版本,如圖所示內

Linux CentOS編譯並安裝Clang 3.5.0,適用於Redhat和Clang3.8

編譯CoreCLR需要Clang 3.5,而CentOS上安裝的是Clang 3.4.2(yum repos中最新版也是這個),只能自己手工編譯LLVM的原始碼進行安裝。 (注:CentOS的版本是6.6) 一、安裝libstdc++4.7 (注:如果是CentOS

linux 伺服器PHP程式資料夾讀寫許可權新增

sudo chmod 777 /var/www/html/專案/picture 修改某個目錄的許可權可以讓PHP讀寫 其中sudo chmod 777為命令的固定格式, /var/www/html/ 為需要讀寫許可權的絕對路徑。

Linux裝置相關命令(如何刪除裝置)

繫結裸裝置 raw /dev/raw/raw<N> /dev/<blockdev> 刪除裸裝置 raw /dev/raw/raw<N> 0 0 如用raw /dev/raw/raw1 0 0 刪除裸裝置/dev/raw/raw1 1、什麼

Redhat 4、5、6設定裝置

RedHat 4 RAW配置 1修改裸裝置服務的配置檔案: /etc/sysconfig/rawdevices. 新增下面2行。  格式:裸裝置名 塊裝置名 /dev/raw/raw1 /dev/sdb1 /dev/raw/raw2 /dev/sdb2 2 設定Oracle