原因の多くは、デバイス名(/dev/sdb1 など)の書き間違いではなく、デバイス名そのものを使ったことにあります。
Linux では、ディスクを追加したり接続順序が変わると /dev/sda と /dev/sdb が入れ替わることがあります。
そこで登場するのが UUID(Universally Unique Identifier)です。UUID はデバイスが変わっても変わらない固有 ID で、
blkid コマンドを使うと簡単に確認できます。
この記事では、blkid コマンドの基本的な使い方から、UUID・PARTUUID・ラベルの違い、/etc/fstab への安全な応用手順まで解説します。
RHEL 9 / Rocky Linux 9 / Ubuntu 24.04 LTS 環境で動作確認済みです。
この記事のポイント
・blkid コマンドでデバイスの UUID とファイルシステムタイプを確認できる
・UUID を /etc/fstab に書けばデバイス名変更による起動障害を防げる
・-U/-L オプションで UUID・ラベルからデバイスパスを逆引きできる
・lsblk -f と組み合わせると構成全体を一覧で把握できる
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
blkid コマンドとは何か
blkid は「block device id」の略で、ブロックデバイス(HDD・SSD・USB メモリ等)に付与されたメタ情報を表示するコマンドです。主に確認できる情報は以下のとおりです。
・UUID:フォーマット時に自動生成される固有識別子。/etc/fstab で推奨される指定方法
・PARTUUID:パーティションテーブル(GPT)が割り当てるパーティション固有 ID
・LABEL:mkfs 時や tune2fs で手動設定できる任意の名前
・TYPE:ファイルシステムの種類(ext4・xfs・swap など)
なお、blkid を実行するには root 権限(または sudo)が必要です。
基本的な使い方
1. 全デバイスの UUID を一覧表示する
引数なしで実行すると、認識されているすべてのブロックデバイスが表示されます。# sudo blkid /dev/sda1: UUID="a1b2c3d4-e5f6-7890-abcd-ef1234567890" TYPE="ext4" PARTUUID="11223344-01" /dev/sda2: UUID="00000000-1111-2222-3333-444444444444" TYPE="swap" PARTUUID="11223344-02" /dev/sdb1: UUID="f1e2d3c4-b5a6-7980-fedc-ba9876543210" LABEL="data_disk" TYPE="xfs" PARTUUID="55667788-01"
・/dev/sda1:デバイスのパス
・UUID=:ファイルシステムレベルの一意 ID
・TYPE=:ファイルシステム種別
・PARTUUID=:GPT パーティションテーブルの ID(MBR ディスクでは表示されないことがある)
2. 特定デバイスの情報だけ表示する
デバイスパスを引数に指定すると、そのデバイスだけを確認できます。# sudo blkid /dev/sda1 /dev/sda1: UUID="a1b2c3d4-e5f6-7890-abcd-ef1234567890" TYPE="ext4" PARTUUID="11223344-01"
3. -o udev 形式で詳細情報を確認する
-o udev オプションを使うと、udev 形式で詳細情報を確認できます。スクリプトでの値の取り出しに便利です。# sudo blkid -o udev /dev/sdb1 ID_FS_UUID=f1e2d3c4-b5a6-7980-fedc-ba9876543210 ID_FS_UUID_ENC=f1e2d3c4-b5a6-7980-fedc-ba9876543210 ID_FS_LABEL=data_disk ID_FS_LABEL_ENC=data_disk ID_FS_TYPE=xfs ID_FS_USAGE=filesystem
4. -U オプションで UUID からデバイスパスを逆引きする
UUID がわかっていて、それがどのデバイスかを確認したい場合に使います。# sudo blkid -U "f1e2d3c4-b5a6-7980-fedc-ba9876543210" /dev/sdb1
-L ラベル名 でラベルからデバイスパスを逆引きできます。# sudo blkid -L "data_disk" /dev/sdb1
lsblk -f との組み合わせで構成を把握する
blkid は単体でも便利ですが、lsblk -f と組み合わせると構成全体をツリー形式で確認できます。# lsblk -f NAME FSTYPE LABEL UUID FSAVAIL FSUSE% MOUNTPOINT sda ├─sda1 ext4 a1b2c3d4-e5f6-7890-abcd-ef1234567890 15.2G 18% / └─sda2 swap 00000000-1111-2222-3333-444444444444 [SWAP] sdb └─sdb1 xfs data_disk f1e2d3c4-b5a6-7980-fedc-ba9876543210 180.5G 5% /data
blkid と使い分けるというよりも「まず lsblk -f で全体把握、気になるデバイスは blkid で詳細確認」という流れが現場では定番です。
/etc/fstab への応用|UUID を使った安全なマウント設定
1. なぜ /dev/sdXX をそのまま書いてはいけないか
/dev/sda や /dev/sdb といったデバイス名は、OS 起動時にカーネルが認識した順序で割り当てられます。つまり、SATA ポートへの接続順序や USB デバイスの抜き差し、仮想環境での設定変更などで変わることがあります。
特にクラウドやベアメタルサーバーで増設ディスクを追加する場合、デバイス名ではなく必ず UUID を使うことが鉄則です。
mount コマンドの使い方でも解説していますが、fstab の誤記は起動障害の主原因です。
2. UUID を確認して fstab に追記する手順
新しく追加したディスク /dev/sdb1 を /data にマウントする例で解説します。# ステップ1: UUID を確認する sudo blkid /dev/sdb1 /dev/sdb1: UUID="f1e2d3c4-b5a6-7980-fedc-ba9876543210" TYPE="xfs" # ステップ2: マウントポイントを作成する sudo mkdir -p /data # ステップ3: fstab に追記する(viで編集) sudo vi /etc/fstab
UUID=f1e2d3c4-b5a6-7980-fedc-ba9876543210 /data xfs defaults 0 0
3. fstab 変更後は必ず動作確認してから再起動する
fstab を変更したあと、いきなり再起動するのは危険です。以下の手順で事前確認を行ってください。# fstab の構文チェック(エラーがなければ何も表示されない) sudo mount -a # マウントされたか確認する df -h /data Filesystem Size Used Avail Use% Mounted on /dev/sdb1 200G 10G 190G 5% /data
mount -a を実行してエラーが出なければ、fstab の記述は正しいです。再起動後も自動マウントされます。応用・実務Tips
1. LABEL を付けてわかりやすく管理する
UUID は機械的な文字列で人間が見てわかりにくいため、LABEL(ラベル)を付けると管理が楽になります。ラベルは mkfs 時に指定するか、後から tune2fs / xfs_admin で変更できます。
# ext4 フォーマット時にラベルを付ける sudo mkfs.ext4 -L "backup_disk" /dev/sdc1 # xfs フォーマット時にラベルを付ける sudo mkfs.xfs -L "log_disk" /dev/sdd1 # 既存の ext4 にラベルを後から付ける(アンマウント状態で実行) sudo tune2fs -L "backup_disk" /dev/sdc1 # 既存の xfs にラベルを後から付ける(アンマウント状態で実行) sudo xfs_admin -L "log_disk" /dev/sdd1
LABEL=backup_disk /backup ext4 defaults 0 0
複数ディスクを管理する環境では UUID の方が安全です。
2. ハードウェア情報と組み合わせて確認する
追加したディスクが物理的にどのデバイスかわからない場合は、dmidecode でハードウェア情報を取得した上で blkid を実行すると、ディスクとスロットの対応を把握しやすくなります。3. スクリプトで UUID を取得する方法
バックアップスクリプトや構成管理スクリプトで UUID を変数に取得したい場合、以下のワンライナーが使えます。# blkid の出力から UUID の値だけを取り出す UUID=$(sudo blkid -s UUID -o value /dev/sdb1) echo $UUID f1e2d3c4-b5a6-7980-fedc-ba9876543210
-s UUID は UUID フィールドだけを絞り込み、-o value は値だけを出力します。ダブルクォートを外した状態で変数に代入でき、スクリプトから安全に扱えます。
トラブルシュート・エラー対処
「blkid: /dev/sdb: No such file or directory」が出た場合
指定したデバイスが存在しません。lsblk または ls /dev/sd* でデバイス名を再確認してください。仮想環境では /dev/vda のように命名される場合があります。
blkid を実行しても出力が出ない・少ない場合
blkid はキャッシュを参照します。最新の状態を強制的に再スキャンするには-p オプション(probe モード)を使います。# キャッシュを無視して直接デバイスを再スキャンする sudo blkid -p /dev/sdb1
mount -a でエラーが出た場合
fstab に追記した内容が誤っている可能性があります。以下の点を確認してください。・UUID の値に誤字がないか(コピー&ペーストを推奨)
・TYPE と fstab のファイルシステム指定が一致しているか(xfs を ext4 と書くなど)
・マウントポイントのディレクトリが存在するか(mkdir -p で事前作成)
Linux CD/DVD マウント手順も参考にしてください。
本記事のまとめ
| やりたいこと | コマンド |
|---|---|
| 全デバイスの UUID を確認する | sudo blkid |
| 特定デバイスの UUID を確認する | sudo blkid /dev/sda1 |
| UUID からデバイスパスを逆引きする | sudo blkid -U "UUID文字列" |
| ラベルからデバイスパスを逆引きする | sudo blkid -L "ラベル名" |
| UUID の値だけをスクリプトで取得する | sudo blkid -s UUID -o value /dev/sdb1 |
| キャッシュを無視して再スキャンする | sudo blkid -p /dev/sdb1 |
| 構成全体をツリーで確認する(lsblk 併用) | lsblk -f |
UUID や fstab の正しい設定方法が身についていますか?
blkid ひとつとっても、UUID と PARTUUID の使い分けや fstab に書く際の注意点を知らなければ、再起動後に OS が起動しなくなるリスクがあります。
ネットの切れ端の情報をコピペするだけでなく、現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。
「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
登録10秒/合わなければ解除3秒 / 詳細はこちら
- 次のページへ:nmcliコマンドでネットワーク接続を設定する方法|静的IP・DHCP・接続追加・削除の手順も
- 前のページへ:inotifywaitコマンドでファイル変更をリアルタイム監視する方法|スクリプト自動化と実務活用も
- この記事の属するカテゴリ:Linuxtips・ディスク・デバイス管理コマンドへ戻る

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。
登録無料・いつでも解除できます