Linuxを実行するリモートサーバーがあります。 OSイメージが破損した場合に備えて、リモートでインストールしたいと思います(これは、OSの実験中にすでに2回発生しています)。
これまでのところ、私が持っている唯一の方法は、物理的にマシンの場所に移動し、USBディスクを使用してOSをマウントし、BIOSがそれを認識して、そこから起動できるようにすることです。
基本的にssh
を介してマシンに接続する方法はありますか 、このイメージを添付して、Windowsの仮想ドライブ(デーモンツールなど)のように動作させると、再起動が持続し、OSをリモートでインストールできるようになりますか?
Googleで解決策を探していましたが、PXEブートについて言及しているものを見つけました。サーバーなどが必要なため、複雑に聞こえます。イメージをマウントして実行するほど簡単ではありません。
それを超えて、私は何も役に立たなかったので、私はオプションがかなり不足しています…。誰かがこれを達成する方法を知っていますか?
承認された回答:
これがもっともらしいと私が考える仮定の状況です:
- 対象のマシンはEFIです。
-
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
- これは、プログラムにインタラクティブにフィードするオプションのスクリプト化されたショートカットです。 GUIDパーティションテーブルとタイプEFI-systemのパーティションが作成されます これは、ターゲットディスクの最初に使用可能な750Mibにまたがり、ディスクの残りの部分にまたがる別のLinuxデフォルトパーティションにまたがっています。
-
espにもファイルシステムが必要です。 FATである必要があります。
- 私は自分にfsラベルを付けます
VESP
。好きなように電話してください。 - ラベルは後で
/etc/fstab
で使用します および別の構成ファイル–間違いなく何かにします。 - 私の意見では、常にすべてというラベルを付ける必要があります ディスク。
-
OSを
${TGT}2
にインストールする場合 もちろん、そのためのファイルシステムも必要になります。sudo mkfs.vfat -nVESP "$TGT"1
- 私は自分にfsラベルを付けます
-
そして、いくつかの
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にアクセスできるようになります。ほとんどのライブインストールシステムは、同様に配置された構造を提供します。
-
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
の場合 もちろん、上記で使用してデフォルトのルートに戻します。