
どのように機能しますか?
通常、仮想マシンのロードは次のようになります。仮想マシンのブートディスクから(ブートパーティションから)、grub.cfg / grub.lstが読み取られ、そこからカーネルとinitrdが選択されます。 ドメインビルダー(仮想マシンの起動時にドメインを作成し、そこに/ initrdカーネルを配置し、設定を含むスタートページを形成し、メモリを追加する特別なアプリケーション)このカーネルは、ドメインをロードして起動します。
さらに、カーネルは通常のサーバーのようにすでにロードされています-initrd initスクリプトが起動され、ルートファイルシステムを準備し、pivot_rootを作成し(ルートディレクトリを切り替え)、実際のinitが起動され、inittabを読み取り、初期化システムsystem-vまたはupstart、systemdを起動します、本当に好きな人。
問題が発生した場合:ルートファイルシステムが利用できない、ハッキングの疑い、問題の調査、それから代替カーネルをロードする必要があるかもしれません。
この場合、カーネルはゲスト仮想マシンのディスクから読み取られるのではなく、既製のカーネルのカタログから取得されます。 そこから、initrdが取得されます。 ゲストマシンはそのまま起動します。
合計で、カーネルとinitrdのいくつかのセットがあります-それらのほとんどは、通常のシステムを起動できますが、オペレーティングシステムの「外部」のままで、何か有用なことを行ういくつかの特定のinitrdがあります。
これは:
- Auto PTMAXは、ブロックデバイスのサイズ変更(ディスクサイズの増加)後にPV、VG、およびルートパーティションファイルシステムのサイズを自動的に拡張する特殊なinitrdです。
- Auto FSCK-ルートファイルシステムを自動的にチェックします
- Vanilla Linux 3.2 -pv_opsカーネルの動作を確認するためのテストバージョン(自己責任で使用してください)
- Rescue Initrd-私たちの物語の主人公
initrdをレスキューできるのは何ですか?
ローンチ直後に彼について詳しく書きました: habrahabr.ru/company/selectel/blog/122667
要するに:
- ほぼ完全なシェル(完全なbusybox)
- ファイルシステムとパーティションを修正するためのユーティリティセット
- 診断用のネットワークユーティリティのセット
- sshサーバー
- 快適な作業のための一般的な環境(エディター、ユーティリティ)
- supload(以下について)
何が変わった?
これで、initrd自体がネットワーク設定を決定します。 ここには魔法はありません。カーネル引数を設定すると、仮想マシンの現在の設定が追加され、initrdのスクリプトがこれらの設定を受け取り、それに応じてネットワークを構成します。
同時に、sshサーバーが自動的に起動するようになりました。
理論的な解決策がわからない問題が1つあります。 これはsshサーバーの秘密鍵の問題です。 (同じIPアドレスに対して)変更されると、ssh-clientは「変更されたサーバーキー」に関する不快な警告を出します(そして、ほとんどのssh-clientでは、known_hostsでキーが変更/削除されるまで接続できません)。
いくつかのオプションがあります:
- 仮想マシンのファイルシステムからキーをコピーします。 ファイルシステムに問題がある場合、その自動マウントは困難な場合があります(たとえば、優れたxfsは、マウント時に100の記録データをそのようにギガバイトにロールバックすることにより、ファイルシステムを「一貫した」状態にすることができます)。 レスキューイメージの場合、これはオプションではありません。
- データベースにプライベートサーバーキーを保存します。 秘密鍵の概念と矛盾します。
- インストール時に「自分の」秘密鍵を設定します。 同様に。
言い換えると、美しい解決策はないため、唯一可能な解決策は、既知のキーから古いキーを削除し、接続し、作業を完了した後、保存されたキーを再度削除することです。
...または、コンソールを使用します。
suploadを使用する
レスキューinitrdには、任意の高速ストレージにデータをアップロードできるスクリプトが含まれています。 たとえば、クラウドストレージへ。
次のようになります。
supload.sh -u -k file.tar.gz
ストレージプロジェクトとサーバープロジェクトは互いに独立しているため、ユーザー名とパスワードは手動で追加する必要があります。 クラウドストレージの「アクセス設定」ページで見つけることができます。
当面の見通し
ユーザーrootの公開鍵をrescue-initrdにコピーします。 次の1-2アップデートで実装されます。