How to repair a broken/unmountable btrfs filesystem
The below are the recommended steps for any major btrfs filesystem issue, especially if its unmountable. Reading dmesg or syslog might help you identify which step you could skip to in order to fix a particular problem, but the initial steps are normally useful regardless as btrfs scrub is a very safe repair tool.
- Boot to a suitable alternative system, such as a rescue shell, different installation of openSUSE, a liveCD, or an openSUSE installation DVD. The installation DVD for the version of openSUSE you are running is usually a good choice as it will certainly use the same kernel/btrfs version. A recent Tumbleweed disk might be better as it will include newer kernel/btrfs
- Go to a suitable console and make sure you do the below as root
- Try to mount your partition to /mnt, just to confirm it's really broken
mount /dev/sda1 /mnt
- If it mounts - are you sure it's broken? if Yes - run
btrfs scrub start /mnt
to scrub the system, and
btrfs scrub status /mnt
to monitor it
- If it doesn't mount, try to scrub the device just in case it works
btrfs scrub start /dev/sda1
and
btrfs scrub status /dev/sda1
to monitor. Once complete, try mounting, if yes, you're fixed.
- If scrubbing is not an option or does not resolve the issue
then instead try mount -o usebackuproot
mount -o usebackuproot /dev/sda1 /mnt
- Run "btrfs check <device>"
btrfs check /dev/sda1
This isn't going to help, but save the log somewhere, it will be useful for the bug report.
- Seriously consider running "btrfs restore <device> <somewhereto copy data>"
btrfs restore /dev/sda1 /mnt/usbdrive
This won't fix anything but it will scan the filesystem and recover everything it can to the mounted device. This especially useful if your btrfs issues are actually caused by failing hardware and not btrfs fault.
- Run "btrfs rescue super-recover <device>"
btrfs rescue super-recover /dev/sda1
Then try to mount the device normally. If it works, stop going.
- Run "btrfs rescue zero-log <device>"
btrfs rescue zero-log /dev/sda1
Then try to mount the device normally. If it works, stop going.
- Run "btrfs rescue chunk-recover <device>"
btrfs rescue chunk-recover /dev/sda1"
This will take a LONG while. Then try to mount the device normally. If it works, stop going.
- If you didn't run it earlier, be sure to now run "btrfs restore <device> <somewhere to copy data>"
btrfs restore /dev/sda1 /mnt/usbdrive
- Failure to use btrfs restore at this point but continuing to attempt repairs means you are at a very high risk of data loss. It is advisable to use btrfs restore to recover as much data as possible before continuing.
- Now, ONLY NOW, try btrfsck aka "btrfs check --repair <device>"
btrfs check --repair /dev/sda1