Linuxの管理者として、rootfsをマウントできない場合や、外部ストレージボリュームを追加した後や新しいLinuxオペレーティングシステムをインストールした後でもサーバーを再起動しようとした場合があります。カーネルパニックのようなrootfsエラー。この記事では、x86プラットフォームでのLinux起動プロセスの概要、この問題が発生する理由、およびこの問題を回避または解決するための4つのヒントを紹介します。
問題の概要
ルートファイルシステム(サンプルエラーメッセージではrootfs)はLinuxの最も基本的なコンポーネントです。ルートファイルシステムには、完全なLinuxシステムをサポートするために必要なものがすべて含まれています。すべてのアプリケーション、構成、デバイス、データなどが含まれています。ルートファイルシステムがないと、Linuxシステムは機能しません。
システムを再起動した後、(Linuxホストがカーネルパニックを起こした後)mount rootfsエラーが発生する場合があります。この問題は、外部ストレージからストレージボリュームを追加した後によく発生するか、ファイルのコピーが完了してインストールを完了するために再起動が必要になったときに発生することがあります。
この場合、システムは再起動しません。この問題を診断して解決するには時間がかかります。この記事で紹介する4つのヒントは、問題を解決して時間を節約するのに役立ちます。
もう1つの問題は、Linuxカーネルがルートファイルシステムをロードする必要があるが、ターゲットデバイスが見つからないことです。つまり、ルートファイルシステムは本来あるべき場所に表示されません。たとえば、Linuxのルートファイルシステムを/dev /sdaディスクにインストールした場合、システムは再起動時にマウントできません。この問題には2つの原因が考えられます。
1.システムの再起動時にディスク/dev /sdaが表示されない。
考えられる理由は、Linuxホストにルートファイルシステムをマウントするための重要なドライブがないことです。そうではないかもしれません。 Linuxインストーラは起動時にデバイスドライバを簡単にロードできるように、必要なすべてのドライブをinitrdイメージに構築します。ただし、このエラーは手動でディスクをインストールした場合に発生する可能性があります。
2.ディスク/dev /sdaは表示されていますが、ルートファイルシステムではありません。再起動後、ルートファイルシステムは/dev /sdbに変更されました。
これが最も可能性の高い状況です。
では、システムの再起動後に/dev /sdaは/dev /sdbに変更されるのでしょうか。 Linuxでは、/dev /sd *はSCSIデバイスを表します。 Linuxはこれらのデバイスの名前をsdaからsdz(およびsdaaからsdzzなど)に変更します。最初のSCSIデバイスを/dev /sda、2番目のSCSIデバイスを/dev /sdbというようにします。
ルートファイルシステムデバイスアダプタドライブの前(最初は/dev /sda)にマウントされているドライブを使用してアダプタにデバイスをインストールすると、ルートファイルシステムはコマンドチェーンの次の文字に移動します。ルートファイルシステムが最初に検出されたデバイスではありません。したがって、行頭にrootfsが見つからないと、ロードされません。
これは何が起こったかについての簡単な説明ですが、このシナリオにさらにコンテキストを追加するために、Linuxのブートプロセスの概要を説明しましょう。
Linuxの起動の仕組み
以下の手順では、Linuxの起動処理の概要を説明します。
1.コンピュータが起動したとき最初のテストは初期テストPOST(電源投入時自己診断テスト)で、プロセッサ、メモリ、グラフィックカード、キーボードを含む複数のデバイスをテストします。さらに、ブートメディア(ハードディスク、フロッピーディスク、およびCD-ROM)もテストされます。 POSTの後、ROM内のローダがブートセクタをロードし、次にブートセクタがアクティブパーティションからオペレーティングシステムをロードします。サーバーのBIOSを編集して起動メディアの順序を変更できます。
2.ブートセクタは常に同じ場所(ブートデバイスのトラック0、シリンダ0、ヘッド0)にあります。このセクターには、ローダーと呼ばれるプログラム(通常はLinuxの場合はLILOまたはGRUB)が含まれており、このプログラムは実際にはオペレーティングシステムを起動します。ローダーは、MBRにインストールされているか、アクティブ1次区画の最初のセクターにインストールされています。
3.サーバに複数のオペレーティングシステムがインストールされている場合は、ブートローダメニューから起動したいオペレーティングシステムを選択する必要があります。複数のカーネルがインストールされている場合は、このメニューからロードするカーネルを選択することもできます。
4.その後、ブートローダはカーネルを解凍してロードします。カーネルはまずカーネルモジュールをロードし、次にハードウェア(フロッピードライブ、ハードドライブ、ネットワークアダプタなど)を検出し、ハードウェア構成を確認してから、デバイスドライバをスキャンしてロードします。
5.この段階で、カーネルはルートファイルシステムとシステムファイルをロードします。システムファイルの場所は、再コンパイル中に(または他のプログラムによって)設定できます。ロードに失敗すると、カーネルパニックが発生してシステムがフリーズします。これは、前述の種類のロード失敗です。
6.次に、カーネルはシステム初期化プロセスinitを開始します。これが最初のプロセスになります。その後、システムの他の部分が起動します。 initプロセスはLinuxの最初のプロセスであり、他のすべてのプロセスの親プロセスです。このプロセスはどのLinux /UNIXの®システムでも最初の実行であり、そのPIDは常に1です。
7.次に、initは/etc /inittabファイルを調べて、開始する必要があるプロセスを特定します。このファイルはランレベルと各ランレベルで開始されるべきプロセスについてのinit情報を提供します。次にinitはsysinit(システム初期化)操作で最初の行を探し、次にRed Hat Linuxの/etc/rc.d/rc.sysinitのように指定されたコマンドファイルを実行します。 /etc/rc.d/rc.sysinit内のスクリプトを実行した後、initは初期ランレベルに関連したプロセスを開始します。ランレベルの初期スクリプトが実行されると、Linuxからログインできるようになります。
説明した各ソリューションは、このリストのステップ5を処理します。
実験を行ったとき、前回のアセンブリフローランプ実験のように、ビンファイルをSDカードに焼き付けました。 Q:誰が実行するためにSDカードからこれらの指示を読んでいますか? A:それはチップの内
Workerという3つの役割があります。クライアント:リクエストの発信元。C、 PHP 、Perl、MySQL UDFなどです。 Job:要求のディスパッチャ。クライアントから適切な作業への要求の転送
I.手動でコンパイルしてインストールする 1、インストールパッケージをダウンロードする、https://ohse.de/uwe/releases/lrzsz-0.12.20.tar.gzをダウン
グレップのhaproxy25053午前〇時00分00秒haproxy25054午前〇時00分00秒haproxy 5つの試験 のhttp://localhostの??:1080 /phpinfo