
私は数年前に作成したレシピに従っていますが、ある時点でblkid
ファイルシステムの UUID を取得するために を使用する必要があります。
このコマンドと、予想される戻り値の例をメモしておきます。
blkid -o export -s UUID /dev/mapper/thathost_crypt_md3
UUID=JNbF5T-vhSD-3aVv-intG-1Tk2-IEOZ-ABWXYZ
しかし、時代は移り変わり、私は Debian の「wheezy」ではなく「jessie」を使うようになりました。Debian のこの最新バージョンでは、同じコマンドに対して異なる戻り値が得られることがわかりました。
blkid -o export -s UUID /dev/mapper/thishost_crypt_sdb
DEVNAME=/dev/mapper/thishost_crypt_sdb
UUID=bddac63e-3510-4d24-a6fb-4d0a89abcdef
blkid のマニュアル ページには、-s UUID
そのキーに一致する値のみを含める必要があると記載されているようですが、DEVNAME
そこには不要なものも含まれています。
回避策としては、どちらの場合でも次のように記述できますが、出力構造が変更されるのは奇妙に思えます。
echo "UUID=$(blkid -o value -s UUID /path/to/device)"
UUID=bddac63e-3510-4d24-a6fb-4d0a89abcdef
パッケージのutil-linux
バージョンはそれぞれ 2.20.1-5.3 と 2.25.2-6 です。
質問
- UUID の形状が変わるのはなぜですか? また、それは重要ですか?
- 出力形式が変更されたのはなぜですか?
答え1
DEVNAMEはデバイスのエイリアスです。エイリアスを使用した永続的なデバイス名
さらに、UUID は国際標準により小文字にする必要があるようです。
明確に言うと、UUID は実際にはテキストや数字ではなく、128 ビットの値です。128 ビットの符号なし整数と考えることができます。
2008 年 8 月の最新の国際仕様では次のように述べられています (強調は筆者による):
6.5.4 UUID の 16 進表現を生成するソフトウェアでは、大文字を使用しないでください。注 - すべての人間が読める形式で使用される 16 進表現は、小文字に制限することをお勧めします。ただし、この表現を処理するソフトウェアは、6.5.2 で指定されているように、大文字と小文字の両方を受け入れる必要があります。
UUIDとエイリアス/DEVNAMEの印刷について
util-linux/blkid.cから、DEVNAMEが印刷されているのは、-o export
} else if (ctl->output & OUTPUT_EXPORT_LIST) {
if (num == 1 && devname)
printf("DEVNAME=%s\n", devname);
-o export
そのため、これがないと UUID のみが印刷されるのではないかと疑いましたが、実際は次のようになりました。
$blkid -s UUID /dev/sda2
/dev/sda2: UUID="67169dd7-f319-4402-a9b2-cebcf2f3657a"
$ blkid -o export -s UUID /dev/sda2
DEVNAME=/dev/sda2
UUID=67169dd7-f319-4402-a9b2-cebcf2f3657a