39 lines
1.7 KiB
Markdown
39 lines
1.7 KiB
Markdown
BTRFS I/O Error Deleter
|
|
=======================
|
|
|
|
## The problem
|
|
I've got a problem: my computer froze while moving a BTRFS partition.
|
|
|
|
Scrubbing did not fix my problem.
|
|
|
|
My scenario:
|
|
- Metadata: RAID1C4
|
|
- System: RAID1C4
|
|
- Data: **Single**
|
|
- Disks: 4
|
|
|
|
Scrubbing would not be able to fix my problem.
|
|
|
|
I knew files were already lost, despite them showing up in file manager with cached thumbnails.
|
|
|
|
## Observed behavior
|
|
Opening files for reading was not a problem, but reading a block with mismatching CSUM resulted in an I/O Error (OS Error code 5). All the times.
|
|
|
|
## Existing solutions
|
|
To remove those references to a content that doesn't exist anymore, [ArchWiki](https://wiki.archlinux.org/index.php/Identify_damaged_files#btrfs), [SuperUser](https://superuser.com/questions/1358686/after-btrfs-scrub-how-do-you-get-the-list-of-affected-files), and [SuperUser](https://superuser.com/questions/858237/finding-files-with-btrfs-uncorrectable-errors) suggested scrubbing, then checking kernel logs (that doesn't include all affected files), and, finally, removing each file.
|
|
|
|
Running as many scrubs as needed over 2TB data on 80MB/s (at best conditions) hard drives (not SSDs) would take... like... "forever". I don't have such a humongous amount of time.
|
|
|
|
## My solution
|
|
After scrubbing once after the disaster and realizing you have unrepairable data on disk, you run this program.
|
|
|
|
It recursively lists files in a directory, opens and reads each one of them to the end. All files that produce an OS Error with code 5 will be deleted (as its data isn't there anymore).
|
|
|
|
You need to run this only once.
|
|
|
|
## Shortcomings
|
|
This code doesn't handle corrupted metadata. (yet)
|
|
|
|
## License
|
|
MIT
|