从命令行删除所有分区

如何从Linux(特别是Ubuntu)上的命令行中删除设备上的所有分区? 我试着看fdisk,但它提出了一个交互式的提示。 我正在寻找一个单一的命令,我可以给一个设备path(例如/ dev / sda),它会删除ext4,linux-swap和其他任何分区。 基本上,这将是一样的事情,如果我打开GParted,并手动select和删除所有分区。 这似乎相当简单,但不幸的是,我一直无法通过谷歌find任何东西。

这足够吗?

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

快速和肮脏:使用gparted删除分区,或者如果你赶时间:

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

这将打乱驱动器的MBR(数据仍然完好)。

或者:

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

擦写整个驱动器(写一个零遍遍的一遍,不是“安全的”,但通常足够好),或者使用“磁盘碎化器”工具进行安全擦除。

你应该可以使用parted这个as well,尽pipe这可能涉及到一些脚本来遍历分区。

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

 wipefs -a /dev/sda 

man wipefs

擦除可以擦除指定设备上的文件系统,RAID或分区表签名(魔术string),使签名对libblkid不可见。

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

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

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

如果我们正在讨论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字节的分区条目组成,所以我们告诉dd写64个块(或字节,因为我们的bs=1参数),总共64个字节。

寻求= 446

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

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