What Is TRIM and Why Does It Exist?
TRIM is an ATA command (DATA SET MANAGEMENT for SATA, DEALLOCATE for NVMe) that the operating system sends to the SSD controller when files are deleted. It identifies which logical block addresses no longer contain valid data so the controller can erase the underlying NAND cells during idle time.
- TRIM (ATA Data Set Management)
- The SATA protocol command that tells the SSD controller which LBAs are no longer in use. Supported on all modern SATA SSDs and enabled by default in Windows 7+, macOS 10.10.4+, and Linux kernel 2.6.33+.
- UNMAP (SCSI/NVMe Deallocate)
- The equivalent command for NVMe and SCSI-attached SSDs. Functionally identical to TRIM: it notifies the controller that specific blocks can be erased. NVMe Deallocate is part of the Dataset Management command set.
- Garbage Collection (GC)
- The controller's internal background process that physically erases NAND blocks marked as invalid by TRIM. GC consolidates valid pages into clean blocks and erases the stale ones. This is the step that actually destroys data; TRIM only marks it for destruction.
- DisableDeleteNotify
- The Windows registry flag that controls whether the OS sends TRIM commands to the drive. Setting
DisableDeleteNotify = 1viafsutilprevents the OS from issuing TRIM, preserving deleted data on the NAND until the blocks are overwritten by new writes.
SSDs need TRIM because of how NAND flash works. Unlike magnetic hard drives, an SSD cannot overwrite a cell in place. It must erase an entire block (typically 256KB to 4MB) before writing new data to any page within that block. Without TRIM, the controller does not know which pages contain deleted data, so it must read-modify-write entire blocks when new data arrives. TRIM lets the controller pre-erase blocks during idle time, which maintains write performance over the life of the drive.
Why TRIM Makes SSD Recovery Different from HDD Recovery
On a hard drive, deleting a file removes the directory entry but leaves the magnetic data on the platters until new data overwrites it. On an SSD with TRIM enabled, deleting a file tells the controller those blocks are invalid, and garbage collection erases the NAND cells during idle time. The data does not wait to be overwritten; it is actively destroyed.
| Behavior | HDD (Magnetic) | SSD with TRIM | SSD without TRIM |
|---|---|---|---|
| File deletion | Directory entry removed; data stays on platters | TRIM sent; blocks marked for erasure | Directory entry removed; data stays on NAND |
| Physical erasure timing | Only when new data overwrites the same sectors | During next garbage collection cycle (seconds to minutes) | Only when controller needs the block for new writes |
| Recovery window | Hours to months (until overwritten) | Seconds to minutes (until GC runs) | Hours to months (similar to HDD) |
| Software recovery viable? | Yes, if sectors not overwritten | Almost never; cells are physically erased | Possible if blocks not reused |
This is why data recovery software cannot reliably recover deleted files from SSDs the way it can from hard drives. The physical cells have been erased to an unprogrammed state. There is nothing left for the software to read.
When Is TRIM-Deleted Data Still Recoverable?
TRIM and garbage collection are separate operations. TRIM marks blocks as invalid; GC erases them. If anything interrupts that sequence, the data may survive on the NAND.
- 01
Power loss before garbage collection
If the SSD loses power after TRIM was issued but before GC erased the blocks, the data is physically intact. The controller marked the blocks as stale in its FTL, but the NAND cells still hold the original charge states. PC-3000 can read raw NAND pages and recover data from blocks that the controller considers invalid.
- 02
Firmware failure freezing the controller
When SSD firmware corrupts, the controller stops processing commands, including garbage collection. A drive stuck in firmware safe mode (SATAFIRM S11, BSY state, or 0 bytes capacity) has not run GC since the failure. TRIMmed blocks that the OS deleted before the firmware crashed may still contain data.
- 03
USB enclosures blocking TRIM passthrough
Many older USB-to-SATA bridge chips (such as the JMicron JMS539 or early ASMedia ASM1051) do not pass TRIM commands through to the drive. If the SSD was used in an external enclosure that blocks TRIM, deleted files remain on the NAND indefinitely. The controller never received the invalidation command, and standard recovery tools may work in this scenario.
- 04
TRIM disabled in the operating system
If
DisableDeleteNotifywas set to1on Windows, or thediscardmount option was not enabled on Linux, TRIM was never sent. Deleted data persists on the NAND until the controller overwrites those blocks with new data during normal write operations.
How Does Garbage Collection Timing Differ by Controller?
Garbage collection aggressiveness varies by controller family. Samsung controllers erase TRIMmed blocks within seconds. Phison controllers batch GC during sustained idle periods, giving you minutes. Silicon Motion controllers defer GC until the free block pool runs low, sometimes preserving TRIMmed data for hours on lightly used drives.
Samsung Controllers: Elpis, Pascal, Phoenix
Samsung Elpis, Pascal, & Phoenix controllers begin garbage collection within seconds of idle time. Samsung firmware prioritizes NAND endurance optimization through immediate block reclamation. The recovery window after TRIM on a Samsung 870 EVO or 990 Pro is measured in seconds, not minutes.
If you deleted files from a Samsung SSD and the drive stayed powered on for more than 30 seconds, the data is almost certainly gone. Samsung's aggressive GC is good for drive longevity but bad for recovery. SATA Samsung SSD recovery starts at $200; NVMe Samsung starts at $200.
Phison Controllers: PS3111-S11, PS5012-E12, PS5018-E18
Phison PS3111-S11, PS5012-E12, & PS5018-E18 controllers use configurable GC aggressiveness through firmware tuning tables. Many Phison-based drives batch GC operations during sustained idle periods rather than running GC incrementally after each TRIM command.
This batching behavior can extend the recovery window to minutes. A Sabrent Rocket (PS5012-E12) or Corsair Force MP510 (PS5012-E12) that received TRIM but stayed busy with other I/O may not have erased the target blocks yet. PC-3000 SSD's Phison utility can enter diagnostic mode & read raw NAND pages before GC resumes.
Silicon Motion Controllers: SM2258XT, SM2262EN, SM2263XT
Silicon Motion SM2258XT, SM2262EN, & SM2263XT controllers often defer GC until the drive's free block pool drops below a threshold. On a lightly used drive with plenty of free blocks, the controller has no immediate reason to erase stale blocks; it already has enough clean blocks for new writes.
TRIMmed blocks on a half-empty Kingston A400 (SM2258XT) can survive for hours without being erased. That's the longest recovery window of the three families. Power the drive off immediately, ship it to the lab, & PC-3000 SSD's Silicon Motion utility reads the raw NAND pages before the controller's GC routine ever initializes.
| Controller Family | GC Aggressiveness | Typical Recovery Window | Notable Behavior |
|---|---|---|---|
| Samsung (Elpis, Pascal, Phoenix) | High | Seconds | GC begins within seconds of idle time; prioritizes NAND endurance |
| Phison (PS3111, PS5012, PS5018) | Moderate | Minutes | Batches GC during sustained idle; configurable via firmware tuning tables |
| Silicon Motion (SM2258, SM2262, SM2263) | Low (deferred) | Minutes to hours | Defers GC until free block pool drops below threshold; lightly used drives retain data longest |
Regardless of controller family, the first step is always the same: power the drive off. Every second the SSD stays powered gives the controller time to run GC. Ship the drive to our Austin, TX lab & we evaluate the NAND contents before the controller has a chance to erase anything. Browse the full SSD controller recovery directory for model-specific recovery procedures.
How to Disable TRIM on Windows
Disabling TRIM prevents the OS from telling the SSD to erase deleted blocks. This preserves deleted data on the NAND until the controller reuses those blocks for new writes. Disable TRIM before deleting files if you anticipate needing recovery later.
- Open an elevated Command Prompt or Terminal (right-click Start, select "Terminal (Admin)").
- Check current TRIM status:
fsutil behavior query DisableDeleteNotify - If
DisableDeleteNotify = 0, TRIM is enabled. Disable it:fsutil behavior set DisableDeleteNotify 1 - For NVMe drives, also run:
fsutil behavior set DisableDeleteNotify NTFS 1 - Verify:
fsutil behavior query DisableDeleteNotifyshould now show1.
On macOS, TRIM is enabled by default for Apple-branded SSDs and can be enabled for third-party drives via trimforce enable. There is no supported method to disable TRIM on macOS without disabling SIP. On Linux, TRIM runs only if the file system is mounted with the discard option or if fstrim is scheduled via cron/systemd timer.
How TRIM Differs by Operating System
Windows, macOS, & Linux each handle TRIM differently at the file system level. The operating system determines when TRIM commands reach the SSD controller, and that timing controls how long deleted data survives on the NAND. Recovery windows range from zero seconds (macOS APFS) to 7 days (Linux periodic fstrim).
Windows: NTFS, ReFS, & Per-Filesystem Control
Windows 7+ sends TRIM automatically on NTFS volumes. Starting with Windows Server 2016, fsutil behavior set DisableDeleteNotify can target NTFS & ReFS independently. An admin running a ReFS Storage Spaces volume on Server 2019 can disable TRIM on ReFS while keeping it active on NTFS boot volumes. Windows Server 2012 applies a single global DisableDeleteNotify setting across all file systems.
FAT32 & exFAT don't support TRIM at all. An SSD formatted as FAT32 (common for USB flash drives & camera cards under 32GB) never receives TRIM commands from Windows. Deleted files persist on the NAND until the controller overwrites them with new data, making recovery similar to HDD recovery. SATA SSD recovery starts at $200.
macOS: APFS Cascading TRIM & Secure Enclave Encryption
APFS sends TRIM immediately on file deletion. Volume deletion triggers cascading TRIM for every block the volume occupied. Apple's trimforce enable command activates TRIM for third-party SSDs, but Apple-branded SSDs have TRIM enabled at the firmware level with no option to turn it off.
T2 & Apple Silicon Macs bind AES-256 encryption keys to the Secure Enclave on the logic board. The Media Encryption Key is bound to the Secure Enclave's secure boundary and wrapped by a hardware-unique root key; it cannot be extracted from silicon. Desoldering the NAND from a dead MacBook yields only ciphertext. Board-level logic board repair using a Hakko FM-2032 & FLIR thermal camera to locate the failed component is the only path to recovering data from a Mac SSD. NVMe recovery starts at $200; board repair runs $600–$900.
Linux: Continuous Discard vs. Periodic fstrim
Linux gives administrators two TRIM modes. Continuous TRIM mounts the file system with the discard option, sending TRIM on every delete. Periodic TRIM uses fstrim.timer, a systemd timer that runs fstrim -a weekly by default. With periodic TRIM, deleted data can remain on the NAND for up to 7 days between fstrim executions.
dm-crypt blocks TRIM by default. The Linux kernel's encryption layer strips TRIM commands to prevent metadata leakage: an attacker observing which blocks are TRIMmed could infer file sizes & deletion patterns on an encrypted volume. Passing TRIM through dm-crypt requires the explicit allow-discards flag in /etc/crypttab. If dm-crypt is configured without allow-discards, TRIM never reaches the SSD controller & deleted data persists indefinitely on the NAND.
For Linux servers running periodic fstrim, the recovery window is the longest of any OS: up to 7 days. That's enough time to power down the server, pull the drive, & ship it to our Austin, TX lab for evaluation before the next fstrim cycle executes.
| Operating System | TRIM Mechanism | Scheduling | Recovery Window Impact |
|---|---|---|---|
| Windows (NTFS) | DisableDeleteNotify flag via fsutil | Immediate on file deletion | Seconds to minutes (GC timing dependent) |
| Windows (FAT32/exFAT) | Not supported | Never | Hours to months (no TRIM; overwrite only) |
| macOS (APFS) | Cascading TRIM on delete; trimforce for third-party SSDs | Immediate on file deletion | Seconds (Samsung GC) to minutes; no disable option without SIP off |
| Linux (continuous discard) | Mount option: discard | Immediate on file deletion | Seconds to minutes (same as Windows NTFS) |
| Linux (periodic fstrim) | fstrim.timer systemd unit | Weekly (default fstrim.timer schedule) | Up to 7 days between fstrim executions |
| Linux (dm-crypt, no allow-discards) | TRIM blocked by encryption layer | Never (default) | Indefinite (TRIM never reaches controller) |
How Does the Controller Process TRIM Queues at the Firmware Level?
The SSD controller doesn't erase NAND cells the instant it receives a TRIM command. TRIM updates the FTL mapping table & adds affected blocks to a garbage collection queue. The controller's firmware scheduler decides when to physically erase those blocks based on idle time, free block availability, & SLC cache pressure.
Background GC vs. Foreground GC
Background garbage collection runs during idle periods when the host isn't sending I/O commands. The controller picks stale blocks, moves valid pages to clean blocks, & erases the originals. This is the normal mode: quiet, deferred, & often delayed by seconds to hours depending on workload.
Foreground GC is different. It triggers when the controller's free block pool drops below a firmware-defined threshold. The controller must reclaim blocks immediately to satisfy incoming writes, and it does so on the critical I/O path. This is the performance cliff users notice when an SSD slows down during large file copies. For recovery, foreground GC is worse: it erases TRIMmed blocks immediately because the controller needs that NAND space right now. SATA SSD firmware recovery runs $600–$900.
SLC Cache Exhaustion & Forced Migration
Most consumer SSDs use pseudo-SLC (pSLC) caching: the controller writes incoming data to TLC or QLC cells in SLC mode (1 bit per cell) for speed, then migrates that data to full TLC/QLC density during idle time. A 1TB QLC SSD might have 12-48GB of pSLC cache. When sustained writes fill that cache, the controller must flush pSLC pages to their native TLC/QLC format.
This flush operation triggers aggressive garbage collection. The controller needs free TLC/QLC blocks to receive the migrated data, so it erases every stale block it can find, including TRIMmed blocks that might still contain recoverable data. A nearly full SSD under heavy writes can erase TRIMmed blocks within seconds of the pSLC cache filling. A half-empty SSD with a Phison PS5012-E12 controller and plenty of free blocks might defer that erasure for hours.
Over-Provisioning & Free Block Reserves
Over-provisioning (OP) is the portion of physical NAND reserved for controller operations beyond the user-addressable namespace. Consumer SSDs typically ship with roughly 7% factory OP (for example, 512 GiB of raw NAND exposed as a 500 GB / ~465 GiB namespace). Enterprise drives ship with 28% or more. The base-10 vs base-2 capacity difference (1 TB marketed = ~931 GiB reported by Windows) is a unit conversion artifact, not OP. More OP means a larger free block pool, which means the controller has less urgency to run GC on TRIMmed blocks.
Drive fill level matters too. A nearly full consumer SSD leaves the controller with a small free-block pool, so it runs GC aggressively to maintain write performance. The same drive at half capacity has a much larger pool of available blocks. GC pressure is low, TRIMmed blocks sit in the queue longer, & the recovery window extends from minutes to hours.
- Background GC
- Runs during idle time. Erases stale blocks at the controller's leisure. Deferred by seconds (Samsung) to hours (Silicon Motion on lightly used drives). The recovery window depends on how quickly the SSD reaches idle after TRIM.
- Foreground GC
- Triggers when free blocks drop below firmware threshold. Runs on the I/O critical path. Erases TRIMmed blocks immediately. The performance cliff (write speeds dropping from 500MB/s to 50MB/s on SATA) is the observable symptom.
- pSLC Cache Flush
- When the pseudo-SLC write cache fills (typically 12-48GB on a 1TB QLC SSD), the controller migrates cached pages to TLC/QLC blocks. This migration triggers block erasure to free space, which can include TRIMmed blocks that still held recoverable data.
NVMe APST & Garbage Collection Scheduling
NVMe drives support Autonomous Power State Transition (APST), which lets the host OS dictate how quickly the drive enters low-power states during idle. NVMe drives define multiple power states: PS0 (active, ~8W) down to PS3 or PS4 (deep sleep, ~0.009W). When the drive enters a non-operational power state, the NVMe specification allows it to temporarily exceed that state's power limit for background processing, including garbage collection.
NOPPME (Non-Operational Power State Permissive Mode Enable) controls this behavior. If NOPPME is disabled, the drive must respect the strict power limit of the current sleep state & defer GC until the host wakes it back to an operational state. On a laptop that pushes the NVMe drive into PS4 deep sleep within 100ms of idle, the drive can't run GC because the power budget is too low. This inadvertently extends the recovery window: the drive goes to sleep before the controller has time to erase TRIMmed blocks.
Enterprise & data center NVMe SSDs disable APST entirely (0ms transition latency). The drive stays in PS0 at full power, ready for the next I/O command with zero latency. That means the controller runs GC without any power-state constraints, erasing TRIMmed blocks as soon as idle time appears. Consumer NVMe drives with aggressive host-configured APST profiles can preserve TRIMmed data longer if the system transitions the drive into non-operational states before GC completes. NVMe SSD firmware recovery runs $900–$1,200.
- APST (Autonomous Power State Transition)
- NVMe power management feature that transitions the drive between power states based on idle time. Each state has defined entry/exit latencies & power limits. PS0 is full active; PS3/PS4 are deep sleep. The host OS configures APST thresholds via the NVMe Set Features command.
- NOPPME (Non-Operational Power State Permissive Mode Enable)
- NVMe controller feature bit. When enabled, the controller can temporarily exceed a non-operational power state's power limit for background maintenance (GC, wear leveling). When disabled, GC is blocked until the host transitions the drive back to an operational power state.
How Does PC-3000 SSD Freeze Garbage Collection Before Power-On?
PC-3000 SSD forces the controller into a vendor-specific diagnostic state (Safe Mode, ROM Mode, or Techno Mode depending on controller family) where firmware doesn't initialize & garbage collection never starts. Custom microcode uploaded to controller RAM provides raw NAND access while the GC scheduler remains disabled.
Why Normal Power-On Destroys TRIM-Pending Data
A normal boot sequence loads the controller's firmware from a reserved NAND area, initializes the FTL mapping tables, & resumes any pending background tasks. GC is first in the queue. Aggressive Samsung firmware begins reclaiming stale blocks as soon as post-boot idle appears.
DZAT (Deterministic Read Zero After TRIM) makes this worse. Even before GC runs, any host read to a TRIMmed LBA returns all zeros. Recovery software like Disk Drill or R-Studio sees only zeroed blocks because the controller intercepts the read & substitutes zeros. The physical NAND may still hold the original data, but the controller's host interface hides it. PC-3000 SSD is the only tool that bypasses DZAT by reading raw NAND pages in diagnostic mode. Firmware recovery for SATA SSDs runs $600–$900; NVMe runs $900–$1,200.
Phison: ROM Mode via PCB Test Points
Phison controllers enter ROM Mode when specific test points on the PCB are shorted during power-on. On SATA Phison drives using the older PS3109-S9, shorting the documented R29 pads with a probe forces the controller into safe mode, bypassing the normal firmware boot sequence & its GC scheduler. On PS3111-S11 drives, the shorting pad location is PCB-dependent and varies by vendor because Phison ships the S11 as a turnkey controller to many third-party PCB manufacturers. NVMe controllers (PS5012-E12, PS5018-E18) use their own ROM shorting pins specific to individual M.2 PCB layouts.
Older Phison controllers (PS3109, PS3111 early revisions) require PATA connections for Techno Mode commands. PC-3000 SSD's Phison utility communicates through vendor-specific SATA or NVMe commands to upload a microcode loader into the controller's internal SRAM. This loader provides raw NAND read capability without initializing the main firmware's background task engine. NVMe SSD recovery starts at $200.
Silicon Motion: ROM Shorting & FTL Reconstruction
Silicon Motion SM2258XT, SM2262EN, & SM2263XT controllers use ROM shorting pads on the PCB to enter diagnostic mode. NVMe variants (SM2262EN, SM2263XT) connect through M.2 PCIe adapters on the PC-3000 SSD hardware interface. The controller boots into a minimal state where it accepts raw NAND page read commands.
PC-3000 SSD includes advanced translator building algorithms for Silicon Motion controllers. By uploading a custom microcode loader into controller RAM, the tool can read raw NAND service blocks to locate uncorrupted fragments of the Flash Translation Layer (FTL). If the active FTL is damaged, PC-3000 reconstructs a virtual mapping table from these redundant metadata pages to regain access to the physical blocks. SATA SSD firmware recovery runs $600–$900.
Samsung NVMe: Board-Level Repair Is the Only Path
PC-3000 SSD does not currently support firmware-level diagnostic loaders for Samsung's modern NVMe controllers (Elpis on 980 Pro, Pascal on 990 Pro, Phoenix on 970 EVO Plus era). ACELAB's published support matrices do not list Techno Mode, microcode loader injection, or raw NAND read capability for these controllers. Firmware-panicked Samsung NVMe drives cannot be recovered through software utilities.
Samsung drives use hardware AES-256 encryption by default. The Media Encryption Key (MEK) is bound to the controller's secure boundary and wrapped by a hardware-unique root key; it cannot be extracted from silicon. Raw NAND pages read after chip-off extraction are ciphertext that no commercial tool can decrypt. The only viable recovery path is reviving the original controller so it can run its internal decryption pipeline. If the controller's PMIC (power management IC) has failed, we locate the shorted component using FLIR thermal imaging & replace it with a Hakko FM-2032 on an FM-203 base station. Once the original controller boots, the key material is intact & the data becomes accessible. Board repair isn't separate from data recovery for encrypted Samsung SSDs; it IS data recovery.
This section expands on the general PC-3000 TRIM recovery procedure described further down the page, with controller-specific entry methods & the encryption considerations unique to each family.
How Much Does SSD Data Recovery Cost?
SATA SSD recovery: $200–$1,500. NVMe SSD recovery: $200–$2,500. The price depends on the failure type, not on whether TRIM was involved. Free evaluation, firm quote before any paid work. No data recovered means no charge.
If your SSD failed due to firmware corruption, power loss, or controller failure, the question is whether garbage collection ran before the failure stopped the controller. We determine this during the free evaluation by examining the NAND contents directly with the PC-3000. If the data survived, we image it. If GC already erased the target blocks, we report that honestly. No attempt fees.
Rush service available for an additional +$100 rush fee to move to the front of the queue. Call (512) 212-9111 for a free evaluation.
How Do DRAT, DZAT, & NVMe DLFEAT Affect Recovery?
DRAT, DZAT, & NVMe DLFEAT define what the SSD controller returns when software reads a TRIMmed LBA. Modern SSDs enforce deterministic behavior: they intercept host reads to TRIMmed addresses & return zeros, even if the physical NAND cells haven't been erased yet. PC-3000 SSD bypasses this by entering vendor-specific diagnostic mode to read raw NAND pages directly.
Older budget SATA SSDs used non-deterministic TRIM. The controller returned unpredictable data for TRIMmed LBAs: sometimes the original data, sometimes zeros, sometimes garbage from a different page. This inconsistency occasionally allowed recovery software to read surviving data before GC ran. Non-deterministic TRIM appeared on early SM2246EN & JMicron JMF670H controllers and is rare in drives manufactured after 2016.
Current drives enforce DRAT at minimum. DRAT is identified by SATA Word 69, Bit 14 in the drive's IDENTIFY DEVICE response. DZAT (Bit 5 of the same word) is stricter & required for RAID-capable enterprise SATA SSDs because array controllers need consistent parity calculations across members. A DZAT drive returns the same value for every read to every TRIMmed LBA: absolute zeros, no exceptions.
| Behavior Model | Protocol Identifier | Definition | Recovery Impact |
|---|---|---|---|
| Non-Deterministic | Pre-2016 budget SATA | Controller returns unpredictable data for TRIMmed LBAs | Software recovery occasionally possible if GC hasn't run |
| DRAT | SATA Word 69, Bit 14 | Controller returns a consistent fixed payload for all reads to TRIMmed LBAs | Software sees fixed pattern; original data inaccessible via host interface |
| DZAT | SATA Word 69, Bit 5 | Controller intercepts all reads & returns absolute zeros for TRIMmed LBAs | Required for RAID parity consistency; software recovery impossible via host |
| NVMe DLFEAT (001b / 010b) | Identify Namespace byte 33, bits 2:0 | 001b returns all 00h bytes (NVMe DZAT equivalent); 010b returns all FFh bytes; 000b means behavior not reported | Modern NVMe SSDs enforce a deterministic pattern; software recovery impossible via host |
The practical result: on any SSD manufactured after 2016, recovery software sees only zeros or a fixed pattern for deleted blocks. Disk Drill, R-Studio, & PhotoRec all read through the host interface. The controller intercepts their read commands & returns deterministic data instead of what's physically stored on the NAND. The original charge states may still exist in the floating gate transistors, but the controller's protocol layer refuses to expose them.
PC-3000 SSD bypasses this protocol layer entirely. In vendor-specific diagnostic mode, the tool sends raw NAND page read commands that skip the controller's LBA translation & deterministic-zero interception logic. If GC hasn't physically erased the cells, the original page data is readable at the hardware level. Firmware recovery for SATA SSDs runs $600–$900; NVMe runs $900–$1,200.
- DRAT (Deterministic Read After TRIM)
- SATA specification behavior (Word 69, Bit 14). The controller returns a single, consistent value for all host reads to TRIMmed LBAs. The specific value varies by implementation but is always the same for every TRIMmed block on that drive.
- DZAT (Deterministic Zeroes After TRIM)
- SATA specification behavior (Word 69, Bit 5). Stricter than DRAT: the controller returns absolute zeros for any TRIMmed LBA. Required for enterprise RAID arrays where parity calculations depend on consistent zero-fill across degraded members.
- DLFEAT (Deallocate Logical Block Features)
- NVMe Identify Namespace byte 33, bits 2:0. 001b means reads to deallocated (TRIMmed) LBAs return all 00h bytes (the NVMe equivalent of SATA DZAT). 010b means reads return all FFh bytes. 000b means the behavior is not reported. Modern NVMe controllers (Samsung Elpis, Phison PS5018-E18, Silicon Motion SM2264) enforce one of the deterministic encodings, typically 001b.
How TRIM Works at the NAND Level
NAND flash stores data by trapping electrons in floating gate transistors. Each cell holds a charge level that encodes one or more bits (SLC = 1 bit, TLC = 3 bits, QLC = 4 bits). Erasing a cell removes the trapped electrons, resetting the cell to an empty state. This erasure is irreversible at the data level.
NAND flash has an asymmetric write/erase constraint. Writes happen at the page level (typically 4KB to 16KB). Erases happen at the block level (typically 256KB to 4MB, containing 64 to 256 pages). You cannot erase a single page; the entire block must be erased at once. This is why garbage collection exists: the controller must consolidate all valid pages from a partially-stale block into a clean block, then erase the entire stale block.
When the OS deletes a file and sends TRIM, the controller updates its Flash Translation Layer to mark those LBAs as invalid. The physical pages still contain data at this point. During the next garbage collection cycle, the controller reads all valid pages from blocks containing stale data, writes them to a free block, and erases the original block. After the erase completes, those NAND cells read as all-ones (0xFF). The data is gone.
Some SSD controllers implement "deterministic zeroing" per the NVMe specification: after TRIM, reads to those LBAs return all zeros even before GC runs. This means even raw reads at the host interface show zeroed data. The actual NAND cells may still hold the original data until GC, but accessing them requires bypassing the controller with hardware tools.
ATA DSM & NVMe Deallocate Wire Protocol
SATA TRIM travels as an ATA DATA SET MANAGEMENT command (opcode 06h) with the TRIM attribute bit set in the Features register. The host transfers one or more 512-byte blocks of LBA Range Entries to the controller. Each entry is 8 bytes: a 48-bit starting LBA plus a 16-bit sector count. One 512-byte payload block holds 64 range entries; ACS-2 permits up to 8 blocks per command, capping a single DSM at 512 ranges. The drive advertises TRIM support through IDENTIFY DEVICE word 169, bit 0. DRAT and DZAT appear in IDENTIFY DEVICE word 69, bits 14 and 5 respectively.
NVMe uses opcode 09h, Dataset Management, with the Attribute-Deallocate (AD) bit set in Command Dword 11. The host transfers a Range Definition Set containing up to 256 entries. Each range descriptor is 16 bytes: a 32-bit context attribute field, a 32-bit length in logical blocks, and a 64-bit starting LBA. The controller's post-deallocate read behavior is defined by the DLFEAT field at byte offset 33 of the Identify Namespace data structure. DLFEAT bits 2:0 = 000b means not reported, 001b means deallocated reads return all 00h bytes (the NVMe equivalent of SATA DZAT), and 010b means deallocated reads return all FFh bytes.
The wire-level command does not physically erase NAND. It queues a deallocation hint in the controller's internal mapping structures. The FTL updates the logical-to-physical table so the affected LBAs no longer point at the original pages; those pages are marked invalid in the block's page validity bitmap. The NAND cells still hold their charge states until the controller selects that block for erase during the next garbage collection pass.
How Does PC-3000 SSD Read NAND Before Garbage Collection Runs?
PC-3000 SSD puts the controller into a vendor-specific diagnostic mode before the firmware's garbage collection routine initializes. In diagnostic mode, the controller accepts raw NAND read commands without executing any background operations. TRIMmed blocks that haven't been erased yet are readable at the physical page level.
Why Normal Power-On Destroys TRIM-Pending Data
Powering a TRIMmed SSD normally is the single worst thing you can do. The controller boots its firmware, checks the FTL for pending operations, & resumes garbage collection on every block marked as invalid. Aggressive Samsung firmware can erase significant portions of stale blocks in the seconds following power-on. By the time the drive appears in BIOS, the data may already be gone.
This is why consumer recovery software can't help with TRIM scenarios even if the NAND cells still hold data. Connecting the drive to your computer boots the controller normally, which triggers GC before any software can intervene. SATA SSD firmware recovery runs $600–$900; NVMe runs $900–$1,200.
Vendor-Specific Diagnostic Mode Entry
Each controller family has a different procedure for entering diagnostic mode. PC-3000 SSD includes dedicated utilities for Samsung, Phison, & Silicon Motion controllers. The utility sends a vendor-specific command sequence over the SATA or NVMe interface that forces the controller into a low-level service mode. In this mode, the firmware's background task scheduler is disabled.
GC does not run. TRIM queues are not processed. The controller accepts direct NAND page read commands & returns raw cell data without filtering through the FTL's validity markings. Pages that TRIM marked as "invalid" still contain their original charge states because the erase operation never executed.
Raw NAND Page Reading & FTL Reconstruction
Once in diagnostic mode, PC-3000 reads physical NAND pages directly. This bypasses the controller's LBA-to-PBA mapping. The tool reads every page in every block, including blocks the controller considers invalid. Each page contains the original data plus ECC (error correction code) metadata that the tool uses to verify data integrity.
After the raw read, PC-3000 reconstructs the Flash Translation Layer mapping table to reassemble files from the physical page data. The FTL maps logical block addresses to physical NAND pages. Without this reconstruction, the raw page dump is just a stream of unordered 4KB-16KB fragments. The PC-3000's controller-specific algorithms know each family's FTL structure & can rebuild the mapping even when the controller's own FTL copy is corrupted or incomplete.
For encrypted SSDs (most NVMe drives & SATA drives with TCG Opal), the raw NAND pages are AES-256 ciphertext. Reading them without the controller's decryption key produces unreadable data. In those cases, the only path is reviving the original controller through board-level repair so it can decrypt the NAND contents with its own key material. Chip-off NAND extraction on an encrypted SSD yields only ciphertext.
Why Recovery Software Fails After TRIM
Recovery software reads sectors through the OS storage driver. After TRIM, the controller returns zeros for those sectors, even if the physical NAND has not been erased yet. Software cannot distinguish between a TRIMmed block and a block that was never written to. Both read as zeros.
Tools like Disk Drill, R-Studio, Recoverit, and TestDisk all operate above the SSD controller. They send standard read commands through the SATA or NVMe interface. The controller intercepts these reads and, for TRIMmed LBAs, returns zeros before the software ever touches the NAND. The data may physically exist on the flash, but the controller refuses to expose it through normal host commands.
The PC-3000 bypasses the controller's host interface. It communicates with the controller using vendor-specific diagnostic commands that access raw NAND pages, ignoring the FTL's validity markings. If the physical cells have not been erased by GC, PC-3000 can read the original page data regardless of the controller's TRIM status table.
Why Does a Graceful Shutdown Destroy TRIM-Pending Data?
A graceful OS shutdown (Start > Shut Down) takes 10-30 seconds while flushing caches, closing processes, & writing final log entries. The SSD stays fully powered during this window. The controller uses every microsecond of idle time to run garbage collection on TRIMmed blocks. Pulling the power cable is the only response that stops GC before it erases your data.
Windows shutdown writes to the registry hive, flushes NTFS journal entries, & signals each running service to stop. macOS writes to the Unified Log & flushes APFS metadata. These write bursts are separated by micro-idle gaps while the OS waits for services to acknowledge the shutdown signal. Aggressive Samsung firmware reclaims stale blocks during those idle gaps. A normal 10-30 second shutdown provides ample background time for the controller to irreversibly erase significant portions of TRIMmed data.
Immediate Power Isolation Procedure
On a desktop: hold the power button for 5 seconds or pull the ATX power cable from the back of the PSU. On a laptop: hold power for 5 seconds, then disconnect the battery if it's removable. For an NVMe M.2 drive: shut down via forced power-off, then physically remove the M.2 drive from the motherboard before shipping. For a SATA SSD: disconnect both the SATA data cable & SATA power connector.
Removing power deprives the controller of the ~20V erase voltage it needs to apply Fowler-Nordheim tunneling pulses to the NAND floating gates. Without that voltage, the controller can't erase a single cell. The drive freezes in its current state. Ship it to our Austin, TX lab without reconnecting it to any system. SATA SSD evaluation is free; recovery starts at $200. NVMe recovery starts at $200.
Enterprise SSDs & Power Loss Protection
Enterprise SSDs include PLP (Power Loss Protection) capacitors on the PCB. These tantalum or ceramic capacitors store enough charge to keep the controller alive for 20-50ms after external power disappears. That's enough time for the controller to flush its DRAM write cache & complete any in-progress page writes to the NAND.
PLP is good for data integrity during unexpected power outages. It's bad for TRIM recovery. When you pull the power cable from an enterprise Samsung PM9A3 or Intel DC P4610, the PLP capacitors keep the controller running long enough to process pending TRIM queue entries & erase stale blocks. Consumer SSDs like the Samsung 870 EVO or WD Blue SN580 lack PLP capacitors. Pulling the cable cuts power instantly, which can leave TRIMmed blocks intact because the controller lost its erase voltage mid-operation.
| Action | Power-Off Duration | GC Opportunity | Recovery Impact |
|---|---|---|---|
| Graceful shutdown (Start > Shut Down) | 10-30 seconds | Multiple idle windows; controller erases dozens of blocks | TRIMmed data likely gone |
| Hold power button 5 seconds | ~5 seconds | Minimal; controller may erase a few blocks | Most TRIMmed blocks survive |
| Pull ATX cable / disconnect drive | Instant (consumer) / 20-50ms (enterprise PLP) | None (consumer) / brief flush window (enterprise PLP) | Best chance for consumer SSDs; enterprise PLP may still flush TRIM queue |
| Sleep / Hibernate | Drive stays powered in S3; powered off in S4 | S3 sleep: continuous GC. S4 hibernate: writes ~8-16GB then cuts power | Sleep is as bad as leaving the drive running; hibernate writes then powers off |
How Does Data Survive in the Over-Provisioned Area After TRIM?
The over-provisioned (OP) area holds physical NAND blocks that the controller keeps outside the user-addressable LBA range. These blocks serve garbage collection, wear leveling, and bad-block replacement. After a TRIM command, stale copies of deleted pages can end up inside the OP pool if the wear-leveling routine migrated them before erase. The pages remain readable through direct NAND access until the controller selects those OP blocks for its next erase cycle.
Factory OP, Dynamic OP, & User OP
Consumer SATA and NVMe SSDs typically ship with roughly 7% factory OP, often derived from the binary-to-decimal capacity difference (for example, 512 GiB of raw NAND exposed as a 500 GB / ~465 GiB LBA namespace). Enterprise drives ship with 28% or more, reserved to sustain steady-state random write performance under constant garbage collection pressure. Dynamic OP expands the pool whenever free-block counts fall below the controller threshold, temporarily borrowing user-addressable blocks. User OP is the portion the administrator leaves unpartitioned; the controller treats unmapped LBAs as extra free blocks.
Wear-Leveling Migration of Stale Pages
Before a block is erased, the controller copies its valid pages to a new free block so the original can be released. Static wear leveling extends this behavior to rarely-updated data: the controller periodically moves cold pages into blocks with higher erase counts to equalize wear. When TRIM marks pages invalid shortly after a wear-leveling migration, the original source block may sit in the OP pool with its contents intact until the block allocator reaches it. A page that was logically deleted from the user LBA space can therefore persist physically inside the OP area for minutes to hours, depending on write pressure and block allocation order.
Chip-Off NAND Reachability of OP Blocks
The OP area is a controller-firmware abstraction. At the NAND die level, every block carries the same physical address regardless of whether the FTL maps it into user LBA space or reserves it for OP. Powering a NAND die on an external programmer after chip-off extraction exposes every physical page, including pages the controller considered OP reserve. The FTL metadata is needed to reassemble logical files, and on self-encrypting drives the raw pages are AES-256 ciphertext that cannot be decrypted without the controller's key material.
Conditions Under Which OP Survivability Matters
OP-area survivability is load-bearing only when the drive is isolated from power before the controller completes its queued erases. Immediate power disconnection after deletion halts GC mid-sequence and freezes the OP pool in whatever state the controller left it. Firmware failure that hangs the GC scheduler produces the same freeze. Queued TRIM commands that the host sent but the controller never acknowledged (for example, pending DSM operations in the SATA NCQ queue at the moment of a hard power cut on a consumer SSD without PLP) leave the FTL in an intermediate state where the affected ranges have not yet been flagged invalid. Enterprise drives with Power Loss Protection capacitors flush pending TRIMs during an outage, which is good for data integrity and bad for recovery. Any recovery path that depends on OP survival requires the drive to arrive at the lab without a second power-on.
Frequently Asked Questions
Can you recover data from an SSD after TRIM has run?
Once the SSD controller completes garbage collection on TRIMmed blocks, the NAND cells are erased and reset to an unprogrammed state (0xFF). No lab, no tool, no technique can reconstruct data from a physically erased cell. Recovery depends on whether garbage collection has executed. If the drive lost power or suffered a firmware failure before GC ran, the data may still be physically present on the NAND. SATA SSD recovery starts at $200. Free evaluation, no data = no charge.
How long does it take for TRIM to erase data?
TRIM itself is instant; it marks blocks as invalid in the controller's mapping table. The actual erasure happens during garbage collection, which runs in the background when the controller has idle time. On some drives, GC begins within seconds of TRIM. On others, it may take minutes or hours depending on workload and firmware scheduling. The gap between TRIM and GC is the only recovery window.
Does disabling TRIM help with data recovery?
If you disable TRIM before deleting files, the controller does not receive the invalidation command. Deleted files remain physically intact on the NAND until the controller overwrites them with new data. This makes SSD recovery similar to HDD recovery: the data persists until the physical blocks are reused. On Windows, run 'fsutil behavior set DisableDeleteNotify 1' in an elevated command prompt to disable TRIM on SATA drives.
Is TRIM the same as Secure Erase?
No. TRIM marks specific logical blocks as no longer needed, and the controller erases them during garbage collection. Secure Erase is a drive-level ATA command that wipes every cell on the entire drive in one operation, including reserved and over-provisioned areas. TRIM is selective and incremental; Secure Erase is total and immediate. Both result in unrecoverable data, but TRIM only affects the blocks the OS reported as deleted.
Does TRIM work on external USB SSDs?
It depends on the USB bridge chip. Many USB-to-SATA and USB-to-NVMe enclosures do not pass TRIM commands through to the drive. If your external SSD is connected via a bridge that blocks TRIM, deleted files remain on the NAND until overwritten by new data. This means external SSDs connected through USB often retain deleted data longer than internal drives where TRIM is active.
Does the file system handle TRIM differently than the controller?
Yes. The OS file system (NTFS, ext4, APFS) sends TRIM commands when files are deleted. The SSD controller receives these commands and adds the affected blocks to its garbage collection queue. The file system and controller operate independently: the OS considers the data gone immediately after sending TRIM, but the controller may not erase the physical NAND cells until GC runs during idle time. This gap between the OS marking data as deleted and the controller physically erasing it is the recovery window.
Can you recover data from a Mac SSD after TRIM?
APFS sends TRIM when files are deleted. Apple's T2 and M-series chips bind AES-256 Media Encryption Keys to the Secure Enclave on the logic board. If the controller dies, desoldering NAND yields only ciphertext because the MEK is bound to the Secure Enclave secure boundary and cannot be extracted from silicon. Board-level logic board repair is the only recovery path for Mac SSDs. Chip-off produces unreadable data. NVMe recovery starts at $200; circuit board repair runs $600–$900. No data, no charge.
Does Linux TRIM work differently than Windows TRIM?
Linux offers two TRIM modes: continuous TRIM via the discard mount option, which sends TRIM on every file deletion, and periodic TRIM via fstrim.timer, which batches all pending TRIMs into a weekly run. With periodic TRIM, deleted data can survive on the NAND for up to 7 days between fstrim executions. dm-crypt blocks TRIM by default to prevent metadata leakage; passing TRIM through encrypted volumes requires the explicit allow-discards flag in /etc/crypttab. If dm-crypt is configured without allow-discards, TRIM never reaches the SSD controller and deleted data persists indefinitely.
What is Deterministic Read Zero After TRIM (DZAT)?
DZAT is an NVMe specification behavior where the SSD controller returns all zeros for any LBA that has been TRIMmed, even before garbage collection physically erases the NAND cells. Recovery software sees only zeros for those blocks. The actual NAND flash may still hold the original charge states, but the controller intercepts all host reads and substitutes zero-filled responses. PC-3000 SSD bypasses DZAT by entering vendor-specific diagnostic mode, which reads raw NAND pages without going through the controller's host command processing layer.
What happens if an SSD loses power during a TRIM operation?
If power is lost after the OS sends TRIM but before the controller updates its FTL mapping tables, the controller may not record that those blocks were TRIMmed. On next power-up, the blocks remain marked as valid in the FTL, and the data is intact. If power is lost during garbage collection (mid-erase), the affected block may contain partially erased data. PC-3000 SSD can read the surviving pages from partially erased blocks and reconstruct what remains. SATA SSD recovery starts at $200; NVMe starts at $200.
Do Samsung SSDs erase TRIMmed data faster than other brands?
Samsung controllers (Elpis, Pascal, Phoenix) are generally among the more aggressive at prioritizing background garbage collection. Samsung firmware prioritizes NAND endurance by reclaiming stale blocks during idle periods. Phison and Silicon Motion controllers are generally less aggressive, with GC timing depending on free block availability and firmware configuration. For any Samsung SSD with deleted data, treat the recovery window as short. Power off the drive immediately and do not reconnect it to a running system.
What is the difference between DRAT and DZAT?
DRAT (Deterministic Read After TRIM) returns a consistent fixed payload for TRIMmed blocks; the controller picks one value and sticks with it. DZAT (Deterministic Zeroes After TRIM) is stricter: the controller returns absolute zeros for any TRIMmed LBA. NVMe drives specify post-deallocate behavior through the DLFEAT field; modern NVMe SSDs typically report DLFEAT=001b (reads return all 00h bytes, the NVMe equivalent of SATA DZAT) or 010b (reads return all FFh bytes). In all cases, recovery software sees only the specified deterministic pattern for deleted blocks, even if the physical NAND cells haven't been erased yet. The difference matters for enterprise RAID arrays: DZAT guarantees parity consistency across degraded array members. For supported controllers (Phison, Silicon Motion), PC-3000 SSD can bypass the protocol layer and read raw NAND pages in diagnostic mode. SATA SSD firmware recovery runs $600–$900.
Should I shut down my computer or pull the plug after accidental SSD deletion?
Pull the plug. A graceful OS shutdown takes 10-30 seconds while flushing caches, writing logs, and closing processes. The SSD stays powered the entire time, and the controller uses idle time to run garbage collection on TRIMmed blocks. Aggressive Samsung firmware can reclaim significant portions of stale NAND during a normal shutdown. Hold the power button for 5 seconds, pull the ATX power cable, or physically disconnect the drive from the motherboard. Removing power deprives the controller of the voltage it needs to apply erase pulses to the NAND. Ship the drive to our Austin, TX lab without reconnecting it to any system. SATA SSD evaluation is free; recovery starts at $200.
Do enterprise SSDs handle TRIM differently than consumer SSDs?
Yes. Enterprise SSDs enforce strict DZAT to maintain RAID parity consistency across array members. Consumer SSDs use aggressive garbage collection to keep write speeds high; enterprise SSDs prioritize steady-state performance and data integrity. Enterprise drives also include Power Loss Protection (PLP) capacitors that keep the controller alive long enough to flush pending TRIM queues during a sudden power outage. PLP is good for data integrity but bad for recovery: it processes pending TRIMs even when you pull the power cable. Consumer SSDs without PLP lose power abruptly, which can leave TRIMmed blocks intact on the NAND. NVMe enterprise recovery starts at $200.
Related SSD Recovery Pages
Full SSD recovery service overview and pricing
Detailed analysis of post-TRIM recovery scenarios
Firmware failure stops garbage collection
Software vs. hardware-level recovery
Physical NAND extraction for dead controllers
SSD lost data after deletion?
Free evaluation determines if TRIM erased your data or if it is still recoverable. SATA: $200–$1,500. NVMe: $200–$2,500. No data, no fee.