lsblk コマンド:ディスク・パーティション構成と UUID の確認

テスト環境RHEL系AlmaLinux 9.8rootアカウント
ディスク・マウントコマンドlsblk場所/usr/bin/lsblk

lsblk コマンドは、サーバーに接続されたディスクとパーティション、マウント位置をツリー構造で出力し、ディスクのサイズやファイルシステムの種類、UUID までまとめて確認できるコマンドです。AlmaLinux 9 サーバーで lsblk を実行したところ、snap パッケージが作った loop デバイスがディスクより先に出力されたため、-e 7 で除外しました。続けて -f でルートパーティションの xfs ファイルシステムと UUID を確認しました。

下の出力にあるディスクのサイズと UUID は例の値です。

1️⃣ lsblk コマンドの基本出力の読み方

snap でプログラムをインストールしたサーバーで lsblk をオプションなしで実行すると、パッケージのバージョンごとにマウントされた loop デバイスがディスクより先に並んで出てくるため、loop デバイスのデバイス番号 7 を -e で指定して除外して確認します。

lsblk -e 7
NAME        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 はリムーバブルデバイスかどうか、RO は読み取り専用かどうかを 1 と 0 で示します。

SIZE を空き容量と読み違えやすいですが、SIZE はディスクやパーティション全体のサイズです。ファイルシステムの空き容量は、-f を付けたときに出る FSAVAIL 列で確認します。

オプションによって出力される行と列がどう変わるかは、下の図で順番に比べられます。

🧭 lsblk のオプション別出力:ディスクとパーティション
解説ダイアグラム
⚙️ オプション
$ lsblk -f -d -p -e 7
デバイス名
サイズ
ファイルシステム
マウント位置
/dev/nvme0n1
80G
├─/dev/nvme0n1p1
1M
├─/dev/nvme0n1p2
200M
vfat, 5A1E-…
/boot/efi
├─/dev/nvme0n1p3
1G
xfs, 6d2f…
/boot
└─/dev/nvme0n1p4
78.8G
xfs, 2b9e…
/
🖥️ 画面に出力されるもの
ディスク 1 行とパーティション 4 行、基本 7 列(NAME から MOUNTPOINTS まで)
ディスク 1 行とパーティション 4 行、ファイルシステム 8 列(FSTYPE、UUID、FSAVAIL など)
ディスク 1 行のみ、基本 7 列
ディスク 1 行とパーティション 4 行、名前が /dev/ で始まる
オプションなしでは、ディスクの下にパーティションが枝分かれしてつながります。サイズとマウント位置も一緒に表示されます。
-f はサイズの代わりにファイルシステムの種類と UUID、空き容量を出力します。ディスク nvme0n1 と、ファイルシステムのない nvme0n1p1 は空欄のままです。
-d はパーティションの行を除き、ディスクの 1 行だけを出力します。
-p を付けるとデバイス名の前に /dev/ が付き、出力されたパスをそのまま別のコマンドに渡せます。

2️⃣ lsblk -f でファイルシステムと UUID を確認

基本出力にはファイルシステムの種類が出ないため、パーティションをどの形式でフォーマットしたかは -f で確認します。-f は NAME、FSTYPE、FSVER、LABEL、UUID、FSAVAIL、FSUSE%、MOUNTPOINTS の 8 列を出力します。

lsblk -f -e 7
NAME        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 7
NAME         SIZE FSTYPE MOUNTPOINT
nvme0n1       80G        
├─nvme0n1p1    1M        
├─nvme0n1p2  200M vfat   /boot/efi
├─nvme0n1p3    1G xfs    /boot
└─nvme0n1p4 78.8G xfs    /

MOUNTPOINT はマウント位置を 1 つだけ、MOUNTPOINTS は同じファイルシステムが複数の場所にマウントされているときにすべてを出力します。基本の列の後ろに 1 つだけ足すには、[-o +UUID] のように列名の前に + を付けます。

-b はサイズをバイト単位の整数で出力します。目で比べるときは基本の単位のほうが読みやすいため、-b はサイズを計算したり比べたりするスクリプトに向いています。

lsblk -b -o NAME,SIZE -e 7
NAME               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 7
NAME    MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
nvme0n1 259:0    0  80G  0 disk 

出力にはディスク nvme0n1 の 1 行だけが残り、その下のパーティション 4 行は出ませんでした。

-p を付けるとデバイス名の前に /dev/ が付き、フルパスで表示されます。このパスは mount などの別のコマンドにそのまま渡せます。

lsblk -p -e 7
NAME             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 までフルパスに変わり、残りの列は基本出力と同じです。

デバイスのパスを引数に渡すとそのデバイスとその下のパーティションだけを出力し、パーティションのパスを渡すとそのパーティションの 1 行だけが出ます。

lsblk /dev/nvme0n1p4
NAME      MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
nvme0n1p4 259:4    0 78.8G  0 part /

出力には nvme0n1p4 の 1 行だけが出て、ディスクの行や枝の記号は付きません。存在しないデバイスのパスを渡してみると [not a block device] エラーが出て、終了コードは 32 でした。

5️⃣ lsblk コマンドのスクリプト向け出力とオプション

基本出力をスクリプトで切り出して使いたくなりますが、基本出力と -f の列構成は今後変わる可能性があるため、スクリプトでは -o で列を直接指定します。

-n はヘッダー行を除いて値だけを出力するため、1 つのパーティションのファイルシステムの種類のように、値が 1 つだけ必要なときに向いています。

lsblk -no FSTYPE /dev/nvme0n1p4
xfs

ヘッダー行なしで、ルートパーティションのファイルシステムの種類である xfs の 1 語だけが出るため、そのままシェル変数に入れられます。

-P は列ごとに [名前=”値”] の形で 1 行に出力します。AlmaLinux 9 の util-linux 2.37 では、-P だけを付けてもシェル変数として読みやすいように、MAJ:MIN は MAJ_MIN、FSUSE% は FSUSE_PCT のように名前が変わります。

lsblk -P -o NAME,FSTYPE,MOUNTPOINT /dev/nvme0n1p4
NAME="nvme0n1p4" FSTYPE="xfs" MOUNTPOINT="/"

指定した 3 つの列が NAME、FSTYPE、MOUNTPOINT の順に 1 行で出ます。値はすべてダブルクォートの中に入っています。

-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 配列にはディスク 1 つだけが入り、children 配列は出ません。

🔲 lsblk コマンドのオプション

オプションコピー説明
-e, --exclude指定したメジャー番号のデバイスを除外します。7 を指定すると loop デバイスが除かれます。
-f, --fsファイルシステムの種類と UUID、空き容量、使用率を出力します。
-o, --outputカンマで指定した列だけを順番に出力します。
-b, --bytesSIZE 列をバイト単位の整数で出力します。
-d, --nodepsパーティションの行を除き、ディスクの行だけを出力します。
-p, --pathsデバイス名を /dev/ で始まるフルパスで出力します。
-n, --noheadingsヘッダー行を除き、値だけを出力します。
-P, --pairs列名と値を 1 組ずつまとめて 1 行に出力します。
-J, --jsonJSON 形式で出力します。
-a, --allサイズが 0 の空のデバイスまで出力します。
オプションコピー説明
-I, --include指定したメジャー番号のデバイスだけを出力します。
-l, --listツリーの代わりにリスト形式で出力します。
-r, --raw列の間隔をそろえない raw 形式で出力します。
-i, --asciiツリーの線を ASCII 文字で出力します。
-s, --inverse依存関係を逆にして、パーティションの下にディスクを出力します。
-S, --scsiSCSI デバイスの情報だけを出力します。
-t, --topologyセクターサイズや I/O スケジューラーなどのトポロジー情報を出力します。
-m, --permsデバイスの所有者とグループ、権限を出力します。
-x, --sort指定した列を基準に並べ替えて、リスト形式で出力します。
-O, --output-all使えるすべての列を出力します。

🔲 lsblk コマンドシミュレーター

下のシミュレーターで、ここまでのコマンドを実際に入力し、オプションごとに出力がどう変わるかを確認できます。

lsblk コマンドシミュレーターutil-linux 2.37.4
[root@server work]#
キーボードの↑↓で、前に入力したコマンドを呼び出せます。

🔢 FAQ & おすすめコンテンツ

一般アカウントで -f を実行しても、UUID と FSAVAIL は root アカウントと同じように出力されました。lsblk は sysfs と udev の情報を読みます。udev の情報が使えないときはデバイスを直接読む必要があるため、root 権限が必要です。

デバイスを追加したり交換したりした直後は、udev が情報を集めきれていないことがあるため、udevadm settle を実行してから lsblk をもう一度実行します。

-a はサイズが 0 の空のデバイスまで出力するため、基本出力から漏れたデバイスがないか確認するときに使います。同じサーバーで -a を付けると、何も接続されていない 0B の loop デバイスがもう 1 行出力されました。

ℹ️ 提携について
当サイトのコンテンツにはアフィリエイトリンクが含まれています。訪問者がこのリンクを通じて商品やサービスを購入すると、当サイトは販売元から手数料を受け取ります。この過程において、購入者が支払う金額(イベント割引適用で金額が下がります↓)は上昇しません。掲載されている価格・割引・在庫情報は作成時点のものであり、実際とは異なる場合がありますので、ご購入前に販売元にて最終確認をお願いいたします。商品の選定および評価は独自の基準に基づいて行われており、手数料の支払いの有無は紹介順や評価内容に影響を与えません。

コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です

人間であることを証明してください: 7   +   7   =