タイトル: lsblk デバイスをツリー状で表示する
SEOタイトル: lsblk コマンド完全ガイド — ブロックデバイスをツリー状で確認する
| この記事の要点 |
|
lsblk とは
lsblk (list block devices) は Linux のすべてのブロックデバイス (物理ディスク、パーティション、LVM 論理ボリューム、暗号化デバイス、loop デバイスなど) をツリー構造で一覧表示するコマンドです。/proc/partitions と sysfs からデバイス情報を取得しており、ディスク構成の全体像を最も素早く把握できます。
# 基本実行
lsblk
# NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
# sda 8:0 0 500G 0 disk
# ├─sda1 8:1 0 512M 0 part /boot/efi
# ├─sda2 8:2 0 1G 0 part /boot
# └─sda3 8:3 0 498.5G 0 part /
# sdb 8:16 0 2T 0 disk
# └─sdb1 8:17 0 2T 0 part /data
# sr0 11:0 1 1024M 0 rom
出力カラムの意味
| カラム | 意味 |
|---|---|
| NAME | デバイス名 (sda, sda1, nvme0n1, dm-0 など) |
| MAJ:MIN | メジャー番号 : マイナー番号 |
| RM | リムーバブル (1=USB等, 0=固定) |
| SIZE | 容量 |
| RO | 読み取り専用 (1/0) |
| TYPE | disk / part / lvm / crypt / loop / rom |
| MOUNTPOINTS | マウント先 (複数あり得る、util-linux 2.37+) |
ファイルシステム情報も表示: -f
lsblk -f
# NAME FSTYPE LABEL UUID MOUNTPOINTS
# sda
# ├─sda1 vfat EFI 1234-ABCD /boot/efi
# ├─sda2 ext4 boot abc12345-def0-6789-abcd-1234567890ab /boot
# └─sda3 ext4 root efgh5678-ijkl-9012-mnop-3456789012cd /
# sdb
# └─sdb1 xfs data ijkl9012-mnop-3456-qrst-7890123456ef /data
カラム指定: -o
# 必要なカラムだけ
lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT,UUID
# 表示可能な全カラム一覧
lsblk --help | grep -A100 "Available columns"
# NAME, KNAME, PATH, MAJ:MIN, FSAVAIL, FSSIZE, FSTYPE, FSUSED, FSUSE%,
# FSROOTS, FSVER, MOUNTPOINT, MOUNTPOINTS, LABEL, UUID, PTUUID, PTTYPE,
# PARTTYPE, PARTLABEL, PARTUUID, RA, RO, RM, MODEL, SERIAL, VENDOR,
# REV, WWN, HCTL, TRAN, SUBSYSTEMS, SCHED, SIZE, STATE, TYPE ... など多数
# モデル名 + シリアルも (デバイス特定に便利)
lsblk -o NAME,SIZE,MODEL,SERIAL,TRAN
# NAME SIZE MODEL SERIAL TRAN
# sda 500G Samsung SSD 870 EVO S678NX0R501234A sata
# nvme0n1 1T WD_BLACK SN850 21042X800123 nvme
その他の便利オプション
| オプション | 用途 |
|---|---|
-a | 空デバイスも含めて全件 |
-J | JSON 出力 (jq / スクリプト向け) |
-l | ツリーでなくフラットなリスト |
-p | フルパス表示 (/dev/sda1) |
-n | ヘッダ非表示 (パイプ向け) |
-d | パーティションを表示せず親ディスクのみ |
-i | ASCII で罫線 (古い端末向け) |
-S | SCSI デバイス情報 |
-D | discard (TRIM) サポート情報 |
JSON 出力でスクリプト処理
lsblk -J -o NAME,SIZE,FSTYPE,MOUNTPOINT
# 結果例
# {
# "blockdevices": [
# {"name": "sda", "size": "500G", "fstype": null, "mountpoint": null,
# "children": [
# {"name": "sda1", "size": "512M", "fstype": "vfat", "mountpoint": "/boot/efi"},
# {"name": "sda3", "size": "498G", "fstype": "ext4", "mountpoint": "/"}
# ]
# }
# ]
# }
# jq で / にマウントされているデバイスだけ
lsblk -J | jq -r '.blockdevices[] | .children[]? | select(.mountpoint=="/") | .name'
# ext4 パーティションだけ
lsblk -J -o NAME,FSTYPE | jq -r '.. | select(.fstype? == "ext4") | .name'
fdisk -l との比較
| 項目 | lsblk | fdisk -l |
|---|---|---|
| 権限 | 不要 (一般ユーザ可) | root が必要 |
| 表示 | ツリー / マウント / FS | パーティションテーブル詳細 |
| セクタ単位の情報 | なし | Start/End セクタあり |
| LVM / RAID | 展開して表示 | 物理ディスクのみ |
| 主用途 | 全体像の確認 | パーティション切り直し前の確認 |
UUID で永続的にマウント
デバイス名 /dev/sdb1 は USB を抜き差しすると /dev/sdc1 になり得るため、/etc/fstab は UUID で書くのが定石です:
# UUID を取得
lsblk -f
# または
blkid /dev/sdb1
# /dev/sdb1: UUID="abc12345-def0-..." TYPE="ext4"
# /etc/fstab
# UUID=abc12345-def0-... /data ext4 defaults,noatime 0 2
# /dev/disk/by-uuid/ から確認
ls -la /dev/disk/by-uuid/
# abc12345-... -> ../../sdb1
Docker コンテナ内での lsblk
# 通常のコンテナでは見えない (デバイスがマウントされていない)
docker run --rm ubuntu lsblk
# → 空 or sda のみ
# --privileged で実行 (ホストのデバイスが見える)
docker run --rm --privileged ubuntu lsblk
# 特定のデバイスをマウント
docker run --rm --device=/dev/sda alpine lsblk
関連コマンド
df -h— マウント中の FS の使用率du -sh dir— ディレクトリの容量blkid— UUID / FSTYPE のみ表示findmnt— マウント情報をツリーでfdisk -l/parted -l— パーティションテーブル詳細smartctl -a /dev/sda— SMART 情報nvme list— NVMe 専用一覧
FAQ
Q: USB を挿しても lsblk に出ない
A: dmesg | tail でカーネルが検出しているか確認。検出後 partprobe や udevadm trigger で再認識。
Q: dm-0, dm-1 と表示されるのは?
A: device-mapper の論理デバイス (LVM や crypt)。lsblk なら親に vg/lv 名が表示される。
Q: TYPE が loop のものは何?
A: snap パッケージや ISO マウントの仮想ブロックデバイス。--exclude 7 (loop の MAJOR) で除外できる。