To start from a clean state I need to reset the hard disk to an empty state from command line.
It is not about running a wipe utility, the data don't have to be overwritten.
This question is quite similar to Deleting All Partitions From the Command Line
The solution there works quite well,
dd if=/dev/zero of=/dev/sda bs=512 count=1 conv=notrunc
but if I want to work with such an overwritten disk, I get the error that the device is still in use.
root@grml ~ # blockdev --rereadpt /dev/sda
BLKRRPART: Device or resource busy
or
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.
So I have to manually disable everything which "sits" on the device
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
after that the partprobe
command works.
is there some command which works simpler? like
harddiskreset /dev/sda
so it can easily be used on systems with different partition/lvm/md layout?
The
wipefs
program lets you easily delete the partition-table signature:You still have to stop any process using the device though, such as LVM.
From
man wipefs
I have always simply used parted for this. It works well for changing the disklabel type and adding/removing partitions, especially since it can handle modern large HDDs unlike fdisk.
You can run
This will get things started and get you into the parted terminal. You can then run the help command to show all the available commands. Its very self explanatory.
I will mention that yes you do have to have all partitions of the disk you want to format unmounted. If you were simply looking for a quicker way to unmount all the partitions, I guess you could do it with a regex in the umount command but that seems silly.
Using parted to manage the HDD I have never had to force a refresh of the disk or anything similar.
To completely refresh a drive for brand new use, I usually do the following:
1) start parted by running
sudo parted /dev/sda
2) find any existing partitions by running
print
3) remove existing partitions by running
rm 1
replacing 1 with the partition number you want to remove. Then repeat for all remaining partitions on the disk.4) reset the disklabel by running
mklabel gpt
I use the gpt label type but you could use the standard msdos or whatever your preference is. Here is a list of disklabel types5) Create new partitions by running
mkpart
This will run you through the create partition wizard. The start and end points are defaulted to sectors. You can change this by running theunit
command before you runmkpart
This way you can specify it in GB or TB or MB etc.6) check your results using
print
to view your new partition table info7) You then need to format the partitions. This shouldn't be done through parted although some options for this are available. I would suggest instead running
quit
to exit the parted terminal and then usingmkfs
to format the partitions. Remember to run 'mkfs' on /dev/sda1 instead of /dev/sda because you are formatting the partition and not the disk as a whole.That's about it.
I hope this answers your question.
Also, here is the online parted manual for reference: https://www.gnu.org/software/parted/manual/html_node/index.html
EDIT:
The OP wanted to do this sort of thing from a script and not from a terminal. You can do the same sort of procedure via a script by running parted via single line commands instead of within the parted terminal.
For example the command
Will print out the drive information and partition table onto the bash console which can then be manipulated using grep etc to create variables or whatever you want in a bash script.
Use improved non-interactive version of fdisk, which is sfdisk
To erase partition table use this command:
Basically, this error
shows up when you miss some parameter while partitioning your disk. You can fix this error by looking closely to the parameters that you defined while partitioning.
Use :
fdisk -l
to check the parameters of your disk :A very delayed answer that hopefully helps someone:
I've been using the following script to wipe the complete disk, and recreate a single partition with 100% utilization as below:
Notes:
dd
on the first 10M of the disk to wipe the GPTparted
to create a new GPT, and a single primary partition starting at0%
and ending at100%
, usingecho -e
to pipe the commands into parted.XFS
partition/etc/fstab
sudo systemctl daemon-reload
on recent systems that usesystemd-mountd
.partprobe
is interspersed through the commands to update the kernel about the changes/etc/fstab
entry)