Overview
Modern Linux administration relies heavily on blkdiscard to quickly refresh solid-state drives (SSDs) and NVMe media by issuing low-level TRIM directives across block ranges. In this walkthrough, we bypass the dangers of running wipe routines directly on physical hardware by constructing an isolated loopback block device. Following along gives you hands-on experience experimenting with blkdiscard syntax, parameters, and wiping mechanics—essential skills for sanitizing disks and restoring drive throughput before redeployment.
1. Verifying Hardware TRIM Compatibility and Block Architecture
Before initiating a discard wipe, confirm whether your attached storage controller advertises TRIM support by inspecting parameters like granularity and discard maximums with lsblk --discard -o NAME,DISC-ALN,DISC-GRAN,DISC-MAX,DISC-ZERO,MOUNTPOINTS.
Whenever DISC-GRAN and DISC-MAX report valid nonzero thresholds (such as 512B and 2T), you can be certain that the target drive (nvme0n1) natively supports discard operations.

2. Building a Safe Loopback Device for Sandboxed Testing
To safeguard production data while testing, prepare a self-contained 64MB raw image preloaded with pseudo-random bytes using dd if=/dev/urandom of=/tmp/test_disk.img bs=1M count=64 status=none.

Transform the raw file into an active virtual block device accessible by the kernel by running sudo losetup -fP /tmp/test_disk.img.

Store the dynamically bound loop device node in a shell variable for easy retrieval across subsequent steps: LOOP_DEV=$(losetup -j /tmp/test_disk.img | cut -d: -f1).

Verify which virtual device node was provisioned by executing echo "생성된 디바이스: $LOOP_DEV".
Terminal output confirms that the backing file is safely mapped to /dev/loop0.

Before purging any sectors, inspect the initial 128 bytes of the virtual device with sudo hexdump -C -n 128 $LOOP_DEV.
The resulting hex dump reveals arbitrary non-zero bytes spanning the sector boundaries, proving our synthetic payload is in place.

3. Discarding Entire Storage Extents with blkdiscard
Ensure the session references the correct block target by reassigning the variable: LOOP_DEV=$(losetup -j /tmp/test_disk.img | cut -d: -f1).

Instruct the kernel to discard every sector across the block device while printing verbose operation telemetry with sudo blkdiscard -v $LOOP_DEV.
The stdout feed verifies that all 67,108,864 bytes (the full 64MB capacity starting at byte offset 0) were processed simultaneously.

Confirm that the payload was eliminated by analyzing the front of the block device once more: sudo hexdump -C -n 128 $LOOP_DEV.
Because discarded sectors zero out or report empty bytes, the hexdump outputs null characters or terminates cleanly without payload data.

4. Wiping Specific Block Ranges via Offset and Length Flags
Reload the device mapping variable prior to testing segmented wipes: LOOP_DEV=$(losetup -j /tmp/test_disk.img | cut -d: -f1).

Inject a recognizable 10MB test sequence into the beginning of the virtual disk: echo "TESTDATA_RELOAD" | sudo dd of=$LOOP_DEV bs=1M count=10 status=none.

Target only the initial 10MB slice starting at byte zero by passing offset and length parameters: sudo blkdiscard -v -o 0 -l 10M $LOOP_DEV.
Status messages confirm that exactly 10,485,760 bytes (10MB) were unmapped, leaving sectors beyond the 10MB boundary untouched.

Validate the sanitization of this leading chunk by sampling its initial 64 bytes via sudo hexdump -C -n 64 $LOOP_DEV.
The utility yields an empty result, proving that the targeted prefix was effectively neutralized.

5. Teardown and Production Safety Considerations
Retrieve the active loop assignment one final time before tearing down the environment: LOOP_DEV=$(losetup -j /tmp/test_disk.img | cut -d: -f1).

Sever the binding between the loop subsystem and the underlying image file with sudo losetup -d $LOOP_DEV.

Reclaim host file storage by deleting the leftover staging file: rm -f /tmp/test_disk.img.

Ensure that all sandboxed resources have unmounted cleanly by querying active loop units: losetup -a.
An empty command response guarantees that no dangling loopback interfaces remain attached to the kernel.

You now have a complete, hands-on understanding of how blkdiscard purges underlying flash memory blocks on Linux systems.
Because discard actions are permanent and render sector data completely unrecoverable, always double-check your target block device names before executing destructive storage wipes in production.