web-dev-qa-db-ja.com

ブートパーティションのUUIDを取得する信頼性の高いスクリプト方法

/etc/default/grubを編集し、fips=1 boot=UUID=????GRUB_CMDLINE_LINUX=に追加するためのやや自動化されたメソッドをスクリプト化したい

偶然にも/etc/fstabにはUUID=12345blabla /boot xfs defaults 0 0が含まれています。しかし、マウントタイプが/ etc/fstabのUUIDによるものではない場合、Linux [RHEL/Centos7.6システム以降]でブートパーティションのUUIDを推測する信頼できる方法は何ですか?

3
ron

まず、これは/etc/default/grubの自動変更に関する質問の一部には対応していないと言いますが、実際には必要ないはずです。

パーティションを再フォーマットしない限り、UUIDは静的である必要があります。基盤となるデバイスを知っていると仮定すると、/dev/disk/by-uuidを見て、次のようになります。

$ ls -l /dev/disk/by-uuid
... 9577f213-665a-427b-aa45-8927b177224e -> ../../sda1
...

したがって、ブートパーティションであるデバイスに対応するものを見つける必要があります。

blkidコマンドもあります。

$ blkid /dev/sda1
/dev/sda1: UUID="9577f213-665a-427b-aa45-8927b177224e" ...

何らかの理由でUUIDが変更される状況を見ていますか?

2
Andy Dalton

まず、ブートパーティションを見つけましょう

fdisk -l | grep '^/dev/[a-z]*[0-9]' | awk '$2 == "*"' 

次に、上記の Andy Dalton によって親切に提案されているように、その出力を blkid にフィードします。

fdisk -l | grep '^/dev/[a-z]*[0-9]' | awk '$2 == "*"' | blkid $1
0
K7AAY

実行中のシステムに/bootとしてマウントされているデバイスのUUIDを探している場合、クリーンな方法はutil-linuxからfindmntです。

$ findmnt --output=UUID --noheadings --target=/boot 
2b8c6b62-0f68-47d1-a5e7-3e56acce98ac

これらの自明のオプションを使用すると、UUIDのみが出力されます。また、どのデバイスが適切なデバイスであるかを判断する手間も省けます。

マウントされているかどうかに関係なく、知っているデバイスのUUIDを探しているだけの場合は、 Andy Daltonの回答 で説明されているように、blkidを使用できます。

$ Sudo blkid -s UUID -o value /dev/vda1 
2b8c6b62-0f68-47d1-a5e7-3e56acce98ac

-s tagおよび-o formatオプションは、出力をUUIDタグの値のみに制限します。

次に、次のコマンドを使用してUUIDをGRUB_CMDLINE_LINUXに追加できます。

sed -i.bkp 's/^\([[:blank:]]*GRUB_CMDLINE_LINUX=".*\)\(".*\)$/\1 fips=1 boot=UUID='"$newuuid"'\2/' /etc/default/grub

これは、-iオプションの構文がGNU sedであることを前提としています。ファイルをインプレースで編集し、grub.bkpバックアップファイルも作成します。
bootコマンドラインパラメータがすでに存在するかどうかはチェックしていないことに注意してください。 2番目のfips=1の前に"newuuidを追加しているだけなので、現在のコマンドラインが囲まれていると仮定します二重引用符で囲み、二重引用符は含まれません。

0
fra-san