Linux Btrfs filesystem development
 help / color / mirror / Atom feed
From: "Henri Hyyryläinen" <henri.hyyrylainen@gmail.com>
To: Qu Wenruo <wqu@suse.com>, linux-btrfs@vger.kernel.org
Subject: Re: How to remove an unremovable file and directory?
Date: Sun, 5 Oct 2025 00:53:20 +0300	[thread overview]
Message-ID: <afea5a6c-96a6-4928-aa63-275a6c8f8030@gmail.com> (raw)
In-Reply-To: <f2b72e44-9134-4cc5-99b0-fb51c2673cde@suse.com>

> One extra thing, at the time of the initial "btrfs check --repair", 
> there is no running dev-replace/balance or whatever running?
>
> Although those operations will be automatically paused by unmount,
> btrfs check is not going to be able to handle some of those paused 
> operations. 

Is there a way for me to check that without mounting the filesystem? As 
far as I could find, none of the balance / scrub commands allow working 
on an unmounted filesystem. So I couldn't find out if I had any in 
canceled state.

Though, I'm pretty sure I let the last scrub and balance operation I 
tried to fully complete before starting using the check and repair 
commands. But I'm not absolutely certain that I didn't try one of those 
a last time and didn't let it fully complete.

I'll start that "btrfs check --readonly" command now. And I'll report 
back once it is done (hopefully by the morning in my timezone).

- Henri Hyyryläinen

Qu Wenruo kirjoitti 4.10.2025 klo 23.55:
>
>
> 在 2025/10/5 07:14, Qu Wenruo 写道:
>>
>>
>> 在 2025/10/5 04:13, Henri Hyyryläinen 写道:
>>> Hello again.
>>>
>>> It took over 3 days, but the btrfs check --repair has now completed 
>>> seemingly successfully. I mostly saw output about the file being 
>>> placed in lost+found and and directory size being corrected. 
>>> However, there were some messages about mismatch of used bytes.
>>>
>>> Unfortunately it seems like the situation has gotten worse since the 
>>> repair, because now I cannot mount the filesystem at all. Instead I 
>>> get an error like this:
>>>
>>>> BTRFS error (device sdc): dev extent physical offset 19977638903808 
>>>> on devid 4 doesn't have corresponding chunk
>>>> BTRFS error (device sdc): failed to verify dev extents against 
>>>> chunks: -117
>>>> BTRFS error (device sdc): open_ctree failed: -117
>>> Even if I remove that one problematic device physically from my 
>>> computer, the filesystem still refuses to mount with the same error. 
>>> Maybe the problems with the device replace are again showing up with 
>>> the actual size of the hard drive not being used correctly? I cannot 
>>> try to remove the device slack as I cannot mount the filesystem.
>>
>> Nope, this is a different problem, and not related to dev replace.
>>
>> Unfortunately btrfs check has not implemented any repair for that.
>>
>> Overall if the dev extent is found but not corresponding chunk, it 
>> should still be fine but some space unavailable.
>>
>> But the kernel is overly cautious on chunk tree, as it's a very 
>> important and basic functionality.
>>
>> Please provide the full "btrfs check --readonly" output so that we 
>> can evaluate and add the missing repair functionality.
>
> One extra thing, at the time of the initial "btrfs check --repair", 
> there is no running dev-replace/balance or whatever running?
>
> Although those operations will be automatically paused by unmount,
> btrfs check is not going to be able to handle some of those paused 
> operations.
>>
>> Thanks,
>> Qu
>>
>>>
>>> I did try to run a repair again, and this time I got a bunch of 
>>> messages like:
>>>
>>>> repair deleting extent record: key [65795546775552,169,0]
>>>> adding new tree backref on start 65795546775552 len 16384 parent 
>>>> 65811674234880 root 65811674234880
>>>> adding new tree backref on start 65795546775552 len 16384 parent 0 
>>>> root 14499
>>>> adding new tree backref on start 65795546775552 len 16384 parent 
>>>> 65791012274176 root 65791012274176
>>>> adding new tree backref on start 65795546775552 len 16384 parent 
>>>> 65806385807360 root 65806385807360
>>>> Repaired extent references for 65795546775552
>>>> ref mismatch on [65795548233728 16384] extent item 5, found 4
>>
>> That's fixing some backref mismatch, which you can ignore unless 
>> "btrfs check --reaonly" later reports new problems.
>>
>>> But the filesystem still refuses to mount with the exact same error. 
>>> I did not let the repair run entirely as it would have likely taken 
>>> another 3 days. What should I do? This time I'm not finding any good 
>>> information on what to do. For now, I've started the repair again, 
>>> but it doesn't exactly sound like it is even fixing anything now. 
>>> Still, I'll let it continue. The output so far is:
>>>
>>>> [1/8] checking log skipped (none written)
>>>> [2/8] checking root items
>>>> Fixed 0 roots.
>>>> [3/8] checking extents
>>>> Device extent[4, 19977638903808, 1073741824] didn't find the 
>>>> relative chunk.
>>>> super bytes used 49454738989056 mismatches actual used 49454738923520
>>>> Device extent[4, 19977638903808, 1073741824] didn't find the 
>>>> relative chunk.
>>>> super bytes used 49454739005440 mismatches actual used 49454738956288
>>>> Device extent[4, 19977638903808, 1073741824] didn't find the 
>>>> relative chunk.
>>>> super bytes used 49454739021824 mismatches actual used 49454738972672
>>>> Device extent[4, 19977638903808, 1073741824] didn't find the 
>>>> relative chunk.
>>>> super bytes used 49454739005440 mismatches actual used 49454738972672
>>>
>>>
>>> If I was able to somehow remove that one logically corrupt devid 
>>> from the filesystem, or somehow correct the size, that would 
>>> hopefully allow me to rebuild from the raid10 data then, but I can't 
>>> do those with the unmountable filesystem.
>>>
>>>
>>> - Henri Hyyryläinen
>>>
>>> Qu Wenruo kirjoitti 30.9.2025 klo 0.52:
>>>>
>>>>
>>>> 在 2025/9/30 02:41, Henri Hyyryläinen 写道:
>>>>> Hello,
>>>>>
>>>>> I hope this is the right place to ask about a filesystem problem. 
>>>>> Really shortly put, I have a file that both exists and doesn't and 
>>>>> prevents the containing directory from being deleted. No matter 
>>>>> what variant of rm and inode based deletion I try I get an error 
>>>>> about the file not existing, and I also cannot try to read the 
>>>>> file, but if I try to delete the directory I get an error that it 
>>>>> is not empty (so the file kind of exists). Trying to ls the 
>>>>> directory also gives a file doesn't exist error.
>>>>>
>>>>> Here's what btrfs check found, which I hope does better in 
>>>>> illustrating the problem:
>>>>>
>>>>>> root 5 inode 25953213 errors 200, dir isize wrong
>>>>>> root 5 inode 27166085 errors 2000, link count wrong
>>>>>>         unresolved ref dir 25953213 index 7 namelen 33 name 
>>>>>> Microsoft.AspNetCore.Metadata.dll filetype 1 errors 1, no dir item
>>>>>
>>>>> I've tried everything I've found suggested including a full scrub, 
>>>>> balance with -dusage=75 -musage=75, resetting file attributes, 
>>>>> deleting through the find command, and even some repair mount 
>>>>> flags that don't seem to exist for btrfs.
>>>>
>>>> The fs is corrupted, thus none of those will help.
>>>> I'm more interested in how the corruption happened.
>>>>
>>>> Did you use some tools other than btrfs kernel module and btrfs-progs?
>>>> Like ntfs2btrfs or winbtrfs?
>>>>
>>>> IIRC certain versions have some bugs related to extent tree, but 
>>>> should not cause this problem.
>>>>
>>>>
>>>> The other possibility is hardware memory bitflip, which is more 
>>>> common than you thought (almostly one report per month)
>>>>
>>>> In that case, a full memtest is always recommended, or you will hit 
>>>> all kinds of weird corruptions in the future anyway.
>>>>
>>>>
>>>> With a full memtest proving the memory hardware is fine, then 
>>>> "btrfs check --repair" should be able to fix it.
>>>>
>>>> Thanks,
>>>> Qu
>>>>
>>>>
>>>>> What I haven't tried is a full rebalance with no filters, but I 
>>>>> did not try that yet as it would take quite a long time and if it 
>>>>> only moves data blocks around without recomputing directory items, 
>>>>> it doesn't seem like the right tool to fix my problem. So I'm 
>>>>> pretty much stuck and to me it seems like my only option is to run 
>>>>> btrfs check with the repair flag, but as that has big warnings on 
>>>>> it I thought I would try asking here first (sorry if this is not 
>>>>> the right experts group to ask). So is there still something I can 
>>>>> try or am I finally "allowed" to use the repair command? Here's 
>>>>> the full output I got from btrfs check:
>>>>>
>>>>>> Opening filesystem to check...
>>>>>> Checking filesystem on /dev/sdc
>>>>>> UUID: 2b4ad16d-e456-4adf-960b-dca43560b98b
>>>>>> [1/8] checking log skipped (none written)
>>>>>> [2/8] checking root items
>>>>>> [3/8] checking extents
>>>>>> [4/8] checking free space tree
>>>>>> We have a space info key for a block group that doesn't exist
>>>>>> [5/8] checking fs roots
>>>>>> root 5 inode 25953213 errors 200, dir isize wrong
>>>>>> root 5 inode 27166085 errors 2000, link count wrong
>>>>>>         unresolved ref dir 25953213 index 7 namelen 33 name 
>>>>>> Microsoft.AspNetCore.Metadata.dll filetype 1 errors 1, no dir item
>>>>>> root 14428 inode 25953213 errors 200, dir isize wrong
>>>>>> root 14428 inode 27166085 errors 2000, link count wrong
>>>>>>         unresolved ref dir 25953213 index 7 namelen 33 name 
>>>>>> Microsoft.AspNetCore.Metadata.dll filetype 1 errors 1, no dir item
>>>>>> root 14451 inode 25953213 errors 200, dir isize wrong
>>>>>> root 14451 inode 27166085 errors 2000, link count wrong
>>>>>>         unresolved ref dir 25953213 index 7 namelen 33 name 
>>>>>> Microsoft.AspNetCore.Metadata.dll filetype 1 errors 1, no dir item
>>>>>> root 14475 inode 25953213 errors 200, dir isize wrong
>>>>>> root 14475 inode 27166085 errors 2000, link count wrong
>>>>>>         unresolved ref dir 25953213 index 7 namelen 33 name 
>>>>>> Microsoft.AspNetCore.Metadata.dll filetype 1 errors 1, no dir item
>>>>>> root 14499 inode 25953213 errors 200, dir isize wrong
>>>>>> root 14499 inode 27166085 errors 2000, link count wrong
>>>>>>         unresolved ref dir 25953213 index 7 namelen 33 name 
>>>>>> Microsoft.AspNetCore.Metadata.dll filetype 1 errors 1, no dir item
>>>>>> root 14523 inode 25953213 errors 200, dir isize wrong
>>>>>> root 14523 inode 27166085 errors 2000, link count wrong
>>>>>>         unresolved ref dir 25953213 index 7 namelen 33 name 
>>>>>> Microsoft.AspNetCore.Metadata.dll filetype 1 errors 1, no dir item
>>>>>> root 14544 inode 25953213 errors 200, dir isize wrong
>>>>>> root 14544 inode 27166085 errors 2000, link count wrong
>>>>>>         unresolved ref dir 25953213 index 7 namelen 33 name 
>>>>>> Microsoft.AspNetCore.Metadata.dll filetype 1 errors 1, no dir item
>>>>>> root 14545 inode 25953213 errors 200, dir isize wrong
>>>>>> root 14545 inode 27166085 errors 2000, link count wrong
>>>>>>         unresolved ref dir 25953213 index 7 namelen 33 name 
>>>>>> Microsoft.AspNetCore.Metadata.dll filetype 1 errors 1, no dir item
>>>>>> root 14546 inode 25953213 errors 200, dir isize wrong
>>>>>> root 14546 inode 27166085 errors 2000, link count wrong
>>>>>>         unresolved ref dir 25953213 index 7 namelen 33 name 
>>>>>> Microsoft.AspNetCore.Metadata.dll filetype 1 errors 1, no dir item
>>>>>> root 14547 inode 25953213 errors 200, dir isize wrong
>>>>>> root 14547 inode 27166085 errors 2000, link count wrong
>>>>>>         unresolved ref dir 25953213 index 7 namelen 33 name 
>>>>>> Microsoft.AspNetCore.Metadata.dll filetype 1 errors 1, no dir item
>>>>>> root 14548 inode 25953213 errors 200, dir isize wrong
>>>>>> root 14548 inode 27166085 errors 2000, link count wrong
>>>>>>         unresolved ref dir 25953213 index 7 namelen 33 name 
>>>>>> Microsoft.AspNetCore.Metadata.dll filetype 1 errors 1, no dir item
>>>>>> root 14549 inode 25953213 errors 200, dir isize wrong
>>>>>> root 14549 inode 27166085 errors 2000, link count wrong
>>>>>>         unresolved ref dir 25953213 index 7 namelen 33 name 
>>>>>> Microsoft.AspNetCore.Metadata.dll filetype 1 errors 1, no dir item
>>>>>> root 14550 inode 25953213 errors 200, dir isize wrong
>>>>>> root 14550 inode 27166085 errors 2000, link count wrong
>>>>>>         unresolved ref dir 25953213 index 7 namelen 33 name 
>>>>>> Microsoft.AspNetCore.Metadata.dll filetype 1 errors 1, no dir item
>>>>>> ERROR: errors found in fs roots
>>>>>> found 49400296812544 bytes used, error(s) found
>>>>>> total csum bytes: 48179330432
>>>>>> total tree bytes: 65067483136
>>>>>> total fs tree bytes: 12107431936
>>>>>> total extent tree bytes: 3194437632
>>>>>> btree space waste bytes: 4558984171
>>>>>> file data blocks allocated: 76487982252032
>>>>>>  referenced 60030799097856
>>>>>
>>>>> So hopefully if I'm reading things right, running a repair would 
>>>>> delete just that one file and directory (which itself is a backup 
>>>>> so I will not miss that file at all)?
>>>>>
>>>>> I do not have enough disk space to copy off the entire filesystem 
>>>>> and rebuild from scratch, without doing something like rebalancing 
>>>>> all data from raid10 to single and then removing half the disks, 
>>>>> but I assume that would take at least 4 weeks to process (as I 
>>>>> just replaced a disk which took like a week).
>>>>>
>>>>> As to what originally caused the corruption, I think it was 
>>>>> probably faulty RAM, because up to to like 3 weeks ago I had one 
>>>>> really bad RAM stick in my computer where a certain memory region 
>>>>> always had incorrectly reading bytes. I had seen intermittent 
>>>>> quite high csum errors in monthly scrubs pretty randomly, which 
>>>>> thankfully could almost always be corrected so I didn't have any 
>>>>> major problems even though I had like totally broken RAM in my 
>>>>> computer for who knows how long. So btrfs was able to protect my 
>>>>> data quite impressively from bad RAM.
>>>>>
>>>>> Sorry for getting a bit sidetracked there, but what should I do in 
>>>>> this situation?
>>>>>
>>>>> - Henri Hyyryläinen
>>>>>
>>>>>
>>>>
>>
>>
>

  reply	other threads:[~2025-10-04 21:53 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-09-29 17:11 How to remove an unremovable file and directory? Henri Hyyryläinen
2025-09-29 21:52 ` Qu Wenruo
2025-09-30  8:13   ` Henri Hyyryläinen
2025-10-04 17:43   ` Henri Hyyryläinen
2025-10-04 20:44     ` Qu Wenruo
2025-10-04 20:55       ` Qu Wenruo
2025-10-04 21:53         ` Henri Hyyryläinen [this message]
2025-10-04 22:07           ` Qu Wenruo
2025-10-04 22:36             ` Henri Hyyryläinen
2025-10-04 22:41               ` Qu Wenruo
2025-10-05  8:20                 ` Henri Hyyryläinen
2025-10-05  8:37                   ` Qu Wenruo
2025-10-05 10:44                     ` Henri Hyyryläinen

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=afea5a6c-96a6-4928-aa63-275a6c8f8030@gmail.com \
    --to=henri.hyyrylainen@gmail.com \
    --cc=linux-btrfs@vger.kernel.org \
    --cc=wqu@suse.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox