π
2014-04-26 01:01
in Btrfs, Linux
How to cancel a btrfs scrub that won't cancel
In some cases, btrfs scrub can be interrupted in a way that leaves it in a half state. State is stored in /var/lib/btrfs/scrub.status.UUID and if the relevant file indicates that scrub is still running (even though it is not), a new scrub cannot be started, nor the already stopped one cancelled.
This is fixed as shown below:
Problem:
gargamel:~# btrfs scrub start -d /dev/mapper/dshelf1
ERROR: scrub is already running.
To cancel use 'btrfs scrub cancel /dev/mapper/dshelf1'.
gargamel:~# btrfs scrub status /dev/mapper/dshelf1
scrub status for 6358304a-2234-4243-b02d-4944c9af47d7
scrub started at Tue Apr 8 08:36:18 2014, running for 46347 seconds
total bytes scrubbed: 5.70TiB with 0 errors
gargamel:~# btrfs scrub cancel /dev/mapper/dshelf1
ERROR: scrub cancel failed on /dev/mapper/dshelf1: not running
Fix:
gargamel:~# perl -pi -e 's/finished:0/finished:1/' /var/lib/btrfs/*
Verification:
gargamel:~# btrfs scrub status /dev/mapper/dshelf1
scrub status for 6358304a-2234-4243-b02d-4944c9af47d7
scrub started at Tue Apr 8 08:36:18 2014 and finished after 46347 seconds
total bytes scrubbed: 5.70TiB with 0 errors
gargamel:~# btrfs scrub start -d /dev/mapper/dshelf1
scrub started on /dev/mapper/dshelf1, fsid 6358304a-2234-4243-b02d-4944c9af47d7 (pid=24196) |