ソースディスクを複数のターゲットディスクに複製するスクリプト可能な方法は何ですか?

ソースディスクを複数のターゲットディスクに複製するスクリプト可能な方法は何ですか?

起動可能なディスクを複数のコンピュータの異なるディスク(異なるサイズ)に複製する必要があり、スクリプトが可能である必要がありますが、これを行う方法が見つかりません。

私はすべてにUbuntu 16.04を使用します。

まず、以下を実行しますdd(ディスクのマウント解除)。

$ dd if=/dev/sda bs=1K count=10000000 status=progress | gzip -c > os.img

これは約10 GB、圧縮ファイルは約3.8 GB、ソースディスクは120 GB、テストしたターゲットディスクは16 GBなので、すべてのサイズで動作すると確信しています。以下を使用してディスクに書き込みます。

$ gunzip -c os.img | dd bs=1K of=/dev/sda status=progress

しかし、開始されず、次のような結果が得られます。

カーネルパニック - 非同期:VFS:未知のブロック(0,0)にルートファイルシステムをマウントできません。

これが何を意味するのかわからないので、グーグルをしてみましたが、解決策が見つかりませんでした。その後、ライブOSにディスクをマウントして、少なくとも動作していることを確認しようとしましたが、次のような結果が得られました。

$ sudo mount /dev/sda1 /mnt
EXT4-fs (sda1): bad geometry: block count 29306624 exceeds size of device (14653670 blocks)

これは私には理解できません。この問題を解決できるのか、それとも良い方法があるのか​​を知っている人はいますか?誰かがclonezillaを推薦するのを見ましたが、スクリプト可能なバージョンが見つからず、「ターミナルGUI」でのみ使用できるようです。

答え1

問題は、ソースディスクのサイズがターゲットディスク(一部)より大きいことです。これは、パーティションテーブルが異なるサイズのディスク用に作成されたために機能しないことを意味します。

あなたの立場では、まずディスク上のすべてのパーティションを削除してから、固定サイズのパーティションを作成するためなどを使用するスクリプトを作成しますfdisk(このパーティションは、イメージをインポートしたパーティションと同じサイズでなければならず、パーティションを作成する必要があるかもしれません) )。このように)それから起動可能にします。これにより、そのサイズのディスクに対してパーティションテーブルが正しいことを確認できます。最後に、コピー分割(例:/dev/sda1)ディスク全体の代わりに。

gzipところで、/gunzipと両方を使用することは意味がありませんdd(進行率表示が好きでない限り)。dd書き込み操作が特定のサイズであることを確認するだけです。ただ使えます

gzip -c /dev/sda1 > os.img
gunzip -c os.img > /dev/sdb1

など。進行状況を表示するにはpv

関連情報