Очистить устройство хранения Linux с помощью sgdisk

890
Luis Lavaire

Я хочу использовать sgdisk для удаления всех определений разделов и данных с устройства хранения, а затем создать GPT и два раздела на нем. Лучшее решение, которое я нашел, чтобы использовать -Zи те -oварианты.

sgdisk -Zo \ -n 1::16M -t 1:EF00 -c 1:ZNX_BOOT \ -N 2 -t 2:8300 -c 2:ZNX_DATA /dev/[device] 

Это, однако, дает сбой, если диск был создан с таблицей разделов MBR или если на него был записан образ диска. Как я могу заставить эту команду стереть любой диск независимо от используемого на нем стиля таблицы разделов?

4

3 ответа на вопрос

3
Anon

Я знаю, что это меняет вопрос, но возможно ли для вас использовать wipefs(что входит в util-linuxпакет)? wipefsпонимает, как очистить все виды метаданных раздела (ing) и правильно избавится от MBR, GPT (вместе с резервным GPT), сигнатур файловой системы и т. д.

Примеры из раздела ПРИМЕРЫ внизу wipefsстраницы руководства иллюстрируют, как вы можете это сделать:

wipefs /dev/sda*

Печатает информацию о sda и всех разделах на sda.

wipefs --all --backup /dev/sdb

Удаляет все подписи с устройства /dev/sdbи создает файл резервной копии подписи ~/wipefs-sdb-<offset>.bakдля каждой подписи.

ВНИМАНИЕ : Как следует из названия, wipefs уничтожает данные ! Пожалуйста, будь осторожен...

Как насчет его производительности? @ K7AAY предложил `dd`, но это слишком медленно. Если это так же быстро (или, по крайней мере, похоже), как `sgdisk`, то я мог бы рассмотреть возможность его использования. Luis Lavaire 6 лет назад 0
@ luis-lavaire Я поражен тем, что `dd` над одним сектором (при условии 512-байтовых секторов) диска медленен - ​​это в значительной степени самая маленькая операция записи, которую может выполнить диск! Я предполагаю, что что-то еще не так, если это действительно было медленно (например, `count = 1` был отключен). Я полагаю, вы могли бы использовать `bs = 4k oflag = direct count = 1` и посмотреть, поможет ли это ... Тем не менее, чтобы ответить на ваш вопрос: по моему опыту` wipefs` заканчивается менее чем за секунду (но `dd` из ответ должен был сделать тоже самое). Anon 6 лет назад 1
Нет, я имел в виду, что стирание всего диска с помощью `dd` идет медленно. Luis Lavaire 6 лет назад 0
@ luis-lavaire, это правда, но это не то, что предлагает «dd». `bs = 512` означает, что каждая запись составляет всего 512 байт, а` count = 1` означает, что до завершения `dd` будет сделана только одна запись, поэтому она по существу очищает только первые 512 байт вашего диска, так что` dd` будет не будь медленным Полный `dd` диска действительно очень медленный (и если вы когда-либо собираетесь делать это с` dd`, я настоятельно рекомендую сделать `bs` 1M или выше). В любом случае, `wipefs` намного быстрее, чем полный` dd` диска :-) Anon 6 лет назад 0
Ну, я также попытался очистить заголовки GPT / MBR, используя `dd` (используя` bs = 512 count = 1`). Но мне нужно очистить ВСЕ данные на устройстве, а не только заголовки. Luis Lavaire 6 лет назад 0
Технически вам нужно всего лишь удалить разделы и сигнатуры файловой системы, чтобы предотвратить случайное повторное обнаружение (и помните, что GPT создает резервную копию себя в конце диска, поэтому `dd` только начала диска никогда не бывает достаточно, когда вы используя его - вам бы тоже пришлось немного доделать). Если вы действительно имеете в виду «Мне нужны ВСЕ данные в любом месте на диске, уничтоженном», тогда да, вам придется использовать `dd` (или какую-либо другую команду« перезаписать »все), а использовать` sgdisk` будет недостаточно. Бонус: вы используете `sgdisk` в zap и режиме создания, так что вы меняете только метаданные ... Anon 6 лет назад 0
Не совсем. Я использую опцию `--zap-all`, которая должна очистить все данные на устройстве (включая) заголовки. Luis Lavaire 6 лет назад 0
Вы по-прежнему только удаляете метаданные: `-Z, --zap-all Zap (уничтожить) структуры данных GPT и MBR и затем выйти`. Если бы вы использовали `dd` в начале ** и ** конца диска или если бы вы использовали` wipefs`, вы бы достигли того же эффекта. Anon 6 лет назад 0
Ну, руководство фактически рекомендует использовать `-Z` вместо` -o` (`-o` означает очистить все данные раздела), а затем разделить устройство как обычно. Что я не могу понять, так это то, почему он не работает с некоторыми устройствами. Например, если вы создаете загрузочный оперативный USB-порт и затем запускаете `sgdisk -Z DEVICE`, устройство все равно сохранит метку образа ISO. Luis Lavaire 6 лет назад 0
`-Z`` sgdisk` также уничтожит разбиение MBR и / или любые поврежденные данные в дополнение к разделам GPT: «Запрет (уничтожение) данных GPT ** и MBR **». Что касается вашего USB-диска ... это зависит от того, где вы находите этот ярлык. Возможно, эта метка является частью файловой системы, которую вы создаете / копируете на диск? Anon 6 лет назад 0
После того, как я запустил `sgdisk -Z` на устройстве; если я проверю это с помощью `blkid`, я все еще смогу увидеть метку файловой системы ISO (которая является частью ISO-образа, который был записан на устройство). Luis Lavaire 6 лет назад 0
Хммм, `blkid`, вероятно, рушится, потому что файловые системы UDF часто не находятся внутри разделов. https://github.com/karelzak/util-linux/blob/e4386c8cc0f7f2cfb09781d963b353310a3cd93a/libblkid/src/superblocks/udf.c#L177 показывает процедуру. Я упоминал, что `wipefs` также хорош в удалении сигнатур файловой системы? :-) Он даже использует `blkid` (https://github.com/mmalecki/util-linux/blob/5fdd35070ceb79589d52fa247d1b359bd2bdc471/misc-utils/wipefs.c#L33) ... Anon 6 лет назад 1
Итак, как бы я использовал `wipefs` для достижения того, чего я хочу? Luis Lavaire 6 лет назад 0
Ознакомьтесь с разделом ПРИМЕРЫ в нижней части справочной страницы - http://manpages.ubuntu.com/manpages/bionic/man8/wipefs.8.html#examples - в котором показаны примеры пробных прогонов и фактически выполняется `wipefs` реальные действия. Anon 6 лет назад 0
Можете ли вы пожалуйста [добавить еще один ответ | редактировать свой ответ], чтобы я мог принять это? `wipefs` работал так же, как предполагалось. ;) Luis Lavaire 6 лет назад 1
Ответ лучше сейчас? Ох, и спасибо за настойчивость :-) Anon 6 лет назад 1
2
K7AAY

Полагаю, я не вижу способа сделать это исключительно в sgdisk, но, к счастью, любезные ребята из Virtualhelp.me предложили сначала использовать dd, т.е.

dd if=/dev/zero of=/dev/sda bs=512 count=1 

который предназначен для перезаписи того надоедливого раздела носителя MBR, который выбрасывает и sgdisk, и gdisk для цикла.

Да, я знаю о `dd`. Недостатком является то, что это очень медленно. Вот почему я предпочитаю gdisk. Luis Lavaire 6 лет назад 1
Понял, но так как обзор man sqdisk и man gdisk показал, что они не могут иметь дело с разделами-носителями MBR, подумал, что я предложу то, что смогу. EFI так намного лучше, чем MBR, я смущаюсь каждый раз, когда кто-то говорит, что им не нужен EFI ... K7AAY 6 лет назад 0
Я предполагаю, что возможно используя `while! sgdisk -v / dev / device; делать сгдиск -Z; done` мог выполнить задачу. И я согласен с вами, что GPT намного лучше, чем MBR. Luis Lavaire 6 лет назад 1
Обратите внимание, что если вы должны использовать `dd` для очистки GPT-разделов, вам нужно удалить первые 20 Кбайт с начала ** И ** конца диска. См. Https://serverfault.com/a/787210/203726 для получения подробной информации (также см. Https://en.wikipedia.org/wiki/GUID_Partition_Table). Anon 6 лет назад 3
0
Luis Lavaire

Эти команды сделали работу:

wipefs -af $DEVICE  sgdisk -Z \ -n 1::132M -t 1:EF00 -c 1:ZNX_BOOT \ -N 2 -t 2:8300 -c 2:ZNX_DATA $DEVICE 

Команда firs очищает метаданные раздела, а вторая очищает данные.

Похожие вопросы