blkid は予想以上の情報を返します。

blkid は予想以上の情報を返します。

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です。

質問

  1. UUIDの外観が変わるのはなぜですか?これは重要ですか?
  2. 出力形式が変わるのはなぜですか?

答え1

DEVNAME はデバイスのエイリアスです。エイリアスを使用した永続デバイス名

また、国際規格ではUUIDを小文字で要求するようです。

~からUUIDによって生成された文字タイプ

明確に言うと、UUIDは実際にはテキストや数字ではなく128ビット値です。これを128ビット符号なし整数と考えることができます。

2008年8月の最新国際規範(強調):

6.5.4 UUIDの16進表現を生成するソフトウェアは大文字を使用しないでください。注 - 人間が読めるすべての形式で使用される16進表現は、小文字に制限することをお勧めします。ただし、この表現を処理するソフトウェアは、6.5.2で指定されているように大文字と小文字を許可する必要があります。

UUIDとalias / DEVNAMEの印刷について

util-linux/blkid.cで以下を使用しているため、DEVNAMEが印刷されることは明らかです。-o export

} else if (ctl->output & OUTPUT_EXPORT_LIST) {
        if (num == 1 && devname)
            printf("DEVNAME=%s\n", devname); 

したがって、実際にはUUIDなしで-o exportUUIDのみを印刷すると思います。

$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

関連情報