web-dev-qa-db-ja.com

update-initramfsはinit-premountでスクリプトを実行しますか?

だから、USB3.0スティックから正しく起動しない奇妙なラップトップがあります。 Grubおよびinitramfsがロードされますが、奇跡的にスティックはマウントされません。ただ待つと、マシンはbusyboxシェルにドロップします。 blkidはスティックをリストしません。しかし、その前に正しいタイミングでスティックを再接続すると、Ubuntuが正しく起動します。

それで、それを自動化しようと思いました。私は自分でrestart_usbシェルスクリプトを取得し、/etc/initramfs-tools/scripts/init-premount、およびupdate-initramfs -u

ここからが面白い部分です。新しいinitramfsの生成中にスクリプトが実行されるため、usbがリセットされ、それによって実行中のLinuxがパーティションにアクセスできなくなります。そこではハードリセットのみが役立ちます。

だから私の質問は次のとおりです。マウントする前に実行するスクリプトをどのように配置するか/によって実行されずにinitramfsupdate-initramfs

乾杯。

編集:Ubuntu 14.04の新規インストール(更新なし)を実行しています。

1
moeter

同様の問題があったので、initramfsに含まれる他のスクリプトを調べました。どうやら、「トリック」はスクリプトヘッダーにあり、次のようになります。

 #!/bin/sh

 set -e

 case $1 in
 prereqs)
     prereqs
     exit 0
     ;;
 esac

caseステートメントは重要な部分です。

このドキュメント に記載されていますが、正確な順序付けを必要としない場合でも、このヘッダーを含める必要があるとは述べていません。

3
Pavel Pokorný