diary/Kojima/2014-04-07
の編集
http://plamo.linet.gr.jp/?diary/Kojima/2014-04-07
[
トップ
] [
編集
|
差分
|
バックアップ
|
添付
|
リロード
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
-- 雛形とするページ --
diary/Template
[[diary/Kojima]] ・UUIDとPARTUUID 最近、マシンを組み替えることがあってHDDを付けたり外したりしたら、/dev/sdXX の番号が変って起動できなくなったりしたもので、 root partitionをUUIDで指定することにした。 始めは、grub.cfgでGRUBが自動的に見つけるUUIDを指定してやればいいのかと思って、 if [ x$feature_platform_search_hint = xy ]; then search --no-floppy --fs-uuid --set=root --hint-bios=hd3,msdos2 --hint-efi=hd3,msdos2 --hint-baremetal=ahci3,msdos2 e0cfa2e1-a797-4bf9-0d6-03db39ca9b else search --no-floppy --fs-uuid --set=root e0cfa2e1-a797-4bf9-b0d6-bb03db39ca9b fi echo 'Loading Linux 3.12.5-plamo64 ...' linux /boot/vmlinuz-3.12.5-plamo64 root=UUID=e0cfa2e1-a797-4bf9-b0d6-bb03db39ca9b ro vga16 unicon=eucjp vt.default_utf8=0 panic_output=7 みたいに指定してみたのだけど、再起動すると「rootfsが見つからない」というエラーになって起動しなくなってしまった。 UUIDが違うのかと blkid で確認したけど問題ない。 $ /sbin/blkid /dev/sdc2 /dev/sdc2: LABEL="rootfs" UUID="e0cfa2e1-a797-4bf9-b0d6-bb03db39ca9b" TYPE="ext4" おかしいなぁ、、と思って調べてみたら、http://unix.stackexchange.com/questions/93767/why-cant-i-specify-my-root-fs-with-a-uuid に「カーネルのソースを見る限りUUIDじゃなくてPARTUUIDっぽい」という話を発見。 そうなのか、とカーネルパラメータの root=UUID= を root=PARTUUID= ... としてみたけれど、rootfs が見つからない問題は変らず。 UUIDを操作するためにモジュールでも必要なのか、としばらく調べてみたけど、どうも処理自体は init/do_mounts.c だけで完結しているっぽい。 仕方ないんでしばらく放置してたのだけど、改めて上記URLのページを読み返してみると、最後の方のレスに、 「PARTUUIDで指定するのはファイルシステムのUUIDではなく、パーティションのUUIDだよ」という指摘が。 確かに init/do_mounts.c を見ると、 /* * Convert a name into device number. We accept the following variants: * ... * 6) PARTUUID=00112233-4455-6677-8899-AABBCCDDEEFF representing the * unique id of a partition if the partition table provides it. * The UUID may be either an EFI/GPT UUID, or refer to an MSDOS * partition using the format SSSSSSSS-PP, where SSSSSSSS is a zero- * filled hex representation of the 32-bit "NT disk signature", and PP * is a zero-filled hex representation of the 1-based partition number. * 7) PARTUUID=<UUID>/PARTNROFF=<int> to select a partition in relation to * a partition with a known unique id. * などと言う記載がある。じゃぁ、このパーティションIDというのはどうやったら得られるのだろう、、と調べたら、 何のことはない、fdisk -l とかが返す 「ディスク識別子」だった。 $ sudo fdisk -l /dev/sdc Disk /dev/sdc: 500.1 GB, 500107862016 bytes, 976773168 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト Disk label type: dos ディスク識別子: 0x38633862 なるほど、と思って、これを使って、grub.cfg のカーネルパラメータの部分を linux /boot/vmlinuz-3.12.5-plamo64 root=PARTUUID=38633862-02 ro vga16 unicon=eucjp vt.default_utf8=0 panic_output=7 のように書き替えてやれば、無事 rootfs が見つかって起動できるようになった。 # 末尾の -02 は2つめのパーティションの意味 きちんと調べたわけではないけれど、どうやら、本来 root=UUID=xxxx で指定するのは間違いなものの、 initrd を使っている場合、initrd が自動的に(0,0) でアクセスできるので、問題が露見しないらしい。 どっちが素直かとしばし悩んだけれど、/etc/fstab だとマウントするファイルシステムをUUIDでも指定できるので、 PARTUUIDを使うよりはUUIDで統一しておく方が一貫性はある気がするな。 - もう少し正確に言うと、「root=UUID=xxxx という指定は意味はないけど、initrdを使っている限り問題にはならないので、/etc/fstab との整合性を取る意味では分かりやすいだろう」というところ。 -- [[kojima]] &new{2014-04-07 (月) 19:27:39}; - カレントディレクトリは、/usr/src/linuxに居ます。./tools/testing/ktest/ktest.plかな?と思って調べています。カーネル再構築の時、make installすると、grub.confが自動生成されます。この時、UUIDも入っているので、PARTUUIDを使う場合は、grub.confを書き直す必要があるのかも?と思っています。 -- [[jiku]] &new{2014-04-19 (土) 10:33:17}; - なんだか稲川淳二口調の文に見えました。 -- [[菖蒲に八橋]] &new{2014-05-13 (火) 23:29:37};
タイムスタンプを変更しない
[[diary/Kojima]] ・UUIDとPARTUUID 最近、マシンを組み替えることがあってHDDを付けたり外したりしたら、/dev/sdXX の番号が変って起動できなくなったりしたもので、 root partitionをUUIDで指定することにした。 始めは、grub.cfgでGRUBが自動的に見つけるUUIDを指定してやればいいのかと思って、 if [ x$feature_platform_search_hint = xy ]; then search --no-floppy --fs-uuid --set=root --hint-bios=hd3,msdos2 --hint-efi=hd3,msdos2 --hint-baremetal=ahci3,msdos2 e0cfa2e1-a797-4bf9-0d6-03db39ca9b else search --no-floppy --fs-uuid --set=root e0cfa2e1-a797-4bf9-b0d6-bb03db39ca9b fi echo 'Loading Linux 3.12.5-plamo64 ...' linux /boot/vmlinuz-3.12.5-plamo64 root=UUID=e0cfa2e1-a797-4bf9-b0d6-bb03db39ca9b ro vga16 unicon=eucjp vt.default_utf8=0 panic_output=7 みたいに指定してみたのだけど、再起動すると「rootfsが見つからない」というエラーになって起動しなくなってしまった。 UUIDが違うのかと blkid で確認したけど問題ない。 $ /sbin/blkid /dev/sdc2 /dev/sdc2: LABEL="rootfs" UUID="e0cfa2e1-a797-4bf9-b0d6-bb03db39ca9b" TYPE="ext4" おかしいなぁ、、と思って調べてみたら、http://unix.stackexchange.com/questions/93767/why-cant-i-specify-my-root-fs-with-a-uuid に「カーネルのソースを見る限りUUIDじゃなくてPARTUUIDっぽい」という話を発見。 そうなのか、とカーネルパラメータの root=UUID= を root=PARTUUID= ... としてみたけれど、rootfs が見つからない問題は変らず。 UUIDを操作するためにモジュールでも必要なのか、としばらく調べてみたけど、どうも処理自体は init/do_mounts.c だけで完結しているっぽい。 仕方ないんでしばらく放置してたのだけど、改めて上記URLのページを読み返してみると、最後の方のレスに、 「PARTUUIDで指定するのはファイルシステムのUUIDではなく、パーティションのUUIDだよ」という指摘が。 確かに init/do_mounts.c を見ると、 /* * Convert a name into device number. We accept the following variants: * ... * 6) PARTUUID=00112233-4455-6677-8899-AABBCCDDEEFF representing the * unique id of a partition if the partition table provides it. * The UUID may be either an EFI/GPT UUID, or refer to an MSDOS * partition using the format SSSSSSSS-PP, where SSSSSSSS is a zero- * filled hex representation of the 32-bit "NT disk signature", and PP * is a zero-filled hex representation of the 1-based partition number. * 7) PARTUUID=<UUID>/PARTNROFF=<int> to select a partition in relation to * a partition with a known unique id. * などと言う記載がある。じゃぁ、このパーティションIDというのはどうやったら得られるのだろう、、と調べたら、 何のことはない、fdisk -l とかが返す 「ディスク識別子」だった。 $ sudo fdisk -l /dev/sdc Disk /dev/sdc: 500.1 GB, 500107862016 bytes, 976773168 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト Disk label type: dos ディスク識別子: 0x38633862 なるほど、と思って、これを使って、grub.cfg のカーネルパラメータの部分を linux /boot/vmlinuz-3.12.5-plamo64 root=PARTUUID=38633862-02 ro vga16 unicon=eucjp vt.default_utf8=0 panic_output=7 のように書き替えてやれば、無事 rootfs が見つかって起動できるようになった。 # 末尾の -02 は2つめのパーティションの意味 きちんと調べたわけではないけれど、どうやら、本来 root=UUID=xxxx で指定するのは間違いなものの、 initrd を使っている場合、initrd が自動的に(0,0) でアクセスできるので、問題が露見しないらしい。 どっちが素直かとしばし悩んだけれど、/etc/fstab だとマウントするファイルシステムをUUIDでも指定できるので、 PARTUUIDを使うよりはUUIDで統一しておく方が一貫性はある気がするな。 - もう少し正確に言うと、「root=UUID=xxxx という指定は意味はないけど、initrdを使っている限り問題にはならないので、/etc/fstab との整合性を取る意味では分かりやすいだろう」というところ。 -- [[kojima]] &new{2014-04-07 (月) 19:27:39}; - カレントディレクトリは、/usr/src/linuxに居ます。./tools/testing/ktest/ktest.plかな?と思って調べています。カーネル再構築の時、make installすると、grub.confが自動生成されます。この時、UUIDも入っているので、PARTUUIDを使う場合は、grub.confを書き直す必要があるのかも?と思っています。 -- [[jiku]] &new{2014-04-19 (土) 10:33:17}; - なんだか稲川淳二口調の文に見えました。 -- [[菖蒲に八橋]] &new{2014-05-13 (火) 23:29:37};
テキスト整形のルールを表示する