Tape backup hits ERROR_FILEMARK_DETECTED (0x0000044D) — real fix
A tape drive hit a filemark marker and stopped reading. Most often the tape was ejected or overwritten mid-job. Here's what actually works.
1. The tape was ejected mid-write — and now it won't read past the filemark
What's actually happening here is that the tape drive wrote a filemark (a special marker that separates one backup set from the next) but never finished the file that followed it. This leaves the tape in a state where the drive returns ERROR_FILEMARK_DETECTED (0x0000044D) on any read that passes that marker. The tape isn't physically damaged — it's just logically incomplete.
This most commonly happens when someone hits the eject button on a tape drive while a backup is still running, or when the backup software crashes mid-stream. I've also seen it happen with older LTO-3 drives where the tape tension sensor misfired and the drive auto-ejected. The result is the same: the drive sees a filemark, stops, and throws the error.
What to do first — check your backup software's log
Before you touch the tape, open your backup software's job log. Look for the last completed file before the error. In Backup Exec, for example, the log will show something like Filemark detected at position 4. That tells you which backup set ended cleanly and which one is truncated. If the last complete backup is from two nights ago, you might not even need the broken file.
If the filemark is at position 1 (meaning the first backup set is incomplete), you're looking at a blank tape scenario — skip to the section about repositioning past the filemark.
Fix #1: Skip past the filemark using fsutil or tape tool
Windows doesn't expose a simple GUI for this, but the underlying tape driver does support skipping filemarks. The quickest way is with a small command-line tool like tapeutil from the Windows Driver Kit, or you can use a PowerShell script that calls SetTapePosition with the filemark flag. Here's the pattern:
tapeutil -skipfm 1
This tells the drive to skip one filemark forward. After that, you can try reading the tape again. If the tape was in the middle of writing, you'll probably get a ERROR_NO_DATA_DETECTED error next — that's fine. It just means the tape is blank after that point. You can then overwrite from there.
Why this works: The drive's firmware treats a filemark as a hard stop until you explicitly tell it to move past it. The skipfm command resets the position pointer to after the marker, allowing the drive to continue reading whatever comes next (or fail cleanly if it's truly empty).
2. The backup software itself is corrupting the tape catalog
This one's trickier. Your tape might be physically fine and logically complete, but the backup software's catalog on disk — the index that maps file positions to actual data — is wrong. That catalog says "file 3 starts at position 10" but the tape was actually written with file 3 starting at position 11. When the software tries to read file 3, the drive hits the unexpected filemark at position 10 and throws 0x0000044D.
I've seen this most often with Backup Exec 2012 and NetBackup 7.x after a catalog rebuild. The software reads the tape header (which is fine) but then relies on its corrupted internal database for subsequent reads. The fix is to force a full tape re-catalog from scratch.
Fix #2: Force a raw re-catalog from the tape
Don't use the "quick catalog" or "import existing" options — those just read the cached metadata on the tape header. You need to do a full media inventory that reads every block on the tape, ignoring the existing catalog entirely.
In Backup Exec, that's the Inventory operation (not Catalog). Select the tape, choose Full Inventory, and let it run. This can take hours for an LTO-4 tape (800 GB), but it rebuilds the block-by-block map directly from the tape. Once it finishes, try the restore again.
If you're using a bare-metal tool like dd on Linux to read the tape, the equivalent is:
dd if=/dev/st0 bs=64k of=tape_image.dd conv=noerror,sync
The conv=noerror,sync flag tells dd to keep going when it hits a filemark — it pads the bad spot with nulls. You'll get a corrupted file at that position, but you'll recover every byte before and after the filemark. That's often good enough to extract the last backup set from a damaged tape.
3. The tape drive's firmware is mismatched with the tape media
This is rare but real. LTO drives have firmware that controls how they handle filemarks, and different tape media (e.g., LTO-5 vs. LTO-6) can have different filemark densities. If your drive's firmware is too old, it might misinterpret a filemark written by a newer drive — specifically, it sees the marker but can't locate the next data block and assumes the tape ends there. You get 0x0000044D even though the tape has valid data past the marker.
This happened to me with an HP Ultrium 3280 (LTO-4) trying to read a tape written by an IBM LTO-5 drive. The IBM drive wrote a sparse filemark (smaller marker block to save space), and the HP drive didn't recognize the format. The error code was exactly 0x0000044D.
Fix #3: Update the tape drive firmware
Go to your drive manufacturer's support site (HP/IBM/Tandberg) and download the latest firmware. For the HP LTO-4 drives, version H54S or later fixed this exact issue. Flash the drive, reboot the server, and try reading the tape again. You can check your current firmware version with:
tapeutil -info
If updating doesn't help, you'll need to read the tape on a drive from the same manufacturer that wrote it. This is the only reliable workaround — borrow a matching drive from a friendly IT shop for a day.
Quick-reference summary
| Cause | Diagnostic clue | Fix |
|---|---|---|
| Ejected mid-write | Backup log shows incomplete job | Skip filemark with tapeutil -skipfm 1 |
| Corrupted software catalog | Catalog says one thing, tape has another | Full media inventory / dd conv=noerror |
| Drive firmware mismatch | Reads fine on original drive, fails on another | Update drive firmware, or use matching drive |
Was this solution helpful?