[arch-general] BTRFS scrub from systemd unit

Sean Greenslade sean at seangreenslade.com
Wed Mar 19 20:41:27 EDT 2014


Hi, folks. I've been noodling over this rather odd issue I've been
having, and I thought I'd get a second opinion on things. I've got a
server with four hard disks, set up in two (separate) BTRFS RAID1
mounts. I just recovered from a bout of SATA signalling issues (which
BTRFS did a marvellous job of saving my data from), and I'd like to
periodically fire off scrubs to ensure my data's OK. If I manually run a
scrub:

----------------------------------------------------
$ sudo btrfs scrub start /media/data/
scrub started on /media/data/, fsid 490b8b7c-59c4-45dc-ac63-6a90f0966776 (pid=14434)
----------------------------------------------------

Then things work as they should:

----------------------------------------------------
$ sudo btrfs scrub status /media/data/
scrub status for 490b8b7c-59c4-45dc-ac63-6a90f0966776
		scrub started at Wed Mar 19 20:27:14 2014, running for 40 seconds
		total bytes scrubbed: 12.70GiB with 0 errors

$ sudo btrfs scrub cancel /media/data/
scrub cancelled

$ sudo btrfs scrub status /media/data/
scrub status for 490b8b7c-59c4-45dc-ac63-6a90f0966776
        scrub started at Wed Mar 19 20:27:14 2014 and was aborted after 89 seconds
		total bytes scrubbed: 28.17GiB with 0 errors
----------------------------------------------------
	
So far, so good. So I made a systemd unit to trigger the scrub:

----------------------------------------------------
$ cat /etc/systemd/system/diskscrub.service 
[Unit]
Description=Disk scrub runner

[Service]
Type=oneshot
ExecStart=/usr/bin/btrfs scrub start /media/data
----------------------------------------------------

Now, this unit starts fine, and exits immediately as it should, being a
oneshot service and given that the btrfs scrub command backgrounds
itself (or something? I'm not exactly sure what it does, but it returns
immediately). However, the scrub status does not work and the scrub
cannot be canceled:

----------------------------------------------------
$ sudo systemctl start diskscrub

$ sudo systemctl status diskscrub
diskscrub.service - Disk scrub runner 
Loaded: loaded (/etc/systemd/system/diskscrub.service; static)
Active: inactive (dead)

Mar 19 20:33:38 rat systemd[1]: Starting Disk scrub runner...
Mar 19 20:33:38 rat systemd[1]: Started Disk scrub runner.
Mar 19 20:33:38 rat btrfs[15221]: scrub started on /media/data, fsid 490b8b7c-59c4-45dc-ac63-6a90f0966776 (pid=15222)

$ sudo btrfs scrub status /media/data/
scrub status for 490b8b7c-59c4-45dc-ac63-6a90f0966776
	no stats available
	total bytes scrubbed: 0.00 with 0 errors

$ sudo btrfs scrub cancel /media/data/
ERROR: scrub cancel failed on /media/data/: not running
----------------------------------------------------

New scrubs cannot be started until the stale/invalid scrub states are
deleted (rm -f /var/lib/btrfs/*). 

So I'm stumped, here. Anyone have any clue as to what's happening?

Thanks,

--Sean


More information about the arch-general mailing list