aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDarrick J. Wong <darrick.wong@oracle.com>2018-02-12 15:47:40 -0600
committerEric Sandeen <sandeen@redhat.com>2018-02-12 15:47:40 -0600
commit1658224d2b5dfb003b336a70adb6b729304973c2 (patch)
tree132b7f0117c47a9005f48dec8da989dcbfad8934
parentd789af70600f1c494aac9e2edbd8baff002d249d (diff)
downloadxfsprogs-dev-1658224d2b5dfb003b336a70adb6b729304973c2.tar.gz
xfs_scrub: remove preen mode
While it's true that the kernel can tell us whether something needs repairs or it needs optimizing, from the admin's perspective there's no point in having an optimize-only mode -- either fix everything, or don't. This is what xfs_repair does w.r.t. -n, so let's do the same thing too. Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com> Reviewed-by: Eric Sandeen <sandeen@redhat.com> Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
-rw-r--r--man/man8/xfs_scrub.851
-rw-r--r--scrub/phase1.c6
-rw-r--r--scrub/phase4.c19
-rw-r--r--scrub/scrub.c2
-rw-r--r--scrub/xfs_scrub.c33
-rw-r--r--scrub/xfs_scrub.h3
6 files changed, 32 insertions, 82 deletions
diff --git a/man/man8/xfs_scrub.8 b/man/man8/xfs_scrub.8
index 4c394a5f05..77fed92996 100644
--- a/man/man8/xfs_scrub.8
+++ b/man/man8/xfs_scrub.8
@@ -1,10 +1,10 @@
.TH xfs_scrub 8
.SH NAME
-xfs_scrub \- scrub the contents of an XFS filesystem
+xfs_scrub \- check the contents of a mounted XFS filesystem
.SH SYNOPSIS
.B xfs_scrub
[
-.B \-abCemnTvxy
+.B \-abCemnTvx
]
.RI "[" mount-point " | " block-device "]"
.br
@@ -13,6 +13,12 @@ xfs_scrub \- scrub the contents of an XFS filesystem
.B xfs_scrub
attempts to check and repair all metadata in a mounted XFS filesystem.
.PP
+.B WARNING!
+This program is
+.BR EXPERIMENTAL ","
+which means that its behavior and interface
+could change at any time!
+.PP
.B xfs_scrub
asks the kernel to scrub all metadata objects in the filesystem.
Metadata records are scanned for obviously bad values and then
@@ -28,19 +34,17 @@ the standard error stream.
Enabling verbose mode will increase the amount of status information
sent to the output.
.PP
-This utility does not know how to correct all errors.
-If the tool cannot fix the detected errors, you must unmount the
-filesystem and run
+If the kernel scrub reports that metadata needs repairs or optimizations and
+the user does not pass
+.B -n
+on the command line, this program will ask the kernel to make the repairs and
+to perform the optimizations.
+See the sections about optimizations and repairs for a list of optimizations
+and repairs known to this program.
+The kernel may not support repairing or optimizing the filesystem.
+If this is the case, the filesystem must be unmounted and
.BR xfs_repair (8)
-to fix the problems.
-If this tool is not run with either of the
-.B \-n
-or
-.B \-y
-options, then it will optimize the filesystem when possible,
-but it will not try to fix errors.
-See the optimizations section below for a list of optimizations
-supported by this program.
+run on the filesystem to fix the problems.
.SH OPTIONS
.TP
.BI \-a " errors"
@@ -73,14 +77,14 @@ is given, no action is taken if errors are found; this is the default
behavior.
.TP
.B \-k
-Do not call FITRIM on the free space.
+Do not call TRIM on the free space.
.TP
.BI \-m " file"
Search this file for mounted filesystems instead of /etc/mtab.
.TP
.B \-n
-Dry run, do not modify anything in the filesystem.
-This disables all optimization and repair behaviors.
+Only check filesystem metadata.
+Do not repair or optimize anything.
.TP
.BI \-T
Print timing and memory usage information for each phase.
@@ -98,20 +102,11 @@ will issue O_DIRECT reads to the block device directly.
If the block device is a SCSI disk, it will instead issue READ VERIFY commands
directly to the disk.
These actions will confirm that all file data blocks can be read from storage.
-.TP
-.B \-y
-Try to repair all filesystem errors.
-If the errors cannot be fixed online, then the filesystem must be taken
-offline for repair.
.SH OPTIMIZATIONS
-Optimizations supported by this program include:
+Optimizations supported by this program include, but are not limited to:
.IP \[bu] 2
-Updating secondary superblocks to match the primary superblock.
-.IP \[bu]
-Turning off shared block write checks for files that no longer share blocks.
-.IP \[bu]
Instructing the underlying storage to discard unused extents via the
-.B FITRIM
+.B TRIM
ioctl.
.SH REPAIRS
This program currently does not support making any repairs.
diff --git a/scrub/phase1.c b/scrub/phase1.c
index 75da2960fb..af93d0f3cb 100644
--- a/scrub/phase1.c
+++ b/scrub/phase1.c
@@ -181,11 +181,7 @@ _("Kernel metadata scrubbing facility is not available."));
/* Do we need kernel-assisted metadata repair? */
if (ctx->mode != SCRUB_MODE_DRY_RUN && !xfs_can_repair(ctx)) {
- if (ctx->mode == SCRUB_MODE_PREEN)
- str_error(ctx, ctx->mntpoint,
-_("Kernel metadata optimization facility is not available. Use -n to scrub."));
- else
- str_error(ctx, ctx->mntpoint,
+ str_error(ctx, ctx->mntpoint,
_("Kernel metadata repair facility is not available. Use -n to scrub."));
return false;
}
diff --git a/scrub/phase4.c b/scrub/phase4.c
index 3100d75bc1..1fb8da9060 100644
--- a/scrub/phase4.c
+++ b/scrub/phase4.c
@@ -62,25 +62,6 @@ xfs_repair_fs(
return xfs_process_action_items(ctx);
}
-/* Run the optimize-only phase if there are no errors. */
-bool
-xfs_optimize_fs(
- struct scrub_ctx *ctx)
-{
- /*
- * In preen mode, corruptions are immediately recorded as errors,
- * so if there are any corruptions on the filesystem errors_found
- * will be non-zero and we won't do anything.
- */
- if (ctx->errors_found) {
- str_info(ctx, ctx->mntpoint,
-_("Errors found, please re-run with -y."));
- return true;
- }
-
- return xfs_process_action_items(ctx);
-}
-
/* Estimate how much work we're going to do. */
bool
xfs_estimate_repair_work(
diff --git a/scrub/scrub.c b/scrub/scrub.c
index 6abca2ac9d..bc0e2f0502 100644
--- a/scrub/scrub.c
+++ b/scrub/scrub.c
@@ -279,7 +279,7 @@ _("Repairs are required."));
* otherwise complain.
*/
if (is_unoptimized(meta)) {
- if (ctx->mode < SCRUB_MODE_PREEN) {
+ if (ctx->mode != SCRUB_MODE_REPAIR) {
if (!is_inode) {
/* AG or FS metadata, always warn. */
str_info(ctx, buf,
diff --git a/scrub/xfs_scrub.c b/scrub/xfs_scrub.c
index 5ab557de78..6efcf77e93 100644
--- a/scrub/xfs_scrub.c
+++ b/scrub/xfs_scrub.c
@@ -187,7 +187,6 @@ usage(void)
fprintf(stderr, _(" -v Verbose output.\n"));
fprintf(stderr, _(" -V Print version.\n"));
fprintf(stderr, _(" -x Scrub file data too.\n"));
- fprintf(stderr, _(" -y Repair all errors.\n"));
exit(SCRUB_RET_SYNTAX);
}
@@ -441,16 +440,11 @@ run_scrub_phases(
/* Turn on certain phases if user said to. */
if (sp->fn == DATASCAN_DUMMY_FN && scrub_data) {
sp->fn = xfs_scan_blocks;
- } else if (sp->fn == REPAIR_DUMMY_FN) {
- if (ctx->mode == SCRUB_MODE_PREEN) {
- sp->descr = _("Optimize filesystem.");
- sp->fn = xfs_optimize_fs;
- sp->must_run = true;
- } else if (ctx->mode == SCRUB_MODE_REPAIR) {
- sp->descr = _("Repair filesystem.");
- sp->fn = xfs_repair_fs;
- sp->must_run = true;
- }
+ } else if (sp->fn == REPAIR_DUMMY_FN &&
+ ctx->mode == SCRUB_MODE_REPAIR) {
+ sp->descr = _("Repair filesystem.");
+ sp->fn = xfs_repair_fs;
+ sp->must_run = true;
}
/* Skip certain phases unless they're turned on. */
@@ -524,9 +518,9 @@ main(
textdomain(PACKAGE);
pthread_mutex_init(&ctx.lock, NULL);
- ctx.mode = SCRUB_MODE_DEFAULT;
+ ctx.mode = SCRUB_MODE_REPAIR;
ctx.error_action = ERRORS_CONTINUE;
- while ((c = getopt(argc, argv, "a:bC:de:km:nTvxVy")) != EOF) {
+ while ((c = getopt(argc, argv, "a:bC:de:km:nTvxV")) != EOF) {
switch (c) {
case 'a':
ctx.max_errors = cvt_u64(optarg, 10);
@@ -574,11 +568,6 @@ main(
mtab = optarg;
break;
case 'n':
- if (ctx.mode != SCRUB_MODE_DEFAULT) {
- fprintf(stderr,
-_("Only one of the options -n or -y may be specified.\n"));
- usage();
- }
ctx.mode = SCRUB_MODE_DRY_RUN;
break;
case 'T':
@@ -595,14 +584,6 @@ _("Only one of the options -n or -y may be specified.\n"));
case 'x':
scrub_data = true;
break;
- case 'y':
- if (ctx.mode != SCRUB_MODE_DEFAULT) {
- fprintf(stderr,
-_("Only one of the options -n or -y may be specified.\n"));
- usage();
- }
- ctx.mode = SCRUB_MODE_REPAIR;
- break;
case '?':
/* fall through */
default:
diff --git a/scrub/xfs_scrub.h b/scrub/xfs_scrub.h
index 8407885da9..89b46a4ffd 100644
--- a/scrub/xfs_scrub.h
+++ b/scrub/xfs_scrub.h
@@ -34,10 +34,8 @@ extern bool stdout_isatty;
enum scrub_mode {
SCRUB_MODE_DRY_RUN,
- SCRUB_MODE_PREEN,
SCRUB_MODE_REPAIR,
};
-#define SCRUB_MODE_DEFAULT SCRUB_MODE_PREEN
enum error_action {
ERRORS_CONTINUE,
@@ -111,7 +109,6 @@ bool xfs_scan_connections(struct scrub_ctx *ctx);
bool xfs_scan_blocks(struct scrub_ctx *ctx);
bool xfs_scan_summary(struct scrub_ctx *ctx);
bool xfs_repair_fs(struct scrub_ctx *ctx);
-bool xfs_optimize_fs(struct scrub_ctx *ctx);
/* Progress estimator functions */
uint64_t xfs_estimate_inodes(struct scrub_ctx *ctx);