Linuxを実行しているリモートサーバーがあります。 OSイメージが破損した場合に備えて、リモートでOSイメージをマウントしたいと思います(OSの実験中にこれが2回発生しました)。
これまで私ができる唯一の方法は、物理的にコンピュータの場所に移動し、USBディスクを使用してOSをインストールすることです。これにより、BIOSでそれを確認して起動できます。
基本的にコンピュータに接続しssh
、このイメージを添付し、Windowsの仮想ドライブ(デーモンツールなど)にあるかのように動作し、再起動後も維持され、OSをリモートでインストールできるようにする方法はありますか?
Googleが解決策を探していましたが、PXEブートに関する言及があることがわかりました...サーバーなどが必要なので、複雑に聞こえ、イメージをインストールして完了するのと同じくらい簡単ではありません。
それ以外は役に立つものが見つからなかったので、オプションは非常に限られています。これを実装する方法を知っている人はいますか?
答え1
私が合理的だと思う仮想的な状況は次のとおりです。
- ターゲットマシンはEFIです。
grub
ターゲットにインストールされていないか、システムから完全に消去されました。- 邪魔にならず、そうでなければ貴重なものは提供できません。
/esp
したがって、上記のシナリオで私たちができることは、EFIシステムパーティションに保存する小さなインストール/修復イメージの起動オプションを設定することです。
現在のインストールに問題がある場合は、少なくともEFIシステムパーティションにアクセスする方法がある限り、ファームウェアを接続し、次の再起動時にリカバリイメージから起動するようにマシンを設定できます。この場合、私たちがしなければならないのは、テキストファイルの1つまたは2つを変更し、祈り、実行することだけです。reboot now
。
以下は、Arch Linuxの最小構成のための基本的なコマンドセットです。(私が使う方法だから)システムは私が説明したようにまだ動作します。
まず、作業ディレクトリを作成し、いくつかのファイルをダウンロードします。
- 私は
aria2c
それをここで使用しています。私はそれをお勧めしますが、効果があるものを使用してください。 - 私は
rEFInd
unzipツールを使用します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システムこれは、ターゲットディスクの最初の利用可能な750Mibとディスクの残りの部分にまたがる別のLinuxベースパーティションにまたがっています。
- 物理ディスクを使用している場合、パーティションは
/dev/sda1
それぞれ、およびです。 Linuxのルートディレクトリに複数のパーティションを追加する必要があることがよくあります。/dev/sda2
/dev/sda
./img
/dev/sda2
- 物理ディスクを使用している場合、パーティションは
printf
このプログラムはスクリプトの有無にかかわらず使いやすいgdisk
ので、インタラクティブに使用する方が良いでしょう。実行中はターゲットディスクをマウントしないでください。w
変更を書き込むにはroot権限が必要な場合があります。- 一般に、このプログラムでは必要なほとんどすべての操作を実行できますが、
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システムこれは、ターゲットディスクの最初の利用可能な750Mibとディスクの残りの部分にまたがる別のLinuxベースパーティションにまたがっています。
また、espにファイルシステムが必要です。 FATでなければなりません。
- 私はfsタグを与えました
VESP
。あなたが望むように電話する必要があります。 - 後でこのタグとは異なる設定ファイルを使用する予定
/etc/fstab
ですので、必ずこれを行ってください。何。 - 私の考えには常にラベルを付けるべきだと思います。みんなディスク。
現在オペレーティングシステムがインストールされている場合は、
${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
espを使用してArchインストールディスクから必要なファイルをインポートし、ライブブータブルリカバリディスクを入手します。- ほとんどのライブディスクは、非分割フラットISOファイルシステムを作成するために醜いハッキングを実装しています。バラよりBIOSシステムとの下位互換性を維持しながら、UEFIシステムで許可されている起動デバイスと同じです。
- Arch Linuxも例外ではありません。
これ醜いハッカーそれだけです。
efiboot.img
現在./efi
.whereにインストールされており、カーネルと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ビットコンピュータを持っており、globが私のニーズに適しているので、これを使用しています。 32ビットインストールの場合(ところでなぜ?)代わりに使用してください*686*
。- 私は必要ですところで、計7個のファイル(約300M)のみあります。
- live-systemのrootfsは圧縮イメージです
esp/EFI/archiso/x86_64/airootfs.sfs
。
- ラベルでディスクを指定します。いいえヒントまたは、他の不可解なサウンド - ディスク名が指定され、簡単に見つけることができます。代わりに、espタグが選択する項目を置き換える必要があります。
VESP
。 - これ
copytoram
カーネルパラメータは、Arch Linuxライブinit
システムにループマウント前にrootfsイメージをtmpfsにコピーするように指示します。これにより、その環境で作業するときに実際にespにアクセスできます。ほとんどのフィールドマウントシステムは同様の配置を提供します。
EFIのハイライトは処理能力です。ファイルシステム。最新のコンピュータでは、生のバイナリを圧縮してディスクパーティション間に挿入する必要はありません。人々がまだこれを行うのではなく、日常のディレクトリツリーに配置された単純なテキストファイルを使用してブート環境を管理および設定できることは私にとっては驚くべきことです。上記では、カーネルとinitramfsを中央ツリー構造の独自の名前付きフォルダに配置しました。 EFI(rEFInd
便宜上、この例ではインポート)は起動時に呼び出されます。パス名〜のため山特に
今残っていることは、必要に応じて実際に起動するシステムを選択する方法を理解することです。ダウンロード - 今すぐ起動できます。仮想マシンでこれを行うことができます。qemu
(OVMFファームウェアが必要です-pflash
)または、コンピュータを再起動してカーネルをrEFInd
検出し、そのパス名をファームウェアに渡すと、Arch Linuxライブシステムがロードされ実行されます。ディスクにより永続的なシステムをインストールする場合、または複数をインストールする場合(ライブディスクから再起動してインストールを実行することを選択した場合は、これを行うことができます。)- カーネルと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
このような作業はインストールごとに一度だけ行えます。最初にこのように設定しなかったと仮定すると、カーネルと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
もちろん、上記で使用したのは、デフォルトのルートディレクトリに戻ることです。
答え2
わかりやすくするため、ご質問を再度ご説明いたします。
Linuxディストリビューションをインストールしたいが、サーバーへの物理的なアクセスを避けたい。次の選択肢は使用できません。
- DellのiDRACまたは他のベンダーの同等の製品。これらのソリューションは、帯域外サーバー管理を提供し、サーバー上でオペレーティングシステムを実行しない場合でも機能し、提供する機能の1つは、仮想USBスティックなどの仮想インストールメディアを接続できることです。
- ただし、これを使用するには、その機能を備えたサーバーが必要です。
- PXEを使用したネットワーク起動。 PXEは、DHCPとTFTPを使用してネットワーク経由でサーバーを起動できるようにする今日のほとんどのサーバーの機能です。
- ただし、PXE を使用するには、DHCP サーバーと TFTP サーバーを構成できる必要があります。
あなたの質問で提案したアイデアは、サーバー上の既存のオペレーティングシステムを使用してネットワーク経由でインストールイメージをインストールし、何とかインストールイメージをインストールすることです。
一見すると、これは確かに不可能です。インストールするには再起動する必要があります。特に、既存のオペレーティングシステムの上にインストールする場合は現在のオペレーティングシステムを上書きし、再起動しないとオペレーティングシステムを上書きします。まだ使用中です。しかし、再起動すると、ネットワークインストール用のインストールイメージを含め、既存のオペレーティングシステムは当然終了する。
私が考えることができる方法はほとんどありません。これには2人の候補者がいます。どちらも非常に高度なプロセスであるため、プロセスが何をしているのか、どのように機能するのか理解していない限り、試してはいけません。また、まずローカルにアクセスできるサーバーを使用する練習をしてください。
kexec
既存のオペレーティングシステムから直接別のオペレーティングシステムを起動するために使用されます。kexec
現在、オペレーティングシステムを置き換える新しいオペレーティングシステムの起動イメージを提供できる私が知っている唯一のツールです。kexec
これは、現在のオペレーティングシステムがLinuxであり、ターゲットオペレーティングシステムもLinuxの場合にのみ(有効に)機能します。kexec
ロードするカーネルとinitrdを提供するように要求します。ルートファイルシステムイメージなどの他のものを提供することはできません。幸いなことに、ほとんどのLinuxインストーラは別々のカーネルとinitrdのペアを使用するので、それを使うことができます。たとえば、Debian インストーラに必要なカーネルと initrd を以下から取得できます。ネットワークリリースダウンロードページ。それからそれらを抽出しなさいnetboot.tar.gz
。 (はい、ネットワークブートと同じカーネルとinitrdを使用できるはずです。)私はこのアイデアをまだテストしていません。エキスパートプログラムであると仮定するため、これを実装するにはいくつかの作業を行う必要があるかもしれません。これはこの回答の範囲外です。
現在のオペレーティングシステム内に新しいオペレーティングシステムをインストールします。その後、新しいものに切り替えます。別のパーティションにインストールするか、LVM(この場合は推奨)を使用している場合は、別のLVにインストールできます。もちろん、これには両方のオペレーティングシステムを一時的に保存するのに十分なスペースが必要です。
debootstrap
通常のオペレーティングシステムインストーラの代わりに、新しいオペレーティングシステムのインストールなどのツールを使用する必要があります。これを使用することはdebootstrap
通常、インストーラが処理するいくつかの手順(カーネルとブートローダのインストール、基本的なシステム設定ファイルの編集)を直接実行する必要があるため、通常のインストーラを使用するよりもはるかにユーザーフレンドリーではありません。これもこれを専門家プログラムにします。
すべての場合にリモートコンソールを介してサーバーにアクセスできるようにしたいです。これは、たとえばIPMIを介して達成できます。