blkid 與 lsblk:磁碟裝置識別 文章首圖

blkid 與 lsblk:磁碟裝置識別

blkid 與 lsblk:磁碟裝置識別

在 Linux 系統管理與開發中,磁碟裝置的識別與掛載是基礎且關鍵的環節。當我們需要查看系統中的儲存設備、檔案系統標籤或 UUID 時,blkidlsblk 是最常用的兩個指令。雖然它們的功能有重疊,但側重點截然不同: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"

從輸出中可以看到,每個裝置行包含三個關鍵欄位:

  1. 裝置路徑:例如 /dev/sda1
  2. UUID:全球唯一的識別碼,格式為 UUID="..."
  3. TYPE:檔案系統類型,如 ext4swapntfs 等。
  4. 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(邏輯卷)。樹狀結構(使用 ├─└─ 符號)直觀地展示了 sda1sda 的一部分。

實用選項與進階應用

  • 僅顯示掛載點:使用 -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 查看核心訊息,確認是否因檔案系統損毀或類型不符導致。

小結

blkidlsblk 是 Linux 磁碟管理的雙子星。當你需要精確的 UUID、標籤或檔案系統類型以進行配置時,blkid 是你的首選;當你需要理解磁碟的層級結構、分區佈局與掛載狀態時,lsblk 則提供更直觀的視覺化資訊。熟練運用這兩者,能讓你在系統維護、除錯與自動化腳本撰寫上事半功倍。建議在日常工作中結合使用,例如先用 lsblk 確認結構,再用 blkid 取得 UUID 寫入 /etc/fstab,即可建立穩健的儲存配置。