Как я могу быстро скопировать схему разделов GPT с одного жесткого диска на другой?

79

На таблицу разделов не GPT я могу сделать

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

Но sfdiskне поддерживает таблицы разделов GPT. Что я могу использовать вместо этого?

Я ищу решение с одной или двумя командами, а не просто с помощью GNU parted для вывода размеров разделов и последующего их ручного создания.

Крис Харпер
источник
2
Инструменты разбиения util-linux (в том числе sfdisk) были переписаны, чтобы включить поддержку GPT для util-linux 2.26. sfdiskотличается от того, gdiskчто он не поддерживает установку небольшого загрузочного раздела до 1 МБ, поэтому он забил мою конфигурацию. (сообщение об ошибке уже сообщалось вверх по течению.)
Питер Кордес
Когда я клонирую MBR-диск на меньший диск, в дополнение к sfdisk -d я также редактирую дамп и изменяю начальный / конечный секторы. Как мне сделать это с sgdisk для дисков GPT? -R клонирует без промежуточного файла резервной копии и -b создает бинарную резервную копию, не читаемую / редактируемую человеком, как это делает sfdisk!
Костин Гуцэ
Обновление об этом: теперь sfdisk принимает все, что вы ему даете, когда используете этот способ, включая небольшой загрузочный раздел после GPT, заканчивающийся на 1 МБ. unix.stackexchange.com/a/12988/79808
Питер Кордес
Как насчет dd if=/dev/sda of=/dev/sdb?
juniorRubyist

Ответы:

122

Установите gdisk, который доступен в репозиториях Ubuntu Universe.

Затем используйте sgdiskкоманду ( man-страницу здесь ) для репликации таблицы разделов:

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

Первая команда копирует таблицу разделов sdXв sdY(чтобы не перепутать). Вторая команда рандомизирует GUID на диске и всех разделах. Это необходимо только в том случае, если диски должны использоваться на одном компьютере, в противном случае это не нужно.

Крис Харпер
источник
9
Эта информация полезна для всех, кто хочет заменить неисправный диск RAID-1. Спасибо!
Кристиан
@ Кристиан Да, для этого я и использовал.
Крис Харпер
9
Прежде чем вносить какие-либо деструктивные изменения, обязательно сделайте резервную копию: sgdisk --backup=/some/safe/location/sdX.gpt /dev/sdXandsgdisk --backup=/some/safe/location/sdY.gpt /dev/sdY
Michael Kropat
11
Эта команда работает, но следует отметить, что в этом примере порядок приводов обратный. Более очевидный способ написать этоsgdisk /dev/sdX -R /dev/sdY
Джеффри
2
@KrisHarper: Это действительно так, но поскольку программа использует getopt для разбора аргументов командной строки, порядок приседаний не имеет значения. Страница man должна быть обновлена.
Джеффри
28

Я пытался, и это не сработало для меня. Решение, которое я нашел:

sgdisk --backup=table /dev/sda
sgdisk --load-backup=table /dev/sdb
sgdisk -G /dev/sdb
Серафин Русу
источник
Я нашел это решение лучше, потому что оно может работать с не-GPT. Я также изменяю последнюю команду на: sgdisk -g / dev / sdb
Локк
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=(128*B)+1024
B=parted -ms /dev/sda print |tail -1|cut -b1
Petroff
источник
1
Это также клонирует все идентификаторы GUID дисков и разделов, которые могут не соответствовать вашим ожиданиям. Кроме того, он не устанавливает таблицу резервных копий в конце диска.
goertzenator
Мне нравится этот способ! но предпочитайте писать: sed '$s/:.*//p;d'вместо этого, tail -n1 | cut -b1поскольку это не удастся, если у вас более 9 разделов!
Ф. Хаури
1
@goertzenator Вы правы, для этого вы можете запустить обычный parted инструмент, сделать что-то (например, установить любой неустановленный флаг no), это переписает таблицу разделов на обоих концах!
Ф. Хаури
Вы никогда не использовали Bв верхнем разделе?
Аарон Франке
B - это значение, используемое для определения A.
Додексаэдр
2

Я только что попробовал репликацию с sgdisk, и она отлично работает - нужно просто следовать правилам синтаксиса readline:

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

или же

   sgdisk -R/dev/target /dev/source

и все работает.

al3xxx
источник
3
Это именно то, что говорит мой ответ.
Крис Харпер
-1

Самый простой ответ на это:

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

скопировать «хорошую» конфигурацию таблицы разделов A на диск B замены (который является новым диском).

Тони Дойл
источник
Вы пропустили ту часть вопроса, которая объясняет, почему это невозможно.
DavidW
2
Ваш ответ не работает для GPT только для не-GPT
Ян Дев
На текущей версии sfdiskэто работает.
Герт ван ден Берг