lsblk 指令:查看磁碟、分割區結構與 UUID
lsblk 指令會以樹狀結構列出連接到伺服器的磁碟、分割區與掛載位置,並能一次查看磁碟大小、檔案系統類型,甚至 UUID。在 AlmaLinux 9 伺服器上執行 lsblk 後,snap 套件建立的 loop 裝置比磁碟先列出,因此我們用 -e 7 把它們濾掉。接著用 -f 確認根分割區的 xfs 檔案系統與 UUID。
下方輸出中的磁碟大小與 UUID 為範例值。
1️⃣ 讀懂 lsblk 指令的基本輸出
在以 snap 安裝程式的伺服器上不加選項執行 lsblk,各套件版本掛載的 loop 裝置會比磁碟先排成一列出現,因此要用 -e 指定 loop 裝置的裝置編號 7,把它們排除後再查看。
lsblk -e 7NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
nvme0n1 259:0 0 80G 0 disk
├─nvme0n1p1 259:1 0 1M 0 part
├─nvme0n1p2 259:2 0 200M 0 part /boot/efi
├─nvme0n1p3 259:3 0 1G 0 part /boot
└─nvme0n1p4 259:4 0 78.8G 0 part /NAME 欄的 nvme0n1 是磁碟。下方以 [├─] 與 [└─] 連接的 nvme0n1p1 到 nvme0n1p4,是分割這顆磁碟的分割區。就像大樓入口的樓層指南,在大樓名稱底下寫著每層樓有哪些店家。
TYPE 欄中磁碟顯示為 [disk]、分割區顯示為 [part],MOUNTPOINTS 欄則表示該分割區掛載的資料夾。在我們確認的伺服器上,根分割區 nvme0n1p4 掛載在 /,nvme0n1p3 掛載在 /boot。大小 1M 的 nvme0n1p1 是 GPT 磁碟上用於開機的 BIOS 開機分割區,因此沒有掛載位置。
MAJ:MIN 是核心分配給裝置的主編號與次編號,loop 裝置為 7,我們確認的 NVMe 磁碟為 259。RM 以 1 和 0 表示是否為可移除裝置,RO 表示是否為唯讀。
SIZE 很容易被看成剩餘空間,但 SIZE 是整個磁碟或分割區的大小。檔案系統的剩餘空間要看加上 -f 時出現的 FSAVAIL 欄。
選項不同時輸出的列與欄如何變化,可以在下方圖表中依序比較。
2️⃣ lsblk -f 確認檔案系統與 UUID
基本輸出不會顯示檔案系統類型,因此分割區用什麼格式格式化,要用 -f 確認。-f 會輸出 NAME、FSTYPE、FSVER、LABEL、UUID、FSAVAIL、FSUSE%、MOUNTPOINTS 共八欄。
lsblk -f -e 7NAME FSTYPE FSVER LABEL UUID FSAVAIL FSUSE% MOUNTPOINTS
nvme0n1
├─nvme0n1p1
├─nvme0n1p2 vfat FAT16 5A1E-3B7C 192.1M 4% /boot/efi
├─nvme0n1p3 xfs 6d2f0c4e-8b1a-4f3d-a7e2-9c5b1d0e4f28 691.4M 28% /boot
└─nvme0n1p4 xfs 2b9e7f41-c3d6-4a85-b0f1-7e4a2c9d6b13 68.5G 13% /實際執行後,根分割區與 /boot 分割區為 xfs,/boot/efi 為 FAT16 版本的 vfat。磁碟 nvme0n1 與 nvme0n1p1 沒有檔案系統,因此留白。UUID 是每個檔案系統的唯一編號,在 /etc/fstab 中以 UUID 而非裝置名稱指定要掛載的分割區時使用。
要最準確地確認檔案系統資訊時,請使用 blkid 指令。
FSAVAIL 與 FSUSE% 是已掛載檔案系統的剩餘空間與使用率。未掛載的分割區不會顯示數值。 df 指令只會輸出已掛載檔案系統的大小與使用量。lsblk 則不論是否掛載,都會一併輸出磁碟與分割區的結構。
3️⃣ lsblk -o 選擇欄位與 -b 位元組單位
在 -o 後面以逗號連接欄位名稱,就只會依序列出那些欄位。可用的欄位名稱可在 [lsblk --help] 末尾的清單中確認。
lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT -e 7NAME SIZE FSTYPE MOUNTPOINT
nvme0n1 80G
├─nvme0n1p1 1M
├─nvme0n1p2 200M vfat /boot/efi
├─nvme0n1p3 1G xfs /boot
└─nvme0n1p4 78.8G xfs /MOUNTPOINT 只輸出一個掛載位置,MOUNTPOINTS 則在同一檔案系統掛載於多處時全部輸出。若只想在基本欄位後面多加一欄,請像 [-o +UUID] 一樣在欄位名稱前加上 +。
-b 會以位元組為單位的整數輸出大小。用眼睛比較時基本單位比較好讀,因此 -b 適合用在計算或比較大小的腳本。
lsblk -b -o NAME,SIZE -e 7NAME SIZE
nvme0n1 85899345920
├─nvme0n1p1 1048576
├─nvme0n1p2 209715200
├─nvme0n1p3 1073741824
└─nvme0n1p4 84613774848基本輸出的 G 與 M 以 1,024 為單位,所以 80G 的磁碟會顯示為 85,899,345,920 位元組。
4️⃣ lsblk -d 磁碟清單與 -p 完整路徑
在有多顆磁碟的伺服器上,分割區的列會混在一起,不易確認磁碟清單,因此用 -d 去掉分割區,只輸出磁碟的列。
lsblk -d -e 7NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
nvme0n1 259:0 0 80G 0 disk 輸出中只留下磁碟 nvme0n1 這一列,底下的四列分割區沒有出現。
加上 -p 後裝置名稱前面會加上 /dev/,以完整路徑顯示。這個路徑可以直接放進 mount 等其他指令。
lsblk -p -e 7NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
/dev/nvme0n1 259:0 0 80G 0 disk
├─/dev/nvme0n1p1 259:1 0 1M 0 part
├─/dev/nvme0n1p2 259:2 0 200M 0 part /boot/efi
├─/dev/nvme0n1p3 259:3 0 1G 0 part /boot
└─/dev/nvme0n1p4 259:4 0 78.8G 0 part /只有 NAME 欄從 /dev/nvme0n1 到 /dev/nvme0n1p4 變成完整路徑,其餘欄位與基本輸出相同。
以裝置路徑作為參數時,只會輸出該裝置及其下方的分割區;以分割區路徑作為參數時,只會出現該分割區一列。
lsblk /dev/nvme0n1p4NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
nvme0n1p4 259:4 0 78.8G 0 part /輸出中只出現 nvme0n1p4 一列,不會加上磁碟列與分支符號。輸入不存在的裝置路徑時,出現 [not a block device] 錯誤,結束代碼為 32。
5️⃣ lsblk 指令的腳本用輸出與選項
在腳本中直接擷取基本輸出看似方便,但基本輸出與 -f 的欄位組成日後可能改變,因此腳本中要用 -o 直接指定欄位。
-n 會去掉標題列只輸出值,因此適合只需要一個值的情況,例如單一分割區的檔案系統類型。
lsblk -no FSTYPE /dev/nvme0n1p4xfs沒有標題列,只會出現根分割區的檔案系統類型 xfs 一個字,因此可以直接存入 shell 變數。
-P 會將每一欄以 [名稱=”值”] 的形式輸出在同一列。在 AlmaLinux 9 的 util-linux 2.37 中,只要加上 -P,名稱就會改成方便當作 shell 變數讀取的形式,例如 MAJ:MIN 變成 MAJ_MIN、FSUSE% 變成 FSUSE_PCT。
lsblk -P -o NAME,FSTYPE,MOUNTPOINT /dev/nvme0n1p4NAME="nvme0n1p4" FSTYPE="xfs" MOUNTPOINT="/"指定的三個欄位會依 NAME、FSTYPE、MOUNTPOINT 的順序出現在同一列。所有值都放在雙引號中。
-J 會以 JSON 輸出。不加 -d 時,分割區會放進磁碟底下的 children 陣列。與 -b 一起使用時只有 size 會變成數字,FSAVAIL 等其他大小欄位仍是字串。
lsblk -J -d -o NAME,SIZE,TYPE -e 7{
"blockdevices": [
{
"name": "nvme0n1",
"size": "80G",
"type": "disk"
}
]
}加上 -d 後,blockdevices 陣列只會有一顆磁碟,也不會出現 children 陣列。
🔲 lsblk 指令選項
| 選項 | 複製 | 說明 |
|---|---|---|
| -e, --exclude | 排除指定主編號的裝置。指定 7 時會排除 loop 裝置。 | |
| -f, --fs | 輸出檔案系統類型、UUID、剩餘空間與使用率。 | |
| -o, --output | 只依序輸出以逗號指定的欄位。 | |
| -b, --bytes | 以位元組為單位的整數輸出 SIZE 欄。 | |
| -d, --nodeps | 去掉分割區的列,只輸出磁碟的列。 | |
| -p, --paths | 以 /dev/ 開頭的完整路徑輸出裝置名稱。 | |
| -n, --noheadings | 去掉標題列,只輸出值。 | |
| -P, --pairs | 將欄位名稱與值成對輸出在同一列。 | |
| -J, --json | 以 JSON 格式輸出。 | |
| -a, --all | 連大小為 0 的空裝置也一併輸出。 |
| 選項 | 複製 | 說明 |
|---|---|---|
| -I, --include | 只輸出指定主編號的裝置。 | |
| -l, --list | 以清單格式取代樹狀結構輸出。 | |
| -r, --raw | 以不對齊欄距的 raw 格式輸出。 | |
| -i, --ascii | 以 ASCII 字元輸出樹狀線條。 | |
| -s, --inverse | 反轉相依關係,在分割區下方輸出磁碟。 | |
| -S, --scsi | 只輸出 SCSI 裝置資訊。 | |
| -t, --topology | 輸出磁區大小與 I/O 排程器等拓撲資訊。 | |
| -m, --perms | 輸出裝置的擁有者、群組與權限。 | |
| -x, --sort | 依指定欄位排序後以清單格式輸出。 | |
| -O, --output-all | 輸出所有可用的欄位。 |
🔲 lsblk 指令模擬器
在下方模擬器中,可以親自輸入到目前為止的指令,確認各選項的輸出有什麼不同。
🔢 FAQ & 推薦內容
ℹ️ 聯盟行銷說明
本站內容包含聯盟行銷連結。訪客透過這些連結購買商品或服務時,本站會從賣家獲得佣金。在這個過程中,購買者支付的金額(遇到活動折扣時金額會降低↓)並不會因此提高。刊登的價格、折扣與庫存資訊以撰寫當時為準,可能與實際情況不同,購買前請向賣家做最後確認。商品的挑選與評價依本站自訂的標準撰寫,是否支付佣金不會影響介紹順序或評價內容。