GPTパーティションスキームをあるハードドライブから別のハードドライブにすばやくコピーするにはどうすればよいですか?


79

非GPTパーティションテーブルで私ができる

sfdisk -d /dev/sda | sfdisk /dev/sdb

ただし、sfdiskGPTパーティションテーブルはサポートしていません。代わりに何を使用できますか?

GNU partedを使用してパーティションサイズを出力し、手動で再度作成するだけでなく、1つまたは2つのコマンドソリューションを探しています。


2
util-linuxパーティショニングツール(を含むsfdisk)は、util-linux 2.26のGPTサポートを含むように書き直されました。 ただし、1MiBの前に小さなブートパーティションを配置することはサポートされていないというsfdisk点で異なりgdiskます。そのため、私の構成で詰まりました。(バグは既にアップストリームに報告されています。)
Peter Cordes

sfdisk -dに加えて、MBRディスクをより小さいディスクにクローンするとき、ダンプを編集し、開始/終了セクターを変更します。GPTディスクのsgdiskでこれを行うにはどうすればよいですか?-Rは中間バックアップファイルなしでクローンを作成し、-bはバイナリバックアップを作成しますが、sfdiskのように人間が読み取り/編集することはできません!
Costin Gușă

これに関する更新:sfdiskは、GPTに続く1MBで終わる小さなブートパーティションを含む、この方法で使用するときに指定したものを受け入れるようになりました。 unix.stackexchange.com/a/12988/79808
ピーター

どうdd if=/dev/sda of=/dev/sdb
juniorRubyist

回答:


122

Ubuntu Universeリポジトリで利用可能なgdiskをインストールします。

次に、sgdiskコマンド(こちらのmanページ)を使用してパーティションテーブルを複製します。

sgdisk /dev/sdX -R /dev/sdY 
sgdisk -G /dev/sdY

最初のコマンドは、パーティションテーブルをsdXtoにコピーしますsdY(これらを混同しないように注意してください)。2番目のコマンドは、ディスクとすべてのパーティションのGUIDをランダム化します。これは、同じマシンでディスクを使用する場合にのみ必要です。それ以外の場合は不要です。


9
この情報は、故障したRAID-1ディスクを交換したい人にとっては重要です。ありがとう!
クリスチャン

@Christian Yep、それが私がそれを使用した理由です。
クリスハーパー

9
任意の破壊的な変更を行う前に、使用してバックアップを取るようにしてください:sgdisk --backup=/some/safe/location/sdX.gpt /dev/sdXsgdisk --backup=/some/safe/location/sdY.gpt /dev/sdY
マイケルKropat

11
このコマンドは機能しますが、例ではドライブの順序が逆になっていることに注意してください。これを書くより明白な方法はsgdisk /dev/sdX -R /dev/sdY
ジェフリー

2
@KrisHarper:確かにそうですが、プログラムはgetoptを使用してコマンドライン引数を解析するため、順序は不必要になりません。マニュアルページを更新する必要があります。
ジェフリー

28

試しましたが、うまくいきませんでした。私が見つけた解決策は次のとおりです。

sgdisk --backup=table /dev/sda
sgdisk --load-backup=table /dev/sdb
sgdisk -G /dev/sdb

非GPTで動作するため、このソリューションの方が優れていることがわかりました。また、最後のコマンドを次のように変更します。sgdisk -g / dev / sdb
Locke

1
上記は機能しますが、例が少し逆になっているという事実に注意する必要があります(ただし正しい)。sgdisk /dev/sdX -R /dev/sdYより明白です。
ジェフリー

5
最初にバックアップしてから復元します。これはより直感的であり、ドライブを混在させる機会が少ないことがわかりました。
Csq

8
dd if=/dev/sda of=GPT_TABLE bs=1 count=A
dd if=GPT_TABLE of=/dev/sdb bs=1 count=A
partprobe /dev/sdb

Aは次のとおりです。

A=(128*B)+1024
B=parted -ms /dev/sda print |tail -1|cut -b1

1
また、これはすべてのディスクとパーティションのGUIDを複製しますが、これらは必要なものではない場合があります。また、ディスクの最後にバックアップテーブルをインストールしません。
goertzenator

私はこの方法が好きです!しかし、書くことを好む:sed '$s/:.*//p;d'代わりにtail -n1 | cut -b1、9つ以上のパーティションがある場合、これは失敗するので!
F. HAURI

1
@goertzenatorそのとおりです。これは通常の partedツールを実行し、何かを行う(設定解除フラグをに設定するなどno)ことで、両端のパーティションテーブルが書き換えられます。
F.ハウリ

B上のセクションで使用したことはありませんか?
アーロンフランケ

Bは、Aを把握するために使用される値である
dodexahedron

2

私はsgdiskで複製を試みましたが、うまく動作します-readline構文規則に従う必要があります:

   sgdisk --replicate=/dev/target /dev/source

または

   sgdisk -R/dev/target /dev/source

そしてすべてが動作します。


3
これがまさに私の答えです。
クリスハーパー

-1

これに対する最も簡単な答えは:

sudo sfdisk -d /dev/sda | sudo  sfdisk /dev/sdb --force

Aの「良好な」パーティションテーブル構成を交換用ドライブB(新しいドライブ)にコピーします。


これがオプションではない理由を説明する質問の一部を見逃しました。
DavidW

2
あなたの答えはない動作しないためGPTだけのために非GPT
月のDev

これの現在のバージョンでsfdiskは動作します。
ゲルトファンデンバーグ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.