web-dev-qa-db-ja.com

ルートパスワードなしでクラッシュした後、起動時にfsckを実行するにはどうすればよいですか?

ユーザーのRedHat 5.xワークステーションがクラッシュし、ファイルシステムにエラーが残った場合、次回の起動時に、rootパスワードを要求してシングルモードに入り、fsckを手動で実行します。

ユーザーは自分のワークステーションを使用できず、fsckを実行するためだけに誰かを送る必要があるため、これは面倒です。

ユーザーはワークステーションに貴重なデータを保存しないので、パスワードなしでエラー時に自動的に実行されるようにこのfsckを構成する方法はありますか?

2
Benoît

これを行うための「公式」の方法におそらく最も近いのは、通常は推奨されない(正当な理由で!)ことです。

echo ' -y ' > /fsckoptions
chattr +i /fsckoptions

/etc/rc.d/rc.sysinitのすべてのバージョンは、fsckを実行する前に、/fsckoptionsの内容を$fsckoptions変数に追加することを確認しました。 chattr +iは、自動的に変更されないことを確認します。

1
Jack Simth

これらの飛行前チェックはすべて、オペレーティングシステムによって作成された初期ramdiskイメージ(grub.confのinitrdオプション)によって制御されます。このイメージは、ファイルシステムのエラーをすばやくテストし、エラーが検出されるとシングルユーザーモードになります。この動作を実行するように変更するためのあなたの旅fsck -yパスワードなしでは、カーネルRPMに含まれているinitrdイメージを解凍することから始めます。残念ながら、システムを更新するたびにこれを行う必要があります(redhatはカーネルごとに新しいinitrdを出荷します(または、より具体的には、ハードウェアに基づいてmkinitcpioを使用して新しいinitrdを生成します))。

私たちの環境でも同じ問題があります。このアイデアに感謝します。これを調べたり解決したりする時間があれば、必ずこの投稿を更新します。

1
Kyle Smith

...私はそれを見つけたと思います。 /etc/rc.d/rc.sysinitには、次のような行がいくつかあります。

 if! [["$ fsckoptions" =〜 "-y"]];次に
 fsckoptions = "-a $ fsckoptions" 
 fi 
  • これを正しく読んでいる場合、以前の$ fsckoptions(存在しない可能性のあるファイル)に-yが存在しない場合は、fsckオプションに-aを追加します。私はそれを少し更新しました:
 if! [["$ fsckoptions" =〜 "-y"]]; then 
 if! [["$ fsckoptions" =〜 "-a"]]; then 
 if! [["$ fsckoptions" =〜 "-p"]];次に
 fsckoptions = "-y $ fsckoptions" 
 fi 
 fi 
 fi 
  • これはe2fsckコマンドラインに基づいています。-y、-a、または-pが含まれていない場合は、-yが追加されます。

もちろん、コツはばかげたことをテストすることです。通常の自動fsckがrootパスワードを要求する原因となるファイルシステムエラーを強制する方法がわからないため、実際に機能したかどうかを知ることができます。

1
Robert

ユーザーはワークステーションに貴重なデータを保存しないので、パスワードなしでエラー時に自動的に実行されるようにこのfsckを構成する方法はありますか?

これはすべて、シェルスクリプトである/etc/rc.d/rc.sysinitによって制御されます。ニーズに合わせてこれを変更できます(ただし、パッケージが更新された場合に変更が失われないように注意する必要があります)。スクリプトがsuloginを呼び出す場所を探します。

このスクリプトを確認すると、次の行を削除した場合のように見えます。

touch /.autofsck &> /dev/null

システムは、次の起動時にfsckを実行しなくなりました。 ext3(またはext4)を使用している場合、通常はfsckを実行する必要はありません。

0
larsks

そのためのパスワードをバイパスする方法がわかりません。ファイルシステムの整合性について心配していない場合は、grub.confのカーネル行にfastbootを追加することで、fsckを完全にバイパスできます。

0
Alex

この問題を回避するもう1つの方法:GRUB/LILOで、コマンドラインの最後にinit=/bin/bashを追加します。これにより、fsckで取得しているsuloginプロンプトをバイパスできます。

0
BMDan