web-dev-qa-db-ja.com

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

私は、常にまったく同じパーティションレイアウトでドライブを作成する必要があるアプリケーションに取り組んでいます。私の最初の考えは、sfdiskで元のドライブのパーティションテーブルを一度ダンプすることでした。

sfdisk -d /dev/sdX > parttable

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

sfdisk /dev/sdX < parttable

しかし、この方法は機能していないようです。 USBドライブから正しいパーティションテーブルをダンプし、gpartedでランダムパーティションをいくつか作成して、最初のパーティションテーブルをドライブに書き戻そうとしました。

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

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

ところで:msdos partiontable

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

4
KevKosDev

次の条件での作業:

  • コピーする元のディスクは/dev/sdxです
  • 元のディスクは適切にパーティション分割/ラベル付け/フラグ付けされている
  • 元のディスクのファイルシステムの内容は無視されます
  • コピー先のディスクは/dev/sdyになります
  • スワップパーティションは/dev/sdy4になります
  • ブートパーティションは/dev/sdy1にマウントされ、最終的なシステムでは/bootext3ファイルシステムがマウントされます。
  • ルートパーティションは/dev/sdy2/にマウントされ、最終的なシステムではext4ファイルシステムにマウントされます。
  • ユーザーパーティションは、/dev/sdy3ファイルシステムを使用した最終システムの/homeext4マウントされます。
  • コピーするDebianシステムはmaster_system.tar.gzにtarで圧縮されています。
  • スクリプトを含むすべてのファイルは作業ディレクトリに保存されます
  • スクリプトは同じ作業ディレクトリから実行されます
  • スクリプトはrootではなくSudoとして実行されますが、rootとしてログインするか、ターミナルで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にはexecuteビットを設定する必要があります。 chmod +x sys_replicate.sh

このプロセスを使用するには、セットアップ後にターゲットディスクを接続します。 USBの場合は、利用可能であることをシステムが認識していることを確認してください。内蔵HDDの場合、明らかに再起動が必要で、システムが自動的に検出するはずです。接続したら、[〜#〜] very [〜#〜]であることを確認してください。ディスクを追加すると文字が再配置されるため、/devがどれであるかを確認してください。準備ができたら、rootシェルで次のコマンドを実行します。

./sys_replicate.sh sdy

デバイス名/dev/sdyおよび/dev/sdxは、運用システムに合わせて変更する必要があります。また、結局のところ、sfdiskcan GPTディスクと拡張パーティションを処理するため、以前のコメントの質問は必要ありませんでした。コピーとして、オリジナルよりも大きいディスクを使用する場合、すべてが引き続き機能します。 簡単に再利用できないスペースが無駄になるので、コピーするマスターディスクを選択する前にそれを考慮してください。

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

2
user207673

MBRパーティションはディスクのセクター0であり、ddでそれを複製します。

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

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

2
ingopingo

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

ややハードウェアニュートラルになるより良いオプションは、clonezillaを使用することです- http://clonezilla.org/

2
ivanivan