如何使用脚本从命令行重置硬盘(删除多个分区和删除分区)而无需重新启动?

要从干净的状态开始,我需要将硬盘从命令行重置为空状态。

这不是关于运行擦除实用程序,数据不必被覆盖。

这个问题与从命令行删除所有分区非常相似

那里的解决scheme工作得很好,

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

但是如果我想用这样一个覆盖的磁盘,我得到错误,该设备仍在使用中。

 root@grml ~ # blockdev --rereadpt /dev/sda BLKRRPART: Device or resource busy 

要么

 root@grml ~ # partprobe Error: Partition(s) 2, 3 on /dev/sda have been written, but we have been unable to inform the kernel of the change, probably because it/they are in use. As a result, the old partition(s) will remain in use. You should reboot now before making further changes. Error: Partition(s) 2, 3 on /dev/sdb have been written, but we have been unable to inform the kernel of the change, probably because it/they are in use. As a result, the old partition(s) will remain in use. You should reboot now before making further changes. 

所以我必须手动禁用设备上“所有”的所有内容

 umount /mnt/debootstrap umount /mnt/debootstrap/tmp umount /mnt/debootstrap/var/log umount /mnt/debootstrap/var umount /mnt/debootstrap/home service mdadm stop service lvm2 stop vgremove vg_main pvremove /dev/md1 mdadm --stop /dev/md0 mdadm --stop /dev/md1 mdadm --remove /dev/md0 mdadm --remove /dev/md1 

之后partprobe命令工作。

有一些简单的命令吗? 喜欢

 harddiskreset /dev/sda 

所以它可以很容易地用于不同分区/ lvm / md布局的系统上?

我一直只是用这个分手。 它适用于更改disklabeltypes和添加/删除分区,尤其是因为它可以处理现代大型硬盘不像fdisk。

你可以跑

 $ sudo parted /dev/sda 

这将使事情开始,让你进入分手的terminal。 然后可以运行help命令来显示所有可用的命令。 它非常自我解释。

我会提到的是,你必须有你想要格式化磁盘的所有分区卸载。 如果你只是想找一个更快的方法来卸载所有的分区,我想你可以在umount命令中使用正则expression式来实现,但这看起来很愚蠢。

使用parted来pipe理硬盘,我从来没有强制刷新磁盘或类似的东西。

要彻底刷新全新使用的驱动器,我通常会执行以下操作:

1)开始分区运行sudo parted /dev/sda

2)通过运行printfind任何现有的分区

3)通过运行rm 1删除现有分区,用你想删除的分区号replace1。 然后重复磁盘上所有剩余的分区。

4)通过运行mklabel gpt重置disklabel我使用gpt标签types,但是你可以使用标准的msdos或者你的首选项。 这是一个disklabeltypes的列表

5)通过运行mkpart创build新的分区这将运行你通过创build分区向导。 起点和终点都默认为部门。 您可以在运行mkpart之前通过运行unit命令来更改此方法。这样您可以在GB或TB或MB等中指定它。

6)使用print检查您的结果来查看您的新分区表信息

7)然后您需要格式化分区。 这不应该通过分手来完成,尽pipe有一些选项可用。 我会build议,而不是运行quit ,退出分开的terminal,然后使用mkfs来格式化分区。 记得在/ dev / sda1而不是/ dev / sda上运行'mkfs',因为你格式化分区而不是整个磁盘。

就是这样。

我希望这回答了你的问题。

另外,这里是在线分手手册供参考: https : //www.gnu.org/software/parted/manual/html_node/index.html

编辑:

OP想从脚本而不是从terminal做这样的事情。 您可以通过单行命令而不是在分开的terminal内运行,通过脚本执行相同的过程。

例如命令

 $ sudo parted /dev/sda print 

将驱动器信息和分区表打印到bash控制台,然后可以使用grep等操作来创buildvariables或任何你想要的bash脚本。

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

 wipefs -a /dev/sda 

尽pipe如此,您仍然必须停止使用该设备的任何进程,例如LVM。

man wipefs

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

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

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