/
ファイルシステムを含むボリュームのUUIDを取得するにはどうすればよいですか?私が今までに見つけた最高のものはblkid -o list
です。しかし、この出力は人間が読めるものであり、解析が困難です。おそらくもっと良い方法がありますか?
システム固有のテンプレートを使用して構成管理をパラメーター化するために必要です。
将来の私の質問の結果を再利用する可能性のある人のためのblkid
gotchaに関する注意:blkid
は、/etc/blkid.tab
での以前の実行結果をキャッシュします。つまり、blkid
また、root実行後にblkid
を非rootユーザーとして実行すると、古い(誤った可能性のある)データが返されます。
findmnt
を使用します。
$ findmnt /
TARGET SOURCE FSTYPE OPTIONS
/ /dev/md127p1 ext4 rw,relatime,stripe=256,data=ordered
$ findmnt / -o UUID
UUID
046a554b-d9f5-4b23-82e6-ffaeb98284aa
$ findmnt / -o UUID -n
046a554b-d9f5-4b23-82e6-ffaeb98284aa
また、情報の検索方法と表示方法(JSON出力を含む!)を制御するいくつかのオプションもあります。これはmount
パッケージの一部であるため、すべてのUbuntuインストールで使用できます。
別の解決策:
lsblk -nr -o UUID,MOUNTPOINT | grep -Po '.*(?= /$)'
-n
はヘッダーを抑制します(実際には必要ありませんが、解析の方が安全です)-r
は生の出力を作成します(解析をより安全にします)-o UUID,MOUNTPOINT
必要な情報のみを含めるlsblk
コマンドを使用してUUIDを出力できますが、パーティションのデバイス名(/ dev/sda2など)が必要です。これを取得するには、df
コマンドを使用し、出力をトリミングします。コマンド置換を使用して、lsblk
にデバイス名を付けます。 UUIDにアクセスするにはSudoが必要ですが、通常のlsblkの出力では必要ありません。
Sudo lsblk -n -o UUID "$(df -P / | tail -n1 | cut -d' ' -f1)"
mountpoint
の値を、問題のファイルシステムの現在のマウントポイントに調整します。
dev="$(exec awk -v mountpoint='/' '($2 == mountpoint){ print $1; quit; }' /proc/mounts)" &&
Sudo blkid -o export -- "$dev" | sed -ne 's/^UUID=//p'
私が思いついた最高のソリューションは
blkid -o list | awk '/\/[[:space:]]+/{ print $0 }' | tr -s ' ' | cut -d ' ' -f 4
最適ではないように感じますが、動作します。
注: [[:space:]]は、 Space
14.04および16.04で動作することがテスト済み
ルート/
のUUIDを常に生成する必要がある単純な1ライナーは
export DRIVE = $(mount | grep '/' | "'{print $ 1}'のawk -F"); blkid $ DRIVE | cut -d '"' -f2`
ここで行っているのは、マウントの出力をgrepして、ルートシンボルと両側のスペースを一致させる/
で、/
がパス拡張シンボルとして使用され、awk
を介してフィールドとしてデバイス名のみを出力し、環境変数$ DRIVEにTHATを割り当てるための区切り記号。その後、フィールド区切り記号としてblkid $DRIVE
を使用してパイプスルーカット"
の出力を使用し、他のすべてを削除する2番目のフィールドのみを選択し、 UUID。
注上記のコマンドでgrepの後に属するものは実際には 'space/space表示される「/」ではなく「」。
これにはSudo
を必要としないという利点があり、ドライブのマウント方法に関係なく適切な結果を返します。
このアプローチを試みる前に、$ DRIVE環境変数を他のものに使用していないことを確認するのが賢明でしょう。変数を使用していない場合、echo $DRIVE
は空白行を返します。
私が使用するものは次のとおりです。
Sudo tune2fs -l $(df / | tail -1 |awk '{print $1}') |grep UUID|awk '{ print $3 }'
tune2fsはe2fsprogsパッケージに含まれていますが、デフォルトでインストールされているかどうかは思い出せません。
Sudo apt install e2fsprogs
インストールされていない場合。