Jak mogę szybko skopiować schemat partycji GPT z jednego dysku twardego na inny?

79

Na tabeli partycji innej niż GPT mogę to zrobić

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

Ale sfdisknie obsługuje tablic partycji GPT. Czego mogę zamiast tego użyć?

Szukam rozwiązania z jedną lub dwiema komendami, nie tylko przy użyciu GNU parted do wyświetlania rozmiarów partycji, a następnie ręcznego tworzenia ich ponownie.

Kris Harper
źródło
2
Narzędzia do partycjonowania util-linux (w tym sfdisk) zostały przepisane i zawierają obsługę GPT dla util-linux 2.26. sfdiskróżni się gdisktym, że nie obsługuje wstawiania małej partycji rozruchowej przed 1MiB, więc dusił się w mojej konfiguracji. (błąd został już zgłoszony wcześniej).
Peter Cordes
Kiedy klonuję dysk MBR na mniejszy dysk, oprócz sfdisk -d edytuję zrzut i modyfikuję sektory początkowe / końcowe. Jak to zrobić za pomocą sgdisk dla dysków GPT? -R klonuje bez pośredniego pliku kopii zapasowej i -b tworzy kopię binarną, nie do odczytu / edycji przez człowieka jak robi to sfdisk!
Costin Gușă
zaktualizuj to: sfdisk akceptuje teraz wszystko, co dasz, gdy jest używany w ten sposób, w tym małą partycję rozruchową po GPT, kończącą się na 1 MB. unix.stackexchange.com/a/12988/79808
Peter Cordes
Jak o dd if=/dev/sda of=/dev/sdb?
juniorRubyist

Odpowiedzi:

122

Zainstaluj gdisk, który jest dostępny w repozytoriach Ubuntu Universe.

Następnie użyj sgdiskpolecenia ( tutaj strona man ), aby zreplikować tablicę partycji:

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

Pierwsze polecenie kopiuje tablicę partycji sdXdo sdY(uważaj, aby ich nie pomieszać). Drugie polecenie losowo GUID na dysku i wszystkich partycjach. Jest to konieczne tylko wtedy, gdy dyski mają być używane na tym samym komputerze, w przeciwnym razie nie jest to konieczne.

Kris Harper
źródło
9
Te informacje są złote dla każdego, kto chce wymienić uszkodzony dysk RAID-1. Dzięki!
Christian
@Christian Yep, właśnie do tego użyłem.
Kris Harper
9
Przed dokonaniem jakichkolwiek destrukcyjnych zmian koniecznie wykonaj kopię zapasową za pomocą: sgdisk --backup=/some/safe/location/sdX.gpt /dev/sdXisgdisk --backup=/some/safe/location/sdY.gpt /dev/sdY
Michaela Kropata
11
To polecenie działa, ale należy zauważyć, że w tym przykładzie kolejność dysków jest odwrotna. Bardziej oczywistym sposobem na napisanie tego jestsgdisk /dev/sdX -R /dev/sdY
Geoffrey
2
@KrisHarper: Rzeczywiście tak jest, ale ponieważ program używa getopt do analizowania argumentów wiersza poleceń, kolejność nie ma znaczenia. Strona podręcznika powinna zostać zaktualizowana.
Geoffrey,
28

Próbowałem i to nie działało dla mnie. Znalazłem rozwiązanie:

sgdisk --backup=table /dev/sda
sgdisk --load-backup=table /dev/sdb
sgdisk -G /dev/sdb
Serafin Rusu
źródło
Odkryłem, że to rozwiązanie jest lepsze, ponieważ może współpracować z non-GPT. Zmieniam również ostatnie polecenie na: sgdisk -g / dev / sdb
Locke
1
Powyższe działa, należy zwrócić uwagę na fakt, że przykład jest nieco wstecz (choć poprawny). sgdisk /dev/sdX -R /dev/sdYjest bardziej oczywiste.
Geoffrey,
5
Najpierw wykonaj kopię zapasową, a następnie przywróć. Uważam, że jest to bardziej intuicyjne i mniej szansa na pomieszanie dysków.
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

gdzie A jest:

A=(128*B)+1024
B=parted -ms /dev/sda print |tail -1|cut -b1
Petroff
źródło
1
Spowoduje to również klonowanie wszystkich identyfikatorów GUID dysków i partycji, które mogą nie być odpowiednie. Ponadto nie instaluje tabeli kopii zapasowych na końcu dysku.
goertzenator,
Lubię to! ale wolę pisać: sed '$s/:.*//p;d'zamiast tail -n1 | cut -b1tego nie powiedzie się, jeśli masz więcej niż 9 partycji!
F. Hauri
1
@goertzenator Masz rację, w tym celu możesz uruchomić zwykłe parted narzędzie, zrobić coś (na przykład ustawić dowolną flagę unset na no), spowoduje to ponowne zapisanie tablicy partycji na obu końcach!
F. Hauri
Nigdy nie używałeś Bw górnej części?
Aaron Franke,
B jest wartością używaną do
ustalenia
2

Właśnie próbowałem replikacji z sgdisk i działa dobrze - wystarczy przestrzegać reguł składni readline:

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

lub

   sgdisk -R/dev/target /dev/source

i wszystko działa.

al3xxx
źródło
3
Tak właśnie mówi moja odpowiedź.
Kris Harper
-1

Najprostsza odpowiedź na to:

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

aby skopiować „dobrą” konfigurację tablicy partycji A na dysk zastępczy B (który jest nowym dyskiem).

Tony Doyle
źródło
Pominąłeś część pytania, która wyjaśnia, dlaczego nie jest to opcja.
DavidW
2
Twoja odpowiedź nie działa w przypadku GPT tylko w trybie innym niż GPT
Jan Dev
W obecnej wersji sfdiskto działa.
Gert van den Berg,