Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> 關於 Linux

Linux 磁碟裝置節點與 mknod 指令實戰:建立區塊、字元、管道裝置檔

編輯:關於 Linux

Linux 以裝置檔抽象硬體,核心透過 major(主裝置號,識別驅動程式)與 minor(次裝置號,識別具體裝置)定位裝置。mknod 可手動建立裝置節點,適用於嵌入式系統、容器裝置映射、救援模式重建 /dev 等場景。

裝置節點 major/minor 對照表

裝置節點命名與 major/minor 規律

# SCSI/SATA 磁碟
brw-rw---- 1 root disk 8,  0  /dev/sda      # major=8 (sd driver), minor=0 (整顆磁碟)
brw-rw---- 1 root disk 8,  1  /dev/sda1     # minor=1 (第1分區)
brw-rw---- 1 root disk 8, 16  /dev/sdb      # minor=16 (第二顆磁碟基礎)
brw-rw---- 1 root disk 8, 17  /dev/sdb1

規律:minor = (磁碟索引 * 16) + 分區號,單顆磁碟最多 15 個分區(1~15)。

mknod 語法

mknod [選項] 名稱 類型 major minor

類型:
  b  區塊裝置
  c  字元裝置
  p  管道 (FIFO)

實戰範例

1. 建立管道裝置(FIFO)

# mknod pipeFile p
# echo "this is a test line" > pipeFile
# cat pipeFile
this is a test line

2. 建立區塊裝置(模擬磁碟分區)

# mknod blockFile b 8 100
# ls -l blockFile
brw-r--r-- 1 root root 8, 100  ... blockFile

此節點對應 major=8 (sd 驅動)、minor=100 (第 7 顆磁碟第 4 分區),實際無此硬體時讀寫會報 No such device,但可用於測試程式對裝置節點的操作邏輯。

3. 建立字元裝置

# mknod charFile c 4 100
# ls -l charFile
crw-r--r-- 1 root root 4, 100  ... charFile

major=4 通常為 tty 相關驅動。

三種裝置檔對比

類型權限前綴典型用途資料流向
區塊b磁碟、分區、Loop 裝置緩衝、隨機存取、支援檔案系統
字元c終端、序列埠、聲音、GPU串流、無緩衝、順序存取
管道p進程間通訊 (FIFO)單向、先進先出、無隨機存取

現代系統的自動管理

  • udev 監聽核心 uevent,依規則 /usr/lib/udev/rules.d/*.rules 自動建立/移除 /dev/ 節點、設定權限、符號連結。
  • 容器環境:docker run --device=/dev/sdb:/dev/xvdb 將宿主節點映射進容器。
  • 手動 mknod 現主要用於:
    - 最小化 initramfs 救援環境
    - 嵌入式系統無 udev 時
    - 測試程式對特定 major/minor 的處理

權限與安全

# 建立後立即設定正確權限與擁有者
mknod /dev/mydev b 8 200
chown root:disk /dev/mydev
chmod 660 /dev/mydev

避免預設 root:root 644 導致非特權用戶可讀寫裝置。

Copyright © Windows教程網 All Rights Reserved