Removing RAID Metadata from Linux Disks
When you repurpose disks from one RAID array to another system, Linux keeps the old RAID metadata intact as a safety measure. This prevents accidental data corruption, but it also blocks you from reusing the disk until the signatures are cleared.
RAID metadata isn’t stored in one place — it’s scattered across the disk by controllers, making cleanup trickier than a simple format. This guide walks through practical methods to identify and remove it, from safest to most aggressive.
Warning: These procedures destroy all data on the target disk. Verify the correct device name multiple times before proceeding. Use lsblk, fdisk -l, or nvme list to confirm.
Identify Existing RAID Metadata
Check what RAID signatures exist on a disk:
dmraid -r
Output example:
/dev/sdb: ddf1, ".ddf1_disks", GROUP, ok, 3904294912 sectors, data@ 0
List any mapped RAID devices:
ls /dev/mapper/
dmraid -ay
For MD software RAID (Linux native), check superblocks:
mdadm --examine /dev/sdb
Method 1: Remove Mapped Devices
If the RAID is actively mapped in device mapper, stop it first:
dmsetup remove /dev/mapper/ddf1_*
dmraid -an
For MD RAID:
mdadm --manage --stop /dev/md0
mdadm --manage --stop /dev/md*
This works cleanly when nothing is using the device. If you see “Device or resource busy,” the disk is still mounted or in use — unmount it and try again.
Method 2: Erase Metadata with dmraid
Use dmraid to directly erase RAID signatures:
DEVICE=/dev/sdb
dmraid -r -E $DEVICE
It prompts for confirmation:
Do you really want to erase "ddf1" ondisk metadata on /dev/sdb ? [y/n]:
Caveat: This frequently fails on DDF1 arrays with offset errors:
ERROR: ddf1: seeking device "/dev/sdb" to 1024204253954048
ERROR: writing metadata to /dev/sdb, offset 2000398933504 sectors
When this happens, move to Method 3.
Method 3: Zero RAID Metadata Regions with dd
Most RAID metadata lives at the disk’s end. Write zeros there:
DEVICE=/dev/sdb
SECTORS=$(blockdev --getsz $DEVICE)
# Zero last 2MB (covers most hardware RAID metadata)
dd if=/dev/zero of=$DEVICE bs=1M seek=$((SECTORS/2048 - 2)) count=2 conv=fsync
# Zero first 2MB (catches MegaRAID and older formats)
dd if=/dev/zero of=$DEVICE bs=1M count=2 conv=fsync
For thorough cleanup across all potential metadata zones:
DEVICE=/dev/sdb
# Zero first 4MB
dd if=/dev/zero of=$DEVICE bs=1M count=4 conv=fsync
# Zero last 4MB
SECTORS=$(blockdev --getsz $DEVICE)
dd if=/dev/zero of=$DEVICE bs=1M seek=$((SECTORS/2048 - 4)) count=4 conv=fsync
Always include conv=fsync to force the kernel to flush writes immediately.
For MD RAID superblocks specifically:
mdadm --zero-superblock /dev/sdb
Verify Cleanup
Confirm all metadata is gone:
dmraid -r
Should output:
no raid disks
Check mdadm as well:
mdadm --examine /dev/sdb
Should show no superblock found.
If metadata still appears, repeat the dd step with larger counts — some arrays store redundant copies.
Reinitialize the Disk
After verification, safely partition and format:
# Create new partition table
parted /dev/sdb mklabel gpt
parted /dev/sdb mkpart primary ext4 0% 100%
# Format the partition
mkfs.ext4 /dev/sdb1
If mkfs reports “apparently in use by the system,” reload the device mapper:
dmsetup remove_all
dmraid -an
partprobe /dev/sdb
Then retry formatting.
NVMe and High-Capacity Disks
NVMe drives use the same process but different device names:
# Identify NVMe drive
nvme list
# Zero metadata on NVMe (example /dev/nvme0n1)
DEVICE=/dev/nvme0n1
SECTORS=$(blockdev --getsz $DEVICE)
dd if=/dev/zero of=$DEVICE bs=1M count=4 conv=fsync
dd if=/dev/zero of=$DEVICE bs=1M seek=$((SECTORS/2048 - 4)) count=4 conv=fsync
On very large disks (8TB+), increase the zero regions accordingly — use 8MB or 16MB instead of 4MB.
Troubleshooting
Device remains busy after dmsetup remove:
Check for open file handles:
lsof | grep sdb
fuser -m /dev/sdb
Kill or close any processes holding the device, then retry removal.
mkfs fails with “Device busy”:
The device might still be registered. Reload partitions:
blockdev --rereadpt /dev/sdb
partprobe /dev/sdb
udevadm settle
Metadata still appears after dd:
RAID controllers sometimes store multiple copies. Increase the zero region or repeat the process. Use larger counts:
dd if=/dev/zero of=$DEVICE bs=1M seek=0 count=32 conv=fsync
dd if=/dev/zero of=$DEVICE bs=1M seek=$((SECTORS/2048 - 32)) count=32 conv=fsync
cryptsetup needed for dmsetup:
Some distributions split device mapper tools. Install if required:
apt install cryptsetup-bin # Debian/Ubuntu
dnf install cryptsetup # RHEL/Fedora

thanks!
Can raid metadata be erased by someone wanting to do malicious things inside of a server?
The one to erase the metadata needs to have the “root” or “sudo” access. In Linux, if the “root” access is leaked, lots malicious things could be done.
Nice post, worked perfectly. Thanks.
nice post, thanks very much.
Thank you!