从命令行删除所有分区


40

如何从Linux(特别是Ubuntu)的命令行中删除设备上的所有分区?我尝试查看fdisk,但它显示了一个交互式提示。我正在寻找一个命令,我可以给它一个设备路径(例如/ dev / sda),它将删除ext4,linux-swap及其找到的任何其他分区。本质上,这与打开GParted并手动选择并删除所有分区的情况相同。这似乎很简单,但不幸的是,我无法通过Google找到任何东西。

Answers:


44

这样就足够了吗?

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

4
这不会删除分区。通过删除分区,他打算保留MBR并仅清空分区表。
Mircea Vutcovici 2011年

2
不,这似乎完全可以满足我的需求。我真的不在乎数据是否仍然存在。GParted显示运行此命令后分区已消失,这就是我想要的。
Cerin

Mircea Vutcovici并不是在谈论您的数据,而是在谈论MBR中的引导程序代码。现在已经消失了,因为您已经将其与MBR样式分区表中的4个主要条目一起删除了。
JdeBP

1
不要忘记卸载驱动程序,否则它将无法工作。
OrangeTux 2013年

如果您在驱动器上使用ZFS并将其重新用于其他用途,那么这也很好用。标准的Windows或Linux分区和格式都不会摆脱上面的ZFS标签,而这可能会引起重大问题。
托尼·马洛

32

wipefs程序使您可以轻松删除分区表签名:

wipefs -a /dev/sda

man wipefs

wetfs可以擦除指定设备上的文件系统,raid或分区表签名(魔术字符串),从而使libblkid看不见签名。

wetfs不会擦除文件系统本身或设备中的任何其他数据。当不带任何选项使用时,wipefs会列出所有可见的文件系统及其基本签名的偏移量。

当擦除分区表签名以将更改通知内核时,wipefs调用BLKRRPART ioctl。


12

快速而肮脏:用于gparted删除分区,或者如果您急的话:

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

这将使驱动器的MBR丢失(数据仍然完整)。

或者:

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

擦除整个驱动器(对所有内容写入一次零。不是“安全”但通常就足够了),或使用“磁盘粉碎机”工具进行安全擦除。


7

请参阅man sfdisk,这是fdisk的非交互式变体。除此之外,您可以像pk所写的那样用dd删除整个分区表。


6

您也应该也可以使用parted,尽管这可能涉及一些脚本来遍历分区。


3

如果我们谈论的是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

在这里,由于主分区表由4个16字节分区条目组成,总共64字节,因此我们告诉dd写入64个块(或字节,由于我们的bs=1参数)。

寻求= 446

MBR中的主分区表(因此,这里不谈论GPT)位于446字节中,因此我们指示dd在写入之前先查找446字节。

扩展分区通常是通过使用主分区插槽指向扩展分区表来创建的,因此,如果我们擦除4个主分区,我们也将有效地擦除扩展分区表。操作系统将无法找到它,因此它将无法读取和解释它。(如果要擦除扩展分区表,则需要了解有关操作系统的更多信息;不同的操作系统以不同的方式进行扩展分区。)


2

我想做同样的事情(在Slackware 14.2中除外),但是发现我无法实现此处提出的大多数解决方案,因为最详尽,文档最详尽的解决方案为制作替换分区带来了新问题。那删除了分区,但是某些分区软件显然自动找到了分区备份。

我发现f3probe(http://oss.digirati.com.br/f3)解决了使用大容量驱动器快速,轻松地删除所有分区的问题,并创建了一个覆盖整个驱动器的精确分区,这很容易删除。

从那里以简单明了的方式创建新分区也很容易。

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....

0

使用改进的非交互式版本的fdisk,即sfdisk

要擦除分区表,请使用以下命令:

sfdisk --delete /dev/sda
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.