lsblk / blkid 入門 - ブロックデバイスとUUIDを確認する

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:読み取り専用なら 1
  • TYPEdisk(実ディスク)/ part(パーティション)/ lvm / crypt(暗号化)/ rom / loop
  • MOUNTPOINTS:マウント先(未マウントなら空)

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入門 を参照。

つまずきポイントと対処

結論: 「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"

まとめ / 次に読む