blkid 與 lsblk:磁碟裝置識別
在 Linux 系統管理與開發中,磁碟裝置的識別與掛載是基礎且關鍵的環節。當我們需要查看系統中的儲存設備、檔案系統標籤或 UUID 時,blkid 與 lsblk 是最常用的兩個指令。雖然它們的功能有重疊,但側重點截然不同:blkid 專注於「內容」與「識別碼」,而 lsblk 則擅長呈現「結構」與「關聯性」。本文將深入解析這兩個指令的用法,幫助你更精準地掌握磁碟資訊。
blkid:查詢區塊裝置屬性
blkid 的主要功能是查詢每個區塊裝置(block device)的屬性,包含檔案系統類型、標籤(Label)以及唯一識別碼(UUID)。這些資訊對於 /etc/fstab 的設定尤為重要,因為使用 UUID 掛載磁碟比使用裝置名稱(如 /dev/sda1)更具穩定性,避免因裝置順序變動導致掛載錯誤。
基本用法與輸出解析
在 Ubuntu 22.04 或 Debian 12 上,若未安裝 blkid,可透過 sudo apt install util-linux 安裝。執行 blkid 並不加任何參數,即可列出所有可讀取的區塊裝置資訊:
$ blkid
/dev/sda1: UUID="a1b2c3d4-e5f6-7890-abcd-ef1234567890" TYPE="ext4" PARTUUID="00012345-01"
/dev/sda2: UUID="567890ab-cdef-1234-5678-90abcdef1234" TYPE="swap"
/dev/sdb1: UUID="b2c3d4e5-f6a7-8901-bcde-f12345678901" TYPE="ext4" LABEL="DATA_DISK"
從輸出中可以看到,每個裝置行包含三個關鍵欄位:
- 裝置路徑:例如
/dev/sda1。 - UUID:全球唯一的識別碼,格式為
UUID="..."。 - TYPE:檔案系統類型,如
ext4、swap、ntfs等。 - LABEL(如有):檔案系統的卷標,例如
DATA_DISK。
常用選項解析
-
查詢特定裝置:若只想查看某個特定磁碟的資訊,可直接指定裝置名稱。
$ blkid /dev/sdb1 /dev/sdb1: UUID="b2c3d4e5-f6a7-8901-bcde-f12345678901" TYPE="ext4" LABEL="DATA_DISK" -
僅顯示 UUID:在腳本中,我們常需要提取 UUID 來動態掛載磁碟。使用
-u選項可簡化輸出:$ blkid -u UUID /dev/sdb1 /dev/sdb1: UUID="b2c3d4e5-f6a7-8901-bcde-f12345678901" -
過濾特定類型:若系統中有大量磁碟,可使用
-t選項過濾特定檔案系統類型。例如,找出所有ext4格式的磁碟:$ blkid -t TYPE=ext4 /dev/sda1: UUID="a1b2c3d4-e5f6-7890-abcd-ef1234567890" TYPE="ext4" /dev/sdb1: UUID="b2c3d4e5-f6a7-8901-bcde-f12345678901" TYPE="ext4"
lsblk:樹狀結構檢視
與 blkid 側重於元數據不同,lsblk(List Block Devices)旨在以樹狀結構展示磁碟裝置的物理與邏輯關係。它能清楚顯示磁碟(Disk)、分區(Partition)、邏輯卷(LVM)以及 RAID 陣列之間的層級關係。
基本用法與結構理解
執行 lsblk 即可看到系統中所有區塊裝置的列表。預設情況下,它會顯示裝置名稱、主要/次要編號、大小、類型、讀寫狀態以及掛載點。
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 100G 0 disk
├─sda1 8:1 0 50G 0 part /
├─sda2 8:2 0 1G 0 part [SWAP]
└─sda3 8:3 0 49G 0 part /home
sdb 8:16 0 500G 0 disk
└─sdb1 8:17 0 500G 0 part /mnt/data
在輸出中,TYPE 欄位區分了 disk(實體磁碟)、part(分區)與 lvm(邏輯卷)。樹狀結構(使用 ├─ 和 └─ 符號)直觀地展示了 sda1 是 sda 的一部分。
實用選項與進階應用
-
僅顯示掛載點:使用
-f選項可顯示檔案系統資訊,類似blkid的內容,但保留樹狀結構:$ lsblk -f NAME FSTYPE FSVER LABEL UUID FSAVAIL FSUSE% MOUNTPOINTS sda ├─sda1 ext4 1.0 a1b2c3d4-e5f6-7890-abcd-ef1234567890 45.2G 54% / ├─sda2 swap 1 [SWAP] 567890ab-cdef-1234-5678-90abcdef1234 [SWAP] └─sda3 ext4 1.0 b2c3d4e5-f6a7-8901-bcde-f12345678901 40.1G 18% /home sdb └─sdb1 ext4 1.0 DATA_DISK b2c3d4e5-f6a7-8901-bcde-f12345678901 480.5G 4% /mnt/data -
以 JSON 格式輸出:對於自動化腳本或配置管理工具(如 Ansible),JSON 格式更易於解析:
$ lsblk -J { "blockdevices": [ { "name": "sda", "maj:min": "8:0", "rm": false, "size": "100G", "type": "disk", ... } ] } -
過濾特定裝置類型:使用
-d可隱藏分區,僅顯示實體磁碟;使用-n可隱藏標題行,適合腳本處理。
常見問題與解決方案
1. blkid 無法讀取新格式化的磁碟
問題描述:剛使用 mkfs.ext4 格式化磁碟後,執行 blkid 卻看不到新資訊,或顯示 UUID="..." 為空。
原因與解決:這通常發生在磁碟表頭尚未更新或權限不足。請確保以 root 權限執行,或手動觸發 udev 規則更新:
sudo blkid -p /dev/sdb1
若仍無反應,檢查是否正確安裝了 e2fsprogs 套件,並確認裝置未被其他程式鎖定。
2. lsblk 顯示裝置但無法掛載
問題描述:lsblk 顯示磁碟存在,但 MOUNTPOINT 為空,嘗試 mount 時報錯。
原因與解決:lsblk 僅列出裝置結構,並不代表裝置已掛載。若需手動掛載,請先確認檔案系統類型正確:
sudo mkdir -p /mnt/data
sudo mount /dev/sdb1 /mnt/data
若掛載失敗,請使用 dmesg | tail 查看核心訊息,確認是否因檔案系統損毀或類型不符導致。
小結
blkid 與 lsblk 是 Linux 磁碟管理的雙子星。當你需要精確的 UUID、標籤或檔案系統類型以進行配置時,blkid 是你的首選;當你需要理解磁碟的層級結構、分區佈局與掛載狀態時,lsblk 則提供更直觀的視覺化資訊。熟練運用這兩者,能讓你在系統維護、除錯與自動化腳本撰寫上事半功倍。建議在日常工作中結合使用,例如先用 lsblk 確認結構,再用 blkid 取得 UUID 寫入 /etc/fstab,即可建立穩健的儲存配置。