[arch-general] BTRFS scrub from systemd unit

Mauro Santos registo.mailling at gmail.com
Wed Mar 19 21:06:18 EDT 2014


On 20-03-2014 00:41, Sean Greenslade wrote:
> 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
> 

Just a guess but you might want to change the unit type to simple
instead of oneshot.

-- 
Mauro Santos


More information about the arch-general mailing list