| # SPDX-License-Identifier: GPL-2.0-or-later |
| # |
| # Copyright (C) 2018-2024 Oracle. All Rights Reserved. |
| # Author: Darrick J. Wong <djwong@kernel.org> |
| |
| [Unit] |
| Description=Online XFS Metadata Check for All Filesystems |
| OnFailure=xfs_scrub_all_fail.service |
| ConditionACPower=true |
| Documentation=man:xfs_scrub_all(8) |
| After=paths.target multi-user.target network.target network-online.target systemd-networkd.service NetworkManager.service connman.service |
| |
| [Service] |
| Type=oneshot |
| Environment=SERVICE_MODE=1 |
| ExecStart=@sbindir@/xfs_scrub_all --auto-media-scan-interval @media_scan_interval@ |
| SyslogIdentifier=xfs_scrub_all |
| |
| # Create the service underneath the scrub background service slice so that we |
| # can control resource usage. |
| Slice=system-xfs_scrub.slice |
| |
| # Run scrub_all with minimal CPU and IO priority so that nothing will starve. |
| IOSchedulingClass=idle |
| CPUSchedulingPolicy=idle |
| CPUAccounting=true |
| Nice=19 |
| |
| # No realtime scheduling |
| RestrictRealtime=true |
| |
| # No special privileges, but we still have to run as root so that we can |
| # contact the service manager to start the sub-units. |
| CapabilityBoundingSet= |
| NoNewPrivileges=true |
| RestrictSUIDSGID=true |
| |
| # Make the entire filesystem readonly except for the media scan stamp file |
| # directory. We don't want to hide anything because we need to find all |
| # mounted XFS filesystems in the host. |
| ProtectSystem=strict |
| ProtectHome=read-only |
| PrivateTmp=false |
| BindPaths=@pkg_state_dir@ |
| |
| # No network access except to the systemd control socket |
| PrivateNetwork=true |
| ProtectHostname=true |
| RestrictAddressFamilies=AF_UNIX |
| IPAddressDeny=any |
| |
| # Don't let the program mess with the kernel configuration at all |
| ProtectKernelLogs=true |
| ProtectKernelModules=true |
| ProtectKernelTunables=true |
| ProtectControlGroups=true |
| ProtectProc=invisible |
| RestrictNamespaces=true |
| |
| # Hide everything in /proc, even /proc/mounts |
| ProcSubset=pid |
| |
| # Only allow the default personality Linux |
| LockPersonality=true |
| |
| # No writable memory pages |
| MemoryDenyWriteExecute=true |
| |
| # Don't let our mounts leak out to the host |
| PrivateMounts=true |
| |
| # Restrict system calls to the native arch and only enough to get things going |
| SystemCallArchitectures=native |
| SystemCallFilter=@system-service |
| SystemCallFilter=~@privileged |
| SystemCallFilter=~@resources |
| SystemCallFilter=~@mount |
| |
| # Media scan stamp file shouldn't be readable by regular users |
| UMask=0077 |
| |
| # lsblk ignores mountpoints if it can't find the device files, so we cannot |
| # hide them |
| #ProtectClock=true |
| #PrivateDevices=true |