web-dev-qa-db-ja.com

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

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

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が残りの処理を実行します。すべてを(場合によっては)空のディスクに戻し、それによって同じレイアウトを復元できるようにする必要があることを覚えておいてください。 fdiskpartedなどのパーティション分割ツールを使用することは問題ありませんが、それらの使用(スクリプト)を自動化できなければならず、X関連のパッケージに依存しないようにする必要があります-コマンドラインのみ。

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

86

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

セーブ:

sfdisk -d /dev/sda > part_table

戻す:

sfdisk /dev/sda < part_table

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

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

92
Petr Uzel

依存するソースディスクが [〜#〜] mbr [〜#〜] (aka "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ディスクの場合

petr Uzelの回答で示唆されているようにsfdiskまたは次のバリアントを使用します。

# 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ディスクの場合

正しい答えは here および hereKris Harper によって与えられました。

GPT fdisk が必要です。 ダウンロードページ を確認するか、Sudo apt-get install gdiskを実行します。

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

# Save GPT 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をランダム化します。これは、ディスクが同じマシンで使用される場合にのみ必要です。それ以外の場合は不要です。

54
mivk

古いが、それでも興味深い 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;
5
dhchdhd