Infra Engineer

ブロックデバイスの属性表示~blkidコマンド・lsblkコマンド~
2022.06.28
Lv1

ブロックデバイスの属性表示~blkidコマンド・lsblkコマンド~

本記事の対象者

LPIC level1習得を目指す初学者の方
コマンドの基本的な用途について、要点を絞って解説します。


今回の内容

今回は、blkidコマンドとlsblkコマンドについて解説します。
両方ともブロックデバイスに関するコマンドです。
ブロックデバイスが何か分からない方は「デバイスファイルについて」の記事を先にお読みください。

・UUIDとラベル
・blkidコマンド
・lsblkコマンド
・まとめ
・確認問題

UUIDとラベル

blkidコマンドは、パーティションのUUIDやラベルを確認することができます。

まず、「UUID」「ラベル」とは何かを先に説明します。

 

UUID、ラベルとは何か

  • UUID

個々のパーティションを識別する128bitの固有番号です。ここでの「固有」とは「世界中でただひとつ」の意味です。
システムハードウェア情報とタイムスタンプをもとに、ランダムに生成されます。

  • ラベル

パーティションにつけることができる「名前」です。
「e2label」コマンドで好きに設定することができます。

 

どこで何のために使われているのか

[root@localhost ~]# cat /etc/fstab
/dev/mapper/centos-root /                       xfs     defaults        0 0
UUID=ca954bfe-e7ce-438d-bb79-cd13b768f028 /boot                   xfs     defaults        0 0
/dev/mapper/centos-swap swap                    swap    defaults        0 0
/dev/sdb1       /mnt    ext3    defaults        1       2

UUIDの用途としては、「/etc/fstab」内の記述に使用するというものがあります。
「/etc/fstab」の一番左の列に通常パーティション名(デバイスファイル名)を記述します。
最終行を見ると「/dev/sdb1」のように記述されているのが分かります。

しかし、この記述方法には欠点があります。
ポイントは「デバイスファイル名は可変である」ということです。
デバイスファイル名はOSに認識される順番次第で変動する可能性があります。
よって、予期せぬ名称変更が発生し、設定内容がうまく反映されなくなってしまう可能性があるのです。

それに対して、最上行の「UUID」による記述方法だとどうでしょうか。
UUIDは識別固有番号であり不変です。よって、デバイスファイル名で記述したときのような不整合は起きないのです。

[root@localhost ~]# e2label /dev/sdb1 /sample
[root@localhost ~]# vi /etc/fstab
[root@localhost ~]# cat /etc/fstab
/dev/mapper/centos-root /                       xfs     defaults        0 0
UUID=ca954bfe-e7ce-438d-bb79-cd13b768f028 /boot                   xfs     defaults        0 0
/dev/mapper/centos-swap swap                    swap    defaults        0 0
LABEL=/sample   /mnt    ext3    defaults        1       2

ラベルの用途も基本的に同じです。
「/dev/sdb1」に「/sample」という名前をつけ、「/etc/fstab」内の記述をこのラベル名を使用した形に変更しました。
この方法でもデバイスファイル名で記述したときのような不具合を回避することが出来ます。


blkidコマンド

blkidコマンドは、ブロックデバイスの属性を表示するコマンドです。
「/etc/fstab」内の記述をUUIDやLABELを用いて行った場合、元のデバイスファイル名が不明になります。
blkidコマンドを使用することで、デバイスファイルとUUIDやLABELの対応を調べることができます。

blkid
意味 ブロックデバイスの属性を表示する。
書式 blkid [オプション] [デバイスファイル名]

blkidコマンドの主なオプションは以下です。

オプション 説明
-s <タグ名> 指定したタグの情報のみ表示する。
例:UUID、LABEL、TYPE
-t <タグ名=値> 値の条件に一致するブロックデバイスの属性を表示する。
-l 「-t」の値にマッチするデバイスファイルが見つかった時点で検索を終了する。
例①)
利用可能なすべてのブロックデバイスの属性を表示。
[root@localhost ~]# blkid
/dev/sda1: UUID="ca954bfe-e7ce-438d-bb79-cd13b768f028" TYPE="xfs"
/dev/sda2: UUID="Na2Soy-k6hJ-zcTa-2NAx-FYqM-WWOh-MrXR37" TYPE="LVM2_member"
/dev/sdb1: LABEL="/sample" UUID="e9a28c74-13b0-41f6-b2e2-adf9779ce58d" TYPE="ext3"
/dev/mapper/centos-root: UUID="0d4d8f6e-6a23-40eb-8af9-57f0faf6449d" TYPE="xfs"
/dev/mapper/centos-swap: UUID="0d8b226a-60f5-43e6-bdcc-f009091b2551" TYPE="swap"

引数なしで実行すると、利用可能なすべてのブロックデバイスの属性を表示することが出来ます。
デバイスファイルに紐づくUUIDやLABELを確認することが出来ます。

例②)
UUID情報のみを表示。(-s)
[root@localhost ~]# blkid -s UUID
/dev/sda1: UUID="ca954bfe-e7ce-438d-bb79-cd13b768f028"
/dev/sda2: UUID="Na2Soy-k6hJ-zcTa-2NAx-FYqM-WWOh-MrXR37"
/dev/sdb1: UUID="e9a28c74-13b0-41f6-b2e2-adf9779ce58d"
/dev/mapper/centos-root: UUID="0d4d8f6e-6a23-40eb-8af9-57f0faf6449d"
/dev/mapper/centos-swap: UUID="0d8b226a-60f5-43e6-bdcc-f009091b2551"

「-s UUID」と指定すると、UUIDの情報のみを表示できます。
「LABEL」「TYPE」などの指定も可能です。

例③)
ファイルシステムタイプが「xfs」のもののみ表示。(-t)
[root@localhost ~]# blkid -t TYPE="xfs"
/dev/sda1: UUID="ca954bfe-e7ce-438d-bb79-cd13b768f028" TYPE="xfs"
/dev/mapper/centos-root: UUID="0d4d8f6e-6a23-40eb-8af9-57f0faf6449d" TYPE="xfs"

「-t」オプションでタグと値を指定すると、その条件に合致するもののみ表示されます。

例④)
ファイルシステムタイプが「xfs」のもので、最初にヒットしたもののみ表示。(-l)
[root@localhost ~]# blkid -lt TYPE="xfs"
/dev/mapper/centos-root: UUID="0d4d8f6e-6a23-40eb-8af9-57f0faf6449d" TYPE="xfs"

「-l」オプションを併用すると、最初に条件に合致したもののみが表示されます。

例⑤)
デバイスファイル名を指定して実行。
[root@localhost ~]# blkid /dev/sdb1
/dev/sdb1: LABEL="/sample" UUID="e9a28c74-13b0-41f6-b2e2-adf9779ce58d" TYPE="ext3"
[root@localhost ~]# blkid -s LABEL /dev/sdb1
/dev/sdb1: LABEL="/sample"

デバイスファイル名を引数にとることも可能です。


lsblkコマンド

lsblkコマンドは、ブロックデバイスの情報をツリー形式で一覧表示するコマンドです。
blkidコマンドでは取得できない情報も見ることができます。
blkidコマンドよりは、dfコマンドなどに近いと言えます。

tne2fs
意味 ブロックデバイスの情報をツリー形式で一覧表示する。
書式 lsblk [オプション] [デバイスファイル名]

lsblkコマンドの主なオプションは以下です。

オプション 説明
-a(–all) 空のデバイスファイルも表示する。
-d(–nodeps) 指定したデバイスの情報のみ表示する。
-e(–exclude) 指定したメジャー番号を持つデバイス情報を除外する。
-I(–include) 指定したメジャー番号を持つデバイス情報のみ表示する。。
-f(-fs) ファイルシステムの情報を表示する。
-m(–perms) デバイスの所有者、グループ、権限を表示する。
-l(–list) リスト形式で表示する。
-o(–output) 指定した列のみ表示する。
-P(–pairs) 「キー=値」の形式で表示する。
-p(–paths) デバイスのパスも表示する。
-r(–raw) 値をフォーマットせずに表示する。
-t(–topology) トポロジ情報を表示する。
例①)
ブロックデバイスの情報をツリー形式で一覧表示。


サイズやマウントポイントなどが確認できます。

例②)
「/dev/sdb」の情報のみ表示する。(-d)


階層構造関係なく、指定したデバイスの情報のみが表示されています。

例③)
ファイルシステムの情報を表示する。(-fs)

UUIDやLABELの情報が見えます。

例④)
「キー=値」の形式で表示。(-P)

例④)
デバイスの所有者、グループ、権限を表示する。(-m)


まとめ

今回は、blkidコマンドとlsblkコマンドについて解説しました。
ブロックデバイスの情報を調べたい時に使用してください。

最後に、確認問題で今回の記事で得た知識を確かめましょう。


確認問題

問題

「/dev/sda1」に設定されたUUIDとLABEL名を取得するにはどのようなコマンドが必要か。(2つ選択)

A) blkid /dev/sda1
B) blkid -s UUID /dev/sda1
C) lsblk /dev/sda1
D) lsblk -t UUID,LABEL /dev/sda1
E) lsblk -f /dev/sda1

解答
答え:A、E

A) ⇒ 正解です。
B) ⇒ これではUUIDしか表示されません。
C) ⇒ オプションなしのlsblkでは、UUIDやLABELを取得できません。
D) ⇒ lsblkの-tオプションは、トポロジ情報を取得するものです、このような使い方はありません。
E) ⇒ 正解です。-fオプションでファイルシステムの情報を得ることができます。