ディスクレイアウトとパーティションを別のドライブにコピーする

ディスクレイアウトとパーティションを別のドライブにコピーする

私は常に同じパーティションレイアウトを持つドライブを作成する必要があるアプリケーションを開発しています。私の最初のアイデアは、sfdiskを使用して元のドライブのパーティションテーブルをダンプすることでした。

sfdisk -d /dev/sdX > parttable

その後、それを他のすべてのドライブに適用します。

sfdisk /dev/sdX < parttable

しかし、この方法は通じないようです。 USBドライブから正しいパーティションテーブルをダンプし、gpartedを使用してランダムなパーティションを作成し、最初のパーティションテーブルをドライブに書き直しました。

しかし、問題はパーティションが認識されないことです。たとえば、Gparted はパーティションを不明としてリストします。パーティションテーブルにはファイルシステムに関する情報が格納されていないため、作成したパーティションをフォーマットする必要があるかもしれないと思いました。

今私の質問は:どういうわけかパーティションテーブルとパーティションに関する情報(ファイルシステムなど)を保存し、この方法で新しいドライブを作成できます(最大1つのコマンドを使用)。

ところで:msdosパーティションテーブル

編集:別のアプローチは、ドライブに関するすべてのデータ(部分テーブル、ファイルシステムなど)を直接収集し、コマンドを手動で生成することです。 1つのコマンドでパーティションテーブルを作成し、複数のパーティションをフォーマットすることは可能ですか(おそらく parted を使用して)。

答え1

次の条件で動作します。

  • コピーするソースディスクは/dev/sdx
  • 生ディスクが正しく分割/表示/タグ付けされました。
  • ソースディスクのファイルシステムの内容は無視されます。
  • コピーするターゲットディスクは次のとおりです。/dev/sdy
  • スワップパーティションは次のとおりです。/dev/sdy4
  • ブートパーティションは、最終システムのファイルシステムとともに/dev/sdy1マウントされます。/bootext3
  • ルートパーティションはファイルシステムを介して最終システムに/dev/sdy2マウントされます。/ext4
  • ユーザーパーティションはファイルシステムを介して最終システムに/dev/sdy3マウントされます。/homeext4
  • コピーしたい Debian システムは次のように圧縮されました。master_system.tar.gz
  • スクリプトを含むすべてのファイルは作業ディレクトリに保存されます。
  • スクリプトは同じ作業ディレクトリで実行されます。
  • rootスクリプトは次のように実行されますが、ルートまたは端末sudoとしてログインします。su
  • dupe_mnt作業ディレクトリにディレクトリがあります

ソースディスクのパーティション構造を「コピー」するには、構造が変更されない限り一度だけ実行します。

sfdisk --dump /dev/sdx > master_table

問題のシステムユーザーだけがDebianシステムからマスターシステムにコピーするものを決定できるので、これについては深く議論しません。/proc/dev/およびディレクトリをコピーしないことを知っていますが、/sys除外する別のディレクトリが必要です。必要に応じてアーカイブを作成して名前を付けますmaster_system.tar.gz。これにはその中にディレクトリを含める必要があります/boot/homeコピーする Debian システムまたはディスクパーティションを変更するまで、インストールは完了です。

生成されるスクリプトは次のとおりですsys_replicate.sh

#!/bin/sh
target=$1;
sfdisk /dev/${target} < master_table;
# Format the swap partition
mkswap /dev/${target}4;
# Format the data partitions
mkfs.ext3 /dev/${target}1;
mkfs.ext4 /dev/${target}2;
mkfs.ext4 /dev/${target}3;
# Mount the target root filesystem and its parts
mount /dev/${target}2 dupe_mnt;
mount /dev/${target}1 dupe_mnt/boot;
mount /dev/${target}3 dupe_mnt/home;
# Copy the master system to the target
cd dupe_mnt;
tar -zxvpf ../master_system.tar.gz;
cd ..;
# Unmount the new system
cd ..
umount /dev/${target}3;
umount /dev/${target}1;
umount /dev/${target}2;
#done

このファイルにはsys_replicate.shビットを設定する必要がありますexecutechmod +x sys_replicate.sh

この手順を使用するには、設定後にターゲットディスクを接続してください。 USBの場合は、システムが使用可能であると認識していることを確認してください。内蔵ハードドライブの場合は再起動が必要で、システムは自動的にそれを見つける必要があります。接続後、非常に/devディスクを追加すると文字が並べ替える可能性があるため、それが何であるかを確認してください。準備ができたら、rootシェルで実行します。

./sys_replicate.sh sdy

デバイス名はオペレーティングシステムに合わせて変更する必要があります/dev/sdy/dev/sdxさらに、sfdisk できるGPTディスクと拡張パーティションを処理するので、以前のコメントの質問は必要ありません。元より大きいディスクをコピーとして使用すると、すべてがまだうまく機能します。できずにスペースを無駄にします。簡単にただし、複製する基本ディスクを選択する前に、それらをリサイクルすることをお勧めします。

パーティション構造の作成とDebianシステムの複製は独立しているため、1つを変更しても別のものを更新する必要はありません。

答え2

コメントで述べたように、ddはデータ、パーティションレイアウトなどをコピーします。唯一の問題は、ソースディスクとターゲットディスクが同じでなければならないことです(シリンダ、ヘッド、セクタなど)。

より良いオプションは、ややハードウェアの中立的なオプションはclonezillaを使用することです。http://clonezilla.org/

答え3

MBRパーティションはディスクのセクタ0で、ddを使用して複製します。

sudo dd if=/dev/sda of=/dev/sdb bs=512 count=1

注:ターゲットディスクのデータが破損している可能性があります。新しいパーティションをアクティブにするには、kpartxを実行する必要があります。

関連情報