lsblk / blkid 入門 - ブロックデバイスとUUIDを確認する
lsblk と blkid は何が違う?
結論:
lsblkはデバイスの「ツリー構造とサイズ」を見るツール、blkidは「UUID・LABEL・FS 種別」を引くツール。役割が違うので両方使う。
ストレージ作業の最初の一歩は「どのデバイスがどう繋がっていて、どの UUID か」を正確に把握することだ。ここを間違えると、fstab に誤った行を書いて起動不能にする事故につながる。
lsblk: ディスク → パーティション → LVM/暗号化 の 階層、サイズ、マウント先を一覧するblkid: 各デバイスの UUID / LABEL / TYPE(ファイルシステム種別)/ PARTUUID を引く
使い分けの目安
- 全体像・容量・マウント状況を見る →
lsblk/lsblk -f fstab用に UUID を 1 個だけ抜く →blkid -s UUID -o value <dev>
前提(対象環境)
- ディストリ:Ubuntu / RHEL 系どちらも対象(
util-linux付属コマンド) - フルスキャンには root 権限(
sudo)が必要な場合がある
lsblk でブロックデバイスを一覧するには?
結論: 引数なしの
lsblkで全ブロックデバイスをツリー表示できる。TYPE列で disk / part / lvm / crypt を見分ける。
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS sda 8:0 0 100G 0 disk ├─sda1 8:1 0 1G 0 part /boot └─sda2 8:2 0 99G 0 part / sdb 8:16 1 14.5G 0 disk └─sdb1 8:17 1 14.5G 0 part /media/usb nvme0n1 259:0 0 476.9G 0 disk └─nvme0n1p1 259:1 0 476.9G 0 part /data
主要な列の意味:
NAME:デバイス名(ツリーのインデントが親子関係)RM:リムーバブルなら1(USB メモリ等)SIZE:容量RO:読み取り専用なら1TYPE:disk(実ディスク)/part(パーティション)/lvm/crypt(暗号化)/rom/loopMOUNTPOINTS:マウント先(未マウントなら空)
lsblk は sysfs / udev を読むだけなので、一般ユーザーでも実行できる(root 不要)。
よく使うオプション
$ lsblk -p # フルパス表示(/dev/sda1 のように) $ lsblk -d # パーティションを畳んでディスクだけ表示 $ lsblk -b # サイズをバイト単位で表示(スクリプト向け) $ lsblk -J # JSON 出力(jq で処理しやすい)
lsblk -f で UUID とファイルシステムを見るには?
結論:
lsblk -fでファイルシステム種別・LABEL・UUID・使用率をまとめて確認できる。日常の確認はまずこれで足りる。
$ lsblk -f
NAME FSTYPE FSVER LABEL UUID FSAVAIL FSUSE% MOUNTPOINTS sda ├─sda1 ext4 1.0 boot 6e1f...-a2c1 812M 12% /boot └─sda2 ext4 1.0 9b3d...-77e0 61.2G 35% / nvme0n1 └─nvme0n1p1 xfs data c4a8...-1f93 410G 8% /data
-f(--fs)は内部で libblkid を使い、blkid 相当の情報を ツリー表示に合成してくれる。FS 種別・UUID・空き容量を一望できるため、実務ではこれが起点になる。
任意の列だけ出したいときは -o で指定する。
$ lsblk -o NAME,SIZE,FSTYPE,UUID,MOUNTPOINT
利用可能な列名は lsblk --help の COLUMNS 一覧、または lsblk -O(全列)で確認できる。
blkid で UUID・LABEL・種別を確認するには?
結論:
blkidは各デバイスのファイルシステム属性を引く専用ツール。-sと-o valueを組み合わせると UUID だけを抽出できる。
引数なしで実行すると、認識済みデバイスの属性を列挙する。
$ sudo blkid
/dev/sda1: LABEL="boot" UUID="6e1f...-a2c1" TYPE="ext4" PARTUUID="2b1c...-01" /dev/sda2: UUID="9b3d...-77e0" TYPE="ext4" PARTUUID="2b1c...-02" /dev/nvme0n1p1: LABEL="data" UUID="c4a8...-1f93" TYPE="xfs" PARTUUID="8f0a...-01"
特定デバイスだけ調べる場合は引数に渡す。
$ sudo blkid /dev/sda2
UUID だけを抜き出す(スクリプト向け)
fstab への転記やスクリプトでは、値だけが欲しい。-s(属性名)と -o value(値のみ出力)を使う。
$ sudo blkid -s UUID -o value /dev/sda2
9b3d...-77e0
blkid はデバイスの スーパーブロックをプローブするため、フルスキャンには root 権限が要る。一般ユーザーで実行すると、キャッシュ(/run/blkid/blkid.tab)に載っている分しか返らず、空振りすることがある。
UUID と PARTUUID はどう違う?
結論:
UUIDはファイルシステムが持つ ID、PARTUUIDはパーティションテーブル(主に GPT)が持つ ID。フォーマットし直すと UUID は変わるが PARTUUID は残る。
| 識別子 | 由来 | フォーマットで変わる | 主な用途 |
|---|---|---|---|
UUID |
ファイルシステムのスーパーブロック | 変わる | fstab のマウント指定(最も一般的) |
LABEL |
ファイルシステムのラベル文字列 | 任意に変更可 | 人間が読みやすい識別 |
PARTUUID |
GPT パーティションテーブル | 残る(再フォーマット耐性) | ブートローダ / FS を持たない領域 |
PARTLABEL |
GPT パーティションラベル | 任意に変更可 | パーティション単位の識別 |
swap や未フォーマット領域には FS の UUID が無いことがある。その場合は PARTUUID で指すと安定する。
fstab で UUID を使うには?
結論:
/dev/sda2のようなデバイス名は起動順で変わり得るため、fstabではUUID=指定が安全。blkidで取得した値を貼り付ける。
/dev/sdX の番号は、ディスクを増設したり起動タイミングがずれたりすると入れ替わることがある。固定の UUID で指定すれば、その心配がない。
# 1. UUID を取得 $ sudo blkid -s UUID -o value /dev/sda2 9b3d...-77e0 # 2. /etc/fstab に記述(タブ/スペース区切り) # <device> <mount> <type> <options> <dump> <pass> UUID=9b3d...-77e0 /data xfs defaults 0 2
fstab を編集したら、再起動前に必ず sudo mount -a で文法と実マウントを検証する。誤記のまま再起動すると 緊急モードで止まり、起動不能になり得る。エラーが出なければOK。
詳しい手順は マウントとfstab入門 を参照。
つまずきポイントと対処
結論: 「UUID が出ない」「デバイスが見えない」の多くは、権限不足・未フォーマット・キャッシュ未更新が原因。
blkidが空 / 一部しか出ない →sudoを付ける。プローブには root が必要- 新しく繋いだ USB が
lsblkに出ない →lsblkを再実行。それでも無ければdmesg | tailで認識ログを確認 UUIDが表示されない領域がある → 未フォーマット、または swap。PARTUUIDで指すfstab記述後に起動できない → 編集前にmount -aで検証する習慣をつける
コピペ用:fstab 行を 1 コマンドで生成
DEV=/dev/sda2 echo "UUID=$(sudo blkid -s UUID -o value "$DEV") /data $(sudo blkid -s TYPE -o value "$DEV") defaults 0 2"