sho_oikawa
2020年10月30日 18時01分
お世話になっております。
及川と申します。
eMMCブートにおいて、リードオンリー(ro)⇒リードライト(rw)へと
切り替える方法を探しております。
以前は常時roのシステムにて、書き込み時のみrwにするという切替を
mount, umountコマンドを用いて行っておりました。
現状ではeMMCブートにおいて常時rwとなっているため、試しに以前用いたro⇒rwへと
切り替える方法でrw⇒roへと切り替えるために
[mount --bind /home/atmark/sample /home/atmark/sample]
[mount -o ro,remount /home/atmark/sample]
のようなコマンドを実行してみました。
しかし、mount後のファイルがbusyとなり
リマウントに失敗する(rwのまま)という動作となりました。
起動時にリードオンリーにするためにはブートローダのソース
"mmcroot", "/dev/mmcblk2p2 rootwait rw"
においてrw⇒roと
変更することで実現できると踏んでいますが、
上記のmountコマンド実行時にrw⇒roへと変更できなかったことから、
起動時動作をroとしたとしても
mountコマンドによってリードライトモードへと切替ができないのではないかと
懸念しております。
デフォルトでリードオンリーとし、
必要な時のみリードライトへと切り替える方法についてご存じでしたら
ご教授いただけませんでしょうか。
以上、よろしくお願いいたします。
コメント
sho_oikawa
sho_oikawa
及川です。
お教えいただいた情報で試してみたのですが、
[lsof]コマンドのインストールがうまくいきませんでした。
実行時に下記のようなログが出力されます。
root@armadillo:~# apt install -y lsof
Reading package lists... Done
Building dependency tree
Reading state information... Done
You might want to run 'apt --fix-broken install' to correct these.
The following packages have unmet dependencies:
dpkg : Conflicts: dpkg:none
dpkg:none : Conflicts: dpkg but 1.18.25 is to be installed
E: Unmet dependencies. Try 'apt --fix-broken install' with no packages (or specify a solution).
[apt-get update]コマンドで外部とのやり取りを行っていたため、
外に出ていけていないというわけではなさそうでした。
また、記載にあった[apt --fix-broken install]コマンドなども試しましたが、
特にうまくいきませんでした。
直接のインストールでうまくいかなかったため、
[x1-debian-builder]ディレクトリでの[ax1_resources]>[resources]>[packages]へと[lsof]の追加を行い、
イメージファイル作成⇒SD経由でのアップデート、という手順を行ってみましたが、
それでもコマンドが追加されませんでした。
他に[lsof]パッケージを導入する方法などありませんでしょうか。。。
at_akihito.irie
sho_oikawa
及川です。
ログを添付いたします。
要望いただいた他にエラー出力をテキスト化したものも
追加で添付させていただきました。
お手数をおかけしますが、
ご確認いただければ幸いです。
よろしくお願いいたします。
ファイル | ファイルの説明 |
---|---|
apt.txt | |
apt_error.txt | |
dpkg.txt | |
dpkg_error.txt |
at_akihito.irie
sho_oikawa
及川です。
/var/lib/dpkg/status
を添付いたします。拡張子ではじかれるため、.txtとしています。
以上、よろしくお願いいたします。
ファイル | ファイルの説明 |
---|---|
status.txt |
at_akihito.irie
入江です。
/var/lib/dpkg/statusの末尾の以下の箇所を削除していただけますでしょうか。
Package: dpkg Version: 1.18.25 Maintainer: unknown Status: install ok installed
ちなみにviで編集する場合、コマンドモード時に shift+g でファイルの末尾
にカーソルを移動させることができます。
削除後、以下のコマンドを実行していただき、lsofがインストールできるかお
試しください。
[armadillo]# apt update [armadillo]# apt upgrade [armadillo]# apt install -y lsof
以上、よろしくお願いいたします。
sho_oikawa
及川です。
ご教授いただいた手順でアップデート⇒lsofのインストール⇒マウントを阻害しているサービスの特定
の手順を踏んでからマウントを実行したつもりですが、やはりbusyと表示されてしまい、
書込みモード⇒リードオンリーモードへの切り替えがうまくいきませんでした。。。
一連の流れをteralermのログにて取得しました。
実際にコマンドを打って確認をし始めたのはログの1013行目あたりから最後までとなります。
それまではアップデートなどを行った手順となります。
タブキーや矢印キーで過去のコマンドを表示しているところもあり、
ログ内のコマンドには一部整合性がとれておりませんが、
お教えいただいた手順にて実行しております。
rootのマウントを阻害しているものとして、[rsyslog][lighttpd][dhclient]が表示されました。
サービスに対して終了を行ったのは前者2つで、
[dhclient]はサービスでの止め方がよくわかりませんでしたので、
プロセスkillにて動作を停止した次第です。
その後に再度サービスの確認を行い、無くなっていることを確認した上で
マウントを試みましたが、同様にbusy扱いとなりました。
以上、よろしくお願いいたします。
ファイル | ファイルの説明 |
---|---|
teraterm.log |
at_akihito.irie
sho_oikawa
及川です。
教えていただいたコマンドで試したところ、
cronのプロセスIDファイルが表示されました。
[/var/run/crond.pid]
そのため、cronを停止(service cron stop)してマウントを行ったところ、
読み取り専用のモードにてマウントすることができました。
まだ細かい点は試していないですが、
リードオンリーで起動した後、必要なディレクトリをマウントして書き込み可能とする、
という流れはこれでできそうです。
ありがとうございます。
もう一つ質問なのですが、
[/var/run/crond.pid]ファイルなどはcronを動作させると作成されるファイルと思われますが、
リードオンリーの状態ではcronやlighttpdの起動は不可となってしまうのでしょうか。
それとも履歴やPIDファイル出力ができない、というエラーのみにとどまり、
動作自体は可能なのでしょうか。
at_akihito.irie
sho_oikawa
at_akihito.irie
2020年11月2日 11時49分
入江です。
デフォルトでリードオンリーとする方法に付きましては、U-bootで
とすることで実現できます。
rw→roに切り替えられないのは対象のディレクトリ(内のファイル)を書き込み
モードで開いているプロセスが存在しているためだと思われます。
当方のArmadillo-X1の/dev/mmcblk2p2を例としますと、
のように、rw→roに切り替えることができません。
これは、マウント先である/(ルートディレクトリ)を書き込みモードで開いて
いるプロセスが存在しているためです。
そのプロセスを見つけるために以下のコマンドを実行します。
実行結果からrsyslogがルートディレクトリを書き込みモードで開いているこ
とが分かりました。
そこで以下のコマンドを実行し、rsyslogを停止させます。
環境によってはrsyslog以外にもルートディレクトリを書き込みモードで開い
ているプロセスがある場合がありますので、それらも全て停止させてください。
その後、roに切り替えます。