標準ツールを使用してディスク全体のパーティションレイアウトをコピーする方法


81

論理ドライブを含むハードドライブのパーティションレイアウト全体のバックアップを作成して、そのレイアウトを別のディスクに復元できるようにします。私はないではないだけで、レイアウト、パーティションの内容をコピーします。プライマリパーティションと拡張パーティションの場合、簡単です。

dd if=/dev/sda of=partitiontable.bin bs=1 skip=446 count=64 # backup
dd if=partitiontable.bin of=/dev/sda bs=1 seek=446 count=64 # restore

しかし、論理パーティションのレイアウトに関しては、標準ツールの中にレイアウトを保存する同様の方法が存在するのだろうか?主な問題は、EBRの場所へのオフセットを見つけることだddと思います。すべてを(おそらく)空のディスクに戻して、同じレイアウトを復元できるようにする必要があることに注意してください。fdiskまたはのようなパーティション分割ツールを使用してpartedも問題ありませんが、使用(スクリプト)を自動化できる必要があり、X関連のパッケージに依存しないようにする必要があります(コマンドラインのみ)。

私のバックアップ計画は、structモジュールを使用して小さなpythonスクリプトで手動で実行していますが、もっと簡単な方法があることを望みました。

回答:


89

このタスクにはsfdiskを使用できます。

セーブ:

sfdisk -d /dev/sda > part_table

戻す:

sfdisk /dev/sda < part_table

GPTパーティションテーブルの場合、これにはsfdiskutil-linux 2.26以降が必要です。それはlibfdiskの上に一から書き直されました

これにより、新しいUUIDが生成されるのではなく、変更されずにUUIDがコピーされます。したがって、新しいディスクは元のクローンであり、同じレイアウトの別のディスクではありません。ただし、Linux /dev/disk/by-uuid/はパーティションテーブル内のUUIDではなく、ファイルシステムのUUIDを参照することに注意してください。 sfdiskダンプからUUIDを編集すると、新しいUUIDが生成されます(パーティションごと、およびファイルの先頭近くのパーティションテーブル自体のUUID)。


1
確かではありませんが、頭に浮かぶ唯一の制限は、msdosパーティションテーブルスキームによって課されるパーティションの2TBサイズ制限です。この制限を克服するには、代わりにGPTを使用できますが、AFAIK sfdiskはGPTで動作しません。他の制限があるかどうか、また対処できない場合にsfdiskが報告するかどうかはわかりません。
ペトルウーゼル

2
sfdisk大容量では動作しないか、GPTをサポートしません。
dhchdhd

1
@Barryと「大」と言うとき、あなたは@Petrが話している2TBの制限を参照していますか?
ラウリッツV.ソーロウ

5
正しい方法は次のとおりです:sudo parted / dev / sda -lm> sda.parted
dhchdhd

1
時にはそれが追加して、DOSにのみ問題を無視すること、便利です-Lまたは--linuxオプション:sfdisk -L /dev/sda < part_table
ディエゴ・

50

ソースディスクがMBR(別名「dos」または「msdos」)またはGPT(別名「GUID」)パーティションテーブルを使用しているかどうかによって異なります。

2 TBを超えるディスクはMBRを使用できないため、GPTです。

2 TB未満のディスクは両方を使用できるため、最初にどちらを使用するかを確認する必要があります。

Linuxを使用している場合、これらのコマンドのいずれかを使用して、ソースディスクが使用しているパーティションテーブルを確認します。

disk=/dev/sda

# Always available, but old versions may not recognize gpt
fdisk -l $disk | grep type

# `apt-get install gdisk` or equivalent on non-Debian systems
gdisk -l $disk | grep -A4 'scan'

# `apt-get install parted`
parted $disk print | grep Table

与えられた

source=/dev/sda
dest=/dev/sdb

MBRディスクの場合

sfdiskPetr Uzelの答えで示唆されているように使用するか、このバリアント:

# Save MBR disks
sfdisk -d $source > /partitions-backup-$(basename $source).sfdisk
sfdisk -d $dest   > /partitions-backup-$(basename $dest).sfdisk

# Copy $source layout to $dest
sfdisk -d $source | sfdisk $dest

GPTディスクの場合

正しい答えを与えたここここクリス・ハーパー

GPT fdiskが必要です。見てくださいダウンロードページまたは実行sudo apt-get install gdisk

次に、sgdiskコマンドを使用します。

# Save MBR disks
sgdisk --backup=/partitions-backup-$(basename $source).sgdisk $source
sgdisk --backup=/partitions-backup-$(basename $dest).sgdisk $dest

# Copy $source layout to $dest and regenerate GUIDs
sgdisk --replicate=$dest $source
sgdisk -G $dest

最後のコマンドは、ディスクとすべてのパーティションのGUIDをランダム化します。これは、同じマシンでディスクを使用する場合にのみ必要です。それ以外の場合は不要です。


10
私は常に2つのパラメーターを混在させるのが怖いので、良いトリックは--backup=Fileソースドライブからパーティションテーブルをエクスポート--load-backup=Fileし、宛先ドライブに復元することです。
zidarsk8 14

上記で説明したように、パーティションテーブルを移動し、ディスクとパーティションのGUIDをランダム化すると、ディスクと後続のパーティション上の既存のデータにリスクがありますか?ありがとう!
EngBIRD

@EngBIRD:$ sourceと$ destを混同しない限り、宛先にデータがないため、データにリスクはありません。パーティションレイアウトをコピーするだけで、後でデータをフォーマットしてコピーする必要があります。
mivk

私は尋ねた理由は...私は約2枚のディスクを交換しています、空のディスクから始めていないよ、実際にある
EngBIRD

5

古いが、まだ興味深いPypartedおよびpython-lvmバインディング。

更新:

上記はsfdiskのmanページごとに多くの最新の状況で機能しないために投稿されました。

sfdiskはGUIDパーティションテーブル(GPT)を理解せず、大きなパーティション用に設計されていません。特に、より高度なGNU parted(8)を使用してください。

ただし、このコマンドは2 TBを超えるパーティションとLVMをサポートしています。

# parted -ms /dev/sda print > sda.parted

サンプル出力:

BYT;
/dev/sda:12.9GB:scsi:512:512:msdos:VMware Virtual disk;
1:1049kB:12.9GB:12.9GB:::boot, lvm;

14
保存したsda.partedファイルから新しいディスクにどのように復元しますか?
エイブリーチャン

4
質問はパーティションレイアウトを新しいドライブにコピーすることに関するものだったため、この答えは役に立ちません。答えは単にダンプすることです。インポート方法 改善してください。
itsafire

どうやらこの時点では、何の良い答えはありません。serverfault.com/questions/709582/...
Otheus
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.