Linux中的設備文件與設備號


設備文件與設備號

 

在Linux下,一切皆文件,設備也不例外,為了管理這些設備,系統為它們各自都編了號,而每個設備號又分為主設備號次設備號。主設備號用來區分不同類型的設備,而次設備號用來區分同一類型內的多個設備(及其設備分區)。
一個Linux系統,當前所有注冊設備的主設備號可以通過/proc接口查看:

[root@localhost lenky]# cat /proc/devices
Character devices:
  1 mem
  4 /dev/vc/0
  4 tty
  4 ttyS
  5 /dev/tty
  5 /dev/console
  5 /dev/ptmx
  7 vcs
 10 misc
 13 input
 14 sound
 21 sg
 29 fb
 99 ppdev
116 alsa
128 ptm
136 pts
162 raw
180 usb
189 usb_device
202 cpu/msr
203 cpu/cpuid
251 hidraw
252 usbmon
253 bsg
254 rtc

Block devices:
  1 ramdisk
  2 fd
259 blkext
  7 loop
  8 sd
  9 md
 11 sr
 65 sd
 66 sd
 67 sd
 68 sd
 69 sd
 70 sd
 71 sd
128 sd
129 sd
130 sd
131 sd
132 sd
133 sd
134 sd
135 sd
253 device-mapper
254 mdp
[root@localhost lenky]#

字符設備與塊設備的主設備號並不沖突,所有兩個都可以有主設備號為1的設備,如果要繼續查看次設備號,那么可以通過直接ls -l來查看,比如查看主設備號為8的設備的次設備號:

[root@localhost lenky]# ls -Rl /dev/* | grep " 8,"
brw-rw----. 1 root disk      8,   0 Jan 12 06:24 /dev/sda
brw-rw----. 1 root disk      8,   1 Jan 12 06:24 /dev/sda1
brw-rw----. 1 root disk      8,   2 Jan 12 06:24 /dev/sda2
brw-rw----. 1 root disk      8,  16 Jan 12 06:25 /dev/sdb
brw-rw----. 1 root disk      8,  17 Jan 12 06:25 /dev/sdb1
brw-rw----. 1 root disk      8,  32 Jan 12 06:29 /dev/sdc
brw-rw----. 1 root disk      8,  33 Jan 12 06:29 /dev/sdc1
brw-rw----. 1 root disk      8,  34 Jan 12 06:29 /dev/sdc2
brw-rw----. 1 root disk      8,  35 Jan 12 06:29 /dev/sdc3
[root@localhost lenky]#

上面的0,1,2,16,17等都是次設備號,用於區分標記各個sd硬盤或分區。查看系統所有的塊設備:

[root@localhost lenky]# grep ^ /sys/class/block/*/dev
/sys/class/block/dm-0/dev:253:0
/sys/class/block/dm-1/dev:253:1
/sys/class/block/dm-2/dev:253:2
/sys/class/block/fd0/dev:2:0
/sys/class/block/loop0/dev:7:0
/sys/class/block/loop1/dev:7:1
/sys/class/block/loop2/dev:7:2
/sys/class/block/loop3/dev:7:3
/sys/class/block/loop4/dev:7:4
/sys/class/block/loop5/dev:7:5
/sys/class/block/loop6/dev:7:6
/sys/class/block/loop7/dev:7:7
/sys/class/block/ram0/dev:1:0
/sys/class/block/ram10/dev:1:10
/sys/class/block/ram11/dev:1:11
/sys/class/block/ram12/dev:1:12
/sys/class/block/ram13/dev:1:13
/sys/class/block/ram14/dev:1:14
/sys/class/block/ram15/dev:1:15
/sys/class/block/ram1/dev:1:1
/sys/class/block/ram2/dev:1:2
/sys/class/block/ram3/dev:1:3
/sys/class/block/ram4/dev:1:4
/sys/class/block/ram5/dev:1:5
/sys/class/block/ram6/dev:1:6
/sys/class/block/ram7/dev:1:7
/sys/class/block/ram8/dev:1:8
/sys/class/block/ram9/dev:1:9
/sys/class/block/sda1/dev:8:1
/sys/class/block/sda2/dev:8:2
/sys/class/block/sda/dev:8:0
/sys/class/block/sdb1/dev:8:17
/sys/class/block/sdb/dev:8:16
/sys/class/block/sdc1/dev:8:33
/sys/class/block/sdc2/dev:8:34
/sys/class/block/sdc3/dev:8:35
/sys/class/block/sdc/dev:8:32
/sys/class/block/sr0/dev:11:0
[root@localhost lenky]#

關於每個主設備號:次設備號對應設備的功能在Linux幫助文檔里可以找到:http://lxr.linux.no/#linux+v2.6.38.8/Documentation/devices.txt

在內核2.6.9之后,Linux系統上出現了一種名為device-mapper的存儲映射機制,這種機制的作用簡單來說就是給用戶提供簡單方便而又豐富的存儲管理接口,在這種機制以及相關工具的幫助下,用戶能夠方便的自定義存儲資源管理策略。

通過一些映射規則,device-mapper機制能夠從原有的物理磁盤或邏輯磁盤中划分映射出新的邏輯磁盤,可以看到這是一個遞歸的映射機制,理論上可無限迭代。舉個例子,系統有物理磁盤A和B,從物理磁盤A中映射出新的邏輯磁盤C、D、E,從物理磁盤B中映射出新的邏輯磁盤F、G,又可以從物理磁盤A和邏輯磁盤F中映射出新的邏輯磁盤H,等等。關於這方面,請參考:http://www.ibm.com/developerworks/cn/linux/l-devmapper/http://sources.redhat.com/dm/等資源,不管是原物理磁盤還是通過device-mappe機制映射出來的新邏輯磁盤,在Linux操作系統看來都一樣,一切皆文件,復雜邏輯被隔離在底部。

我系統使用的dm磁盤如下:

[root@localhost lenky]# ls -l /dev/dm-*
brw-rw----. 1 root disk 253, 0 Jan 12 06:24 /dev/dm-0
brw-rw----. 1 root disk 253, 1 Jan 12 06:24 /dev/dm-1
brw-rw----. 1 root disk 253, 2 Jan 12 06:24 /dev/dm-2
[root@localhost lenky]# ls -l /dev/mapper/*
crw-rw----. 1 root root 10, 236 Jan 12 06:24 /dev/mapper/control
lrwxrwxrwx. 1 root root       7 Jan 12 06:24 /dev/mapper/VolGroup-lv_home -> ../dm-2
lrwxrwxrwx. 1 root root       7 Jan 12 06:24 /dev/mapper/VolGroup-lv_root -> ../dm-0
lrwxrwxrwx. 1 root root       7 Jan 12 06:24 /dev/mapper/VolGroup-lv_swap -> ../dm-1
[root@localhost lenky]#

轉載請保留地址:http://www.lenky.info/archives/2012/02/1141 或http://lenky.info/?p=1141

 

附加筆記:

 

[root@localhost lenky]# ls -Rl /dev/* | grep " 8,"
brw-rw----. 1 root disk      8,   0 Jan 12 06:24 /dev/sda
brw-rw----. 1 root disk      8,   1 Jan 12 06:24 /dev/sda1
brw-rw----. 1 root disk      8,   2 Jan 12 06:24 /dev/sda2

一般說的各個分區相加等於硬盤,有個隱含說明就是硬盤內各個分區的硬盤存儲空間容量相加等於硬盤的硬盤存儲空間容量。

 

一個硬盤有一個描述硬盤的信息,而一個分區有一描述分區的信息,將硬盤內各個分區的描述分區的信息拼接在一起也得不到關於硬盤的信息,所以給硬盤配上一個次設備號是有必要不多余的。

 

[root@localhost lenky]# ls -Rl /dev/* | grep " 8,"
brw-rw----. 1 root disk      8,   0 Jan 12 06:24 /dev/sda
brw-rw----. 1 root disk      8,   1 Jan 12 06:24 /dev/sda1
brw-rw----. 1 root disk      8,   2 Jan 12 06:24 /dev/sda2
brw-rw----. 1 root disk      8,  16 Jan 12 06:25 /dev/sdb
brw-rw----. 1 root disk      8,  17 Jan 12 06:25 /dev/sdb1
brw-rw----. 1 root disk      8,  32 Jan 12 06:29 /dev/sdc
brw-rw----. 1 root disk      8,  33 Jan 12 06:29 /dev/sdc1
brw-rw----. 1 root disk      8,  34 Jan 12 06:29 /dev/sdc2
brw-rw----. 1 root disk      8,  35 Jan 12 06:29 /dev/sdc3

我們看到/dev/sd*設備名的設備類型(即指的是IDE硬盤),這里有三個不同的IDE硬盤,其主設備號以及其分區的主設備號都是8。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM