Удаление всех разделов из командной строки

Как удалить все разделы на устройстве из командной строки в Linux (в частности, в Ubuntu)? Я попытался посмотреть на fdisk, но он представляет интерактивную подсказку. Я ищу одну команду, которую я могу указать путь к устройству (например, /dev/sda), и он удалит ext4, linux-swap и все остальные разделы, которые он найдет. По сути, это было бы так же, как если бы я должен был открыть GParted, а также вручную выбрать и удалить все разделы. Это кажется довольно простым, но, к сожалению, я не смог найти что-либо через Google.

9 ответов

Решение

Будет ли этого достаточно?

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

wipefs Программа позволяет легко удалить подпись таблицы разделов:

wipefs -a /dev/sda

От man wipefs

wipefs может стереть подписи файловой системы, raid или таблицы разделов (магические строки) с указанного устройства, чтобы сделать подписи невидимыми для libblkid.

wipefs не удаляет ни файловую систему, ни другие данные с устройства. При использовании без каких-либо параметров, wipefs перечисляет все видимые файловые системы и смещения их основных сигнатур.

wipefs вызывает BLKRRPART ioctl, когда стирает подпись таблицы разделов, чтобы сообщить ядру об изменении.

Быстро и грязно: используйте gparted удалить разделы, или если вы спешите:

dd if=/dev/zero of=/dev/[disk device] bs=512 count=1

Это уничтожит MBR диска (данные все еще не повреждены).

В качестве альтернативы:

dd if=/dev/zero of=/dev/[disk device]

чтобы стереть весь диск (записать один проход нулей поверх всего. Не "безопасный", но обычно достаточно хороший), или использовать инструмент "дисковый шредер" для безопасного стирания.

Используйте улучшенную неинтерактивную версию fdisk, которая является sfdisk

Чтобы удалить таблицу разделов, используйте эту команду:

sfdisk --delete /dev/sda

Увидеть man sfdisk, который является неинтерактивным вариантом fdisk. Кроме этого, вы можете удалить всю таблицу разделов с помощью dd, как написал pk.

Вы должны быть в состоянии использовать parted для этого, но это может потребовать некоторых сценариев для циклического прохождения разделов.

Если мы говорим о разделах в стиле MBR...

dd if=/dev/zero of=/dev/[disk device] bs=1 count=64 seek=446 conv=notrunc

Объяснение:

dd

Эта стандартная команда копирует байты из источника и записывает их в место назначения. Это самый простой гибкий инструмент для этой работы.

if=/dev/zero

Здесь мы указываем, что мы читаем из /dev/zero, которое является специальным устройством, которое излучает NUL байт - нули.

of=/dev/[disk device]

Здесь мы указываем, на какое устройство мы пишем.

bs=1

dd думает с точки зрения блоков. Размер блока по умолчанию может быть 512 байт, 1024 байт или 4096 байт, в зависимости от вашей системы. Тем не менее, мы должны обратиться к вещам более точно, поэтому мы говорим dd использовать размер блока 1 байт.

кол =64

Здесь мы говорим dd записать 64 блока (или байтов, из-за нашего bs=1 параметр), так как основная таблица разделов состоит из 4 16-байтовых записей разделов, в общей сложности 64 байта.

искать =446

Основная таблица разделов в MBR (так что, не говоря уже о GPT) находится в 446 байтах, поэтому мы инструктируем dd искать 446 байт перед записью.

Расширенные разделы обычно создаются с использованием основного слота раздела, чтобы указывать на расширенную таблицу разделов, поэтому, если мы удалим 4 основных раздела, мы также эффективно очистим расширенную таблицу разделов; ОС не сможет найти его, поэтому не сможет прочитать и интерпретировать его. (Если вы хотите стереть расширенную таблицу разделов, вам нужно больше узнать об операционной системе; разные операционные системы делают расширенные разделы по-разному.)

Я хотел сделать то же самое (за исключением Slackware 14.2), но обнаружил, что не могу повлиять на большинство предложенных здесь решений, поскольку наиболее тщательно продуманное и хорошо документированное решение создает новые проблемы для создания замещающих разделов. Это привело к удалению раздела, но некоторые программы создания разделов, очевидно, автоматически находили резервные копии разделов.

Я обнаружил, что f3probe ( http://oss.digirati.com.br/f3) решил проблему быстрого и простого удаления всех разделов, работы с дисками большой емкости и создал ровно 1 раздел, охватывающий весь диск, что было легко удалить.

Оттуда также было легко создавать новые разделы прямым способом.

т.е.

f3probe --destructive --time-ops /dev/sdb
# Now we know only 1 partition exists on /dev/sdb
#    which is /dev/sdb1
#
# Unmount that partition
umount /dev/sdb1

#
# Delete that single partition
parted /dev/sdb rm 1

#
# Now you can create new partitions
# i.e. parted /dev/sdb mkpart primary fat32 1049K 15.8G
# 
# Update /etc/fstab before rebooting....

Использование gparted из petalinux на EMMC для меня было

      parted /dev/mmcblk0 --script mklabel msdos

Здесь соответствующий вывод справки

      # parted /dev/mmcblk0 --script help mklabel      
  mklabel,mktable LABEL-TYPE               create a new disklabel[ 6897.473870]  mmcblk0:
 (partition table)

        LABEL-TYPE is one of: aix, amiga, bsd, dvh, gpt, mac, msdos, pc98, sun, loop

Кстати: относительноwipefs -a /dev/sda(и, возможно, некоторые другие решения здесь)

Использование этих команд типаparted /dev/mmcblk0 --script mkpart primary fat32 1MiB 2049MiBдля меня потерпеть неудачу сError: /dev/mmcblk0: unrecognised disk label. Команда mklabel gparted «исправляет» это состояние, соответственно. Кажется, это хорошая подготовка к следующим шагам.

См. также https://unix.stackexchange.com/questions/200582/scripteable-gpt-partitions-using-parted .

Другие вопросы по тегам