web-dev-qa-db-ja.com

ルートをアンマウントして、SSHを使用してディスク全体を変更するPythonスクリプトを実行するにはどうすればよいですか?

SSHを使用してDebianまたはCentOSデバイスに接続し、新しいrawディスクイメージファイルと新しいパーティションテーブルを書き込んで、ディスク全体(5つのパーティションを持つ1つの30 GBディスク、5番目はLinuxルート)を変更したいと思います。私の主な目標は、これをリモートで自動的に作成することです。

だから私はおそらくルートパーティションをアンマウントしてPython LinuxがRAMで実行されている間に実行できると思いましたが、これは可能ですか?

代替またはより良い解決策はありますか?

追加のメモ:「これらはサーバーではありません。物理的に簡単にアクセスできるRaspberry Piのようなもので、手動で取り外してコンピューターにマウントし、新しいイメージを書き込んでから、DebianUSBで起動して残りの部分にインストールするディスクのようなSDカードを備えています。空き領域の。これを簡単にしようとしています。」

2
Cagurtay

説明どおりに行うことはできません。

ただし、多くのディストリビューションでは、非常に早い起動にintramfsイメージを使用しています。このイメージのinitスクリプトを変更する場合は、ファイルシステムがマウントされる前にタスクを実行できます。それが一度だけ起こるようにコードを書くには、さらに賢くする必要があります。これらはすべて、十分なアクセス権を使用してリモートで実行できます。 CentOSとDebianはinitramfsに異なるシステムを使用しているため、2回実行する必要があります。ローカルにアクセスできる1つのシステムのバグを解決してから、そうでないシステムに展開することをお勧めします。この種のものは完全に機能する必要があります。

1
davolfman

この目的のためにカスタムinitramfsイメージを作成し、そのためのDracutモジュール(または、好みのinitramfsビルダーに応じてinitramfs-toolsフック)を調べることができます。完全なPython環境を提供するのは難しいでしょう。可能であれば、sfdiskのようなシェルツールに固執することをお勧めします。ただし、ストックinitramfsでさえ、完全な書き込みに必要なすべてのものをすでに備えています。ディスクイメージ。これを実行する最も簡単な方法はkexecですが、ディスクイメージが非常によく圧縮されている場合でも(未使用の領域がすべてゼロになっていることを確認してください)、それを含むinitramfsイメージは大きすぎて実行中のシステムにロードします。この場合、次回の再起動時に変更を有効にするには、ブートローダーの構成をいじる必要があります。一部のブートローダーは「1回起動」機能を提供します。それ以外の場合は、上書き後に変更を元に戻す必要があります。ディスク。少なくともSyslinuxブートローダーを使用すると、起動時にマージされる複数のinitramfsイメージをロードできるため、通常のイメージで置換イメージファイルの存在を確認し、ブートを続行する前に書き出すことができます。

1
Ferenc Wágner