GNU/Linux >> Linux の 問題 >  >> Linux

Linux –自分で起動してインストールできるイメージをリモートマウントすることは可能ですか?

Linuxを実行するリモートサーバーがあります。 OSイメージが破損した場合に備えて、リモートでインストールしたいと思います(これは、OSの実験中にすでに2回発生しています)。

これまでのところ、私が持っている唯一の方法は、物理的にマシンの場所に移動し、USBディスクを使用してOSをマウントし、BIOSがそれを認識して、そこから起動できるようにすることです。

基本的にsshを介してマシンに接続する方法はありますか 、このイメージを添付して、Windowsの仮想ドライブ(デーモンツールなど)のように動作させると、再起動が持続し、OSをリモートでインストールできるようになりますか?

Googleで解決策を探していましたが、PXEブートについて言及しているものを見つけました。サーバーなどが必要なため、複雑に聞こえます。イメージをマウントして実行するほど簡単ではありません。

それを超えて、私は何も役に立たなかったので、私はオプションがかなり不足しています…。誰かがこれを達成する方法を知っていますか?

承認された回答:

これがもっともらしいと私が考える仮定の状況です:

  1. 対象のマシンはEFIです。
  2. grub ターゲットにインストールされていないか、システムから完全に消去されています。
    • 干渉することしかできず、それ以外の価値はありません。

したがって、上記の場合に行う可能性があるのは、/espに保持する小さなインストール/レスキューイメージの起動オプションを構成することです。 またはEFIシステムパーティション。

現在のインストールで問題が発生した場合は、少なくとも何らかの方法でEFIシステムパーティションにアクセスできる限り、ファームウェアをインターフェイスして、次回の再起動時にリカバリイメージで起動するようにマシンを設定できます。 。その場合、テキストファイルを1つか2つ変更し、指を交差させてreboot nowを実行するだけです。

最小限に構成されたArchLinuxの基本的なコマンドセットは次のとおりです(私が使用しているため) 私が説明するようにまだできるシステム。

  • まず、作業ディレクトリを作成し、いくつかのファイルをダウンロードします。

    • aria2cを使用しています ここ。私はそれをお勧めしますが、うまくいくものなら何でも使用してください。
    • rEFIndを解凍します 7zaを使用 ただし、ここではすべての場合で同じ
      ツール設定を使用します。
    • 私が投稿してから数時間/日以内にこれを読んでいない場合は、以下で使用されているリンクがない可能性が非常に高いです。 現在。

      mkdir /tmp/work && cd /tmp/work || exit
      aria2c  'magnet:?xt=urn:btih:331c7fac2e13c251d77521d2dc61976b6fc4a033&dn=archlinux-2015.06.01-dual.iso&tr=udp://tracker.archlinux.org:6969&tr=http://tracker.archlinux.org:6969/announce' 
              'http://iweb.dl.sourceforge.net/project/refind/0.8.7/refind-cd-0.8.7.zip'
      7za x ref*.zip; rm ref*zip
      
  • 次に、イメージディスクを作成します。

    • ここではループデバイスでファイルを使用していますが、ファームウェアからこれを起動する場合は、実際のディスクを使用することをお勧めします。
    • 実際のデバイスの場合、fallocate およびlosetup 無視することができ、実際のデバイス名は
      /dev/sda[12]に対応する可能性がはるかに高くなります。 /dev/loop0p[12]より

      fallocate -l4G img
      
  • 次に、そのディスクをgdiskでパーティション化します。 ユーティリティをループデバイスに割り当てます。

    • これは、プログラムにインタラクティブにフィードするオプションのスクリプト化されたショートカットです。 GUIDパーティションテーブルとタイプEFI-systemのパーティションが作成されます これは、ターゲットディスクの最初に使用可能な750Mibにまたがり、ディスクの残りの部分にまたがる別のLinuxデフォルトパーティションにまたがっています。
      • これらのパーティションは/dev/sda1になります および/dev/sda2 実ディスクを使用している場合は、それぞれ/dev/sdaになります。 ./imgではなく 。通常、Linuxルート用に複数のパーティションを追加することが望ましいです。これは/dev/sda2の目的であると想定されています。 。
    • printf スクリプトまたはいいえ、gdisk プログラムは使いやすいので、代わりにインタラクティブに実行する方がよい場合があります。ターゲットディスクは実行時にマウントしないでください。おそらく、wへのルート権限が必要になります。 変更を書きます。
    • 原則として、wを実行するまで、そのプログラムで必要なことはほとんど何も実行できません。 儀式–そうするときは必ず確認してください。
    • $TGTを入れます シェル変数で。ここでの定義を除いて、必要に応じて調整することをお勧めします。私が使用する場合は、そうすることができます。

      printf %s\n o y n 1 '' +750M ef00 
                       n 2 '' '' '' '' w y |
      gdisk ./img     >/dev/null
      TGT=$(sudo losetup --show -Pf img)p
      
  • espにもファイルシステムが必要です。 FATである必要があります。

    • 私は自分にfsラベルを付けますVESP 。好きなように電話してください。
    • ラベルは後で/etc/fstabで使用します および別の構成ファイル–間違いなく何かにします。
    • 私の意見では、常にすべてというラベルを付ける必要があります ディスク。
    • OSを${TGT}2にインストールする場合 もちろん、そのためのファイルシステムも必要になります。

      sudo mkfs.vfat -nVESP "$TGT"1
      
  • そして、いくつかのmountを作成します ディレクトリを作成し、関連ファイルの抽出を開始します。

    set     ref     ref*iso         
            arch    arch*iso        
            efi     arch/EFI/archiso/efiboot.img
    while   [ "$#" -gt 0 ]
    do      mkdir "$1" || exit
            sudo mount "$2" "$1"
            shift 2
    done;   mkdir esp
    
  • rEFIndをインストールします …

    • rEFInd はブートマネージャであり、ほとんどの場合、ブートメニューを提供して設定するだけです。
    • rEFInd 設定ファイルはespに配置され、いつでも好きなように編集できます。

      sudo ref/install.sh --usedefault "$TGT"1 &&
      sudo umount ref  && rm -rf ref*
      
  • 次に、mountします 特に、Archインストールディスクから必要なファイルを取得して、独自のライブブータブルレスキューディスクを取得します。

    • ほとんどのライブディスクは、フラットでパーティション化されていないisoファイルシステムを見た目にするための一種の醜いハックを実装しています。 BIOSシステムとの下位互換性を維持しながらUEFIシステムへの許容可能なブートデバイスのように。
    • ArchLinuxも例外ではありません。
    • この醜いハック それはefiboot.img 現在./efiにマウントされています 。ここに、カーネルとinitramfsイメージファイルがあります。 その他 ディスク上のもの./arch/arch/boot内) ) しません EFIシステムで機能します。

      sudo sh -ec    <<CONF '
           mount    "$1" esp
           cp -ar    efi/EFI/archiso esp/EFI
           cp -ar    arch/arch/*x86* esp/EFI/archiso
           mkdir     esp/EFI/archiso/cow
           xargs   > esp/EFI/archiso/refind_linux.conf
           umount    efi arch
           rm -rf    efi arch*' -- "$TGT"1
      "arch_iso" "archisobasedir=EFI/archiso    
                     archisolabel=VESP             
                     copytoram                     
                     cow_label=VESP                
                     cow_directory=/EFI/archiso/cow
                     cow_persistence=P             
                     cow_spacesize=384M            
                     initrd=EFI/archiso/archiso.img"
      CONF
      

基本的に、永続的なコピーオンライトを備えた起動前レスキュー環境をゼロからインストールしました。 ファイルを保存します(たとえば、systemctl enable sshd_socket これで、設定はライブシステムの次回の起動時に保持されます) 。 Arch Linuxライブインストールメディアはシステムのブートパーティションに常駐し、いつでもブートメニューから呼び出すことができます。もちろん、ブートメニューマネージャもインストールしました。

  • 上記に関するいくつかの点が目立つはずです:
    • *x86*を使用します 私は64ビットマシンを持っていて、そのグロブが必要なものを取得するからです。 32ビットインストールの場合(しかしなぜですか?) *686*を使用する 代わりに。
      • 必要なもの ちなみに、合計で7つのファイルと約3億です。
      • ライブシステムのrootfsは、esp/EFI/archiso/x86_64/airootfs.sfsにある押しつぶされたイメージです。 。
    • ディスクをラベルで指定します。 ヒントはありません または他のそのようなナンセンス–ディスクには名前が付けられているため、簡単に見つけることができます。 VESPではなく、espラベルの代わりに選択したものを使用する必要があります
    • copytoram カーネルパラメータは、ArchLinuxライブinitに指示します ループマウントする前にrootfsイメージをtmpfsにコピーするシステム。これにより、その環境で作業しているときに実際にespにアクセスできるようになります。ほとんどのライブインストールシステムは、同様に配置された構造を提供します。
関連:/ usr /portsパーティションのディスクスペースが不足しました。どうすればポートを構築できますか?

EFIが優れているのは、ファイルシステムを処理する能力です。 。最近のコンピュータでは、生のバイナリをパックしてディスクパーティションの間に挟む必要はまったくありません。代わりに、通常の日常のディレクトリツリーに配置された単純なテキストファイルを使用してブート環境を管理および構成できる場合でも、人々は今でもそうしていることに驚かされます。上記では、カーネルとinitramfsを中央ツリー構造の独自の名前付きフォルダーに配置しました。 EFI – rEFIndからヒントを得ます この場合、便宜上–起動時にパス名で呼び出します マウントだから 特に。

あとは、必要なときに実際に起動するシステムを選択する方法を確実に理解するだけです。理解してください–これを今すぐ起動できます。 qemuを使用して仮想マシンで実行できます (OVMF -pflashが必要です ファームウェア) または、コンピュータを再起動してrEFInd カーネルを検出し、そのパス名をファームウェアに渡します。ファームウェアは、ArchLinuxライブシステムをロードして実行します。より永続的なシステムをディスクにインストールする場合、またはいくつかの(ライブディスクを再起動してインストールを実行することで選択した場合は、今すぐ実行できます) –カーネルとinitramfsを同じ構造に保つ必要があります。これは非常に簡単に配置できます。

  • たとえば、想像力の欠如のために、 rootという名前のルートパーティションにシステムをインストールする場合 、次のように設定します:

    • mount --bind ルート/boot上の特定のブートフォルダ /etc/fstabのパス 。
    • /etc/fstabに2行必要です /espにマウントポイントを作成します これを処理します。

      sudo sh -c          <<FSTAB     '
           [ -d /esp ]    || mkdir /esp
           findmnt   /esp || mount -L ESP /esp
           mkdir -p  /esp/EFI/root
           cp        /boot/kernel binary   
                     /boot/initramfs.img   
                     /esp/EFI/root
           mount -B  /esp/EFI/root /boot
           cat   >>  /etc/fstab
           echo "$1">/boot/refind_linux.conf
      ' -- '"new_menu_item" "root=LABEL=root"'
      LABEL=ESP       /esp    vfat    defaults        0 2
      /esp/EFI/root   /boot   none    bind,defaults   0 0
      FSTAB
      

インストールごとに1回だけそのようなことを行う必要があります。つまり、そもそもそのように設定しなかったと仮定します。これは、カーネルとinitramfsがすでに属している場所にあるため、より簡単です。 /etc/fstabにこれらの行を入力したら /boot/refind_linux.confにある最小限の設定ファイル あなたは良い準備ができています。同じ/espを使用して、同じシステムに必要な数のインストールをサポートできます。 デバイスを作成し、そのようにすべての起動可能なバイナリを同じツリーに集中化します。
システムが異なれば、動作も少し異なります。たとえば、Windowsは、準拠させるためにもう少し手間がかかりますが、すべて機能します

  • さて、あなたが知る必要がある最後のことは、私が前に言ったように、ファイルシステムから次の起動インストールをどのように選択するかです。これは、ファイル/esp/EFI/BOOT/refind.confで構成されます。 。

    • このファイルを読む必要があります。おそらく99%のコメントであり、このファイルで何ができるかをすべて説明します。
    • もちろん、実際には何もする必要はありません。デフォルトではrEFInd スキャンツリーで最後に更新されたカーネルを起動します。
    • しかし、私は通常、次のオプションを設定することになります。

      <<DEF sudo tee 
             /esp/EFI/BOOT/refind.conf.def
      ### refind.conf.def
      ### when renamed to refind.conf this file
      ### will cause refind to select by default
      ### the menu item called "new_menu_item"
      ### in its /boot/refind_linux.conf
      default_selection new_menu_item
      ### this file will also set the menu timeout
      ### to only 5 seconds at every boot
      timeout 5
      ### END
      DEF
      
    • そしてレスキューファイル…

      <<RES sudo tee 
             /esp/EFI/BOOT/refind.conf.res
      ### refind.conf.res
      ### this one will default to selecting
      ### the entry named "arch_iso" with a
      ### 10 second timeout
      default_selection arch_iso
      timeout 10
      ### END
      RES
      
      • これで、それらを移動するだけで済みます。
      • たとえば、reboot nowした後にレスキュー環境を確実に起動するには …
      sudo cp /esp/EFI/BOOT/refind.conf.res 
              /esp/EFI/BOOT/refind.conf
      
      • そして.defに置き換えます .resの場合 もちろん、上記で使用してデフォルトのルートに戻します。
関連:WindowsのISOファイルからUbuntuをインストールしますか?
Linux
  1. initrd イメージを作成せずに Linux カーネルを起動することはできますか?

  2. Linuxファイル記述子0 1 2がstdin、stdout、およびstderrではない可能性はありますか?

  3. VHD から Linux を起動できますか?

  1. LinuxMintをWindows8にインストールする|デュアルブートWindows8およびLinuxMint12

  2. MP3 ファイルの不具合を検出 (可能であれば修正) できるツールはありますか?

  3. BIOS システムで GPT ディスクから Linux を起動することはできますか?

  1. Linux – Kernel.orgカーネルをコンパイルしてディスク上のカスタムボリュームにインストールしますか?

  2. 選択した単語のすべてのインスタンスを強調表示できる Linux エディター

  3. Linux でマルチパーティション ディスク イメージをマウントする方法は?