bootmanagerで指定した追加SFSが読み込まれない

リリースされた日本語版に関するバグ、トラブル

モデレータ: 暇人, YoN, nyu

返信する
アバター
シノバー
記事: 3283
登録日時: 09/03/21(土) 00:05
連絡する:

bootmanagerで指定した追加SFSが読み込まれない

投稿記事 by シノバー »

4.3.1JPで遭遇したのですが、同じ現象は他のバージョンでもあるかもしれません。
bootmanagerで指定したはずの追加SFSが、一度では読み込まれず、指定の操作を2度行わないといけないということがありました。
viewtopic.php?f=28&t=1476#p10592

再現性がよく分からず、特定ハードの問題かと思ってました。
しかし複数のPC、複数の保存メディアで経験したので、ソフト的な問題であろうと思われます。
この現象が起きる理由が少し分かりかけたので報告します。

他のモードでも起こるのかもしれないけれど、フラッシュメモリからの起動で経験したので、この場合で説明します。PUPMODE=13
この場合個人保存ファイルは /initrd/pup_ro1に、テンポラリファイルシステムは/initrd/pup_rwにマウントされています。
  • bootmanagerで新たな追加SFSを指定すると/etc/rc.d/BOOTCONFIGにその情報が書き込まれます。
  • 更新されたものは /initrd/pup_rw/etc/rc.d/BOOTCONFIGにあります。いっぽう /initrd/pup_ro1/etc/rc.d/BOOTCONFIGは古い情報を保持しています。
  • ここでデスクトップ上の「save」アイコンをクリックすると/initrd/pup_rw以下と/initrd/pup_ro1以下との内容の同期が取られます。実行プログラムは /usr/sbin/snapmergepuppyです。
  • シャットダウンあるいは再起動のときもsnapmergepuppyが呼ばれるので「save」アイコンをクリックと同様にpup_rwの内容はpup_ro1に移され、pup_rwはRAM上なのでシャットダウンにより消滅します。
問題は、/initrd/pup_rw/etc/rc.d/BOOTCONFIGが/initrd/pup_ro1/etc/rc.d/BOOTCONFIGにコピーされない、言葉を変えると更新された/etc/rc.d/BOOTCONFIGが保存されない場合があるということです。
次のようにすると再現すると思われます。
  1. フラッシュメモリから起動(PUPSATE=13)
  2. 一度デスクトップ上の「save」アイコンをクリック
  3. その後bootmanagerでなにか追加SFSを指定
  4. /etc/rc.d/BOOTCONFIGが更新されていることを確認
  5. 再起動→追加指定したSFSが読み込まれない
  6. /etc/rc.d/BOOTCONFIGを見ると追加分が消えている
上の手順中2の「save」アイコンクリックがポイントで、これをしなければ、たぶん/etc/rc.d/BOOTCONFIGは保存され、次の再起動時には指定した追加SFSが正しく読み込まれるはずです。

これが起こる理由のひとつは /usr/sbin/snapmergepuppyの159行目で cp コマンドのオプションに -u が付いていることです。
cp の -u オプションは、上書きコピーするべきかどうかを、タイムスタンプを見て判断します。
理由の2つめは、/etc/rc.d/BOOTCONFIGのタイムスタンプがおかしなものになっているということです。
このファイルは起動のとき initrd.gz内のinitスクリプトが更新します。いっぽうタイムゾーンの設定は chroot後の rc.initから呼ばれる/etc/rc.d/rc.countryの仕事です。
/etc/rc.d/rc.countryの161行目で hwclock --hctosys --localtime を実行しています。
/etc/rc.d/BOOTCONFIGが更新されるのはこれ以前なので、タイムスタンプがおかしくなるのだと思われます。

回避法の一つは/home/mntに追加SFSを置いたあとの起動直後にbootmanagerが尋ねてくるので、その機会にすぐさま指定を済ませてしまうということです。
viewtopic.php?f=12&t=1519#p10891

/home/mnt/puppyなどのサブディレクトリに追加SFSを置いたときにはこれは出ないかもしれないが、ともかく起動直後(30分以内)にbootmanagerで追加SFSを指定すれば回避できます。

もっとスマートな解決法はないですかねえ……。
走れパピー(新ブログ)https://shinobar.net/linux/blog
New Downloads https://shinobar.net/puppy/
アバター
シノバー
記事: 3283
登録日時: 09/03/21(土) 00:05
連絡する:

Re: bootmanagerで指定した追加SFSが読み込まれない

投稿記事 by シノバー »

シノバー さんが書きました:このファイルは起動のとき initrd.gz内のinitスクリプトが更新します。いっぽうタイムゾーンの設定は chroot後の rc.sysinitから呼ばれる/etc/rc.d/rc.countryの仕事です。
/etc/rc.d/rc.countryの161行目で hwclock --hctosys --localtime を実行しています。
/etc/rc.d/BOOTCONFIGが更新されるのはこれ以前なので、タイムスタンプがおかしくなるのだと思われます。
なので rc.sysinitから /etc/rc.d/rc.countryを実行後に /etc/rc.d/BOOTCONFIGを touchしてやってタイムスタンプを更新すればよいようです。
走れパピー(新ブログ)https://shinobar.net/linux/blog
New Downloads https://shinobar.net/puppy/
新谷
記事: 934
登録日時: 08/10/09(木) 18:52
お住まい: 大阪

Re: bootmanagerで指定した追加SFSが読み込まれない

投稿記事 by 新谷 »

とても参考になるです。
431日本版が正式リリースされた後、のんびり操作している時にこの症状に遭遇することが何回かありました。「ああ、やっぱり勘違いじゃなかったのかなぁ... :roll: 」と思ったりとかしてました。
なるほどなぁ.....です。
アバター
シノバー
記事: 3283
登録日時: 09/03/21(土) 00:05
連絡する:

Re: bootmanagerで指定した追加SFSが読み込まれない

投稿記事 by シノバー »

シノバー さんが書きました:rc.sysinitから /etc/rc.d/rc.countryを実行後に /etc/rc.d/BOOTCONFIGを touchしてやってタイムスタンプを更新すればよいようです。
/etc/rc.d/rc.country の最後のところで /etc/rc.d/BOOTCONFIGを touch するのが正解手でしょうね。

2010.01.26追記
/etc/rc.d/rc.country の最後、また /usr/sbin/timezone-set の最後にも同じコードが要ります。

コード: 全て選択

touch  /etc/rc.d/BOOTCONFIG
走れパピー(新ブログ)https://shinobar.net/linux/blog
New Downloads https://shinobar.net/puppy/
返信する