.RS 1.2i
.TP
.BI ea_ver= extended_attribute_version
-Assume the format of the extended attribute blocks in the filesystem is
-the specified version number. The version number may be 1 or 2. The
-default extended attribute version format is 2.
+Set the version of the extended attribute blocks which
+.B e2fsck
+will require while checking the filesystem. The version number may
+be 1 or 2. The default extended attribute version format is 2.
+.TP
+.BI fragcheck
+During pass 1, print a detailed report of any discontiguous blocks for
+files in the filesystem.
.RE
.TP
.B \-f
#define E2F_OPT_FORCE 0x0100
#define E2F_OPT_WRITECHECK 0x0200
#define E2F_OPT_COMPRESS_DIRS 0x0400
+#define E2F_OPT_FRAGCHECK 0x0800
/*
* E2fsck flags
goto next;
}
+ if ((pb->previous_block != 0) &&
+ (pb->previous_block+1 != extent.e_pblk)) {
+ if (ctx->options & E2F_OPT_FRAGCHECK)
+ printf(("%6lu: expecting %6lu actual extent "
+ "phys %6lu log %lu len %lu\n"),
+ (unsigned long) pctx->ino,
+ (unsigned long) pb->previous_block+1,
+ (unsigned long) extent.e_pblk,
+ (unsigned long) extent.e_lblk,
+ (unsigned long) extent.e_len);
+ pb->fragmented = 1;
+ }
for (blk = extent.e_pblk, blockcnt = extent.e_lblk, i = 0;
i < extent.e_len;
blk++, blockcnt++, i++) {
}
}
pb->num_blocks += extent.e_len;
+ pb->previous_block = extent.e_pblk + extent.e_len - 1;
start_block = pb->last_block = extent.e_lblk + extent.e_len - 1;
next:
pctx->errcode = ext2fs_extent_get(ehandle,
scan_extent_node(ctx, pctx, pb, 0, ehandle);
+ if (pb->fragmented && pb->num_blocks < fs->super->s_blocks_per_group)
+ ctx->fs_fragmented++;
+
ext2fs_extent_free(ehandle);
}
* file be contiguous. (Which can never be true for really
* big files that are greater than a block group.)
*/
- if (!HOLE_BLKADDR(p->previous_block)) {
- if (p->previous_block+1 != blk)
+ if (!HOLE_BLKADDR(p->previous_block) && p->ino != EXT2_RESIZE_INO) {
+ if (p->previous_block+1 != blk) {
+ if (ctx->options & E2F_OPT_FRAGCHECK)
+ printf(_("%6lu: expecting %6lu got %6lu (%lu)\n"),
+ (unsigned long) pctx->ino,
+ (unsigned long) p->previous_block+1,
+ (unsigned long) blk,
+ (unsigned long) blockcnt);
p->fragmented = 1;
+ }
}
p->previous_block = blk;
continue;
}
ctx->ext_attr_ver = ea_ver;
+ } else if (strcmp(token, "fragcheck") == 0) {
+ ctx->options |= E2F_OPT_FRAGCHECK;
+ continue;
} else {
fprintf(stderr, _("Unknown extended option: %s\n"),
token);
fputs(("\nExtended options are separated by commas, "
"and may take an argument which\n"
"is set off by an equals ('=') sign. "
- "Valid extended options are:\n"
- "\tea_ver=<ea_version (1 or 2)>\n\n"), stderr);
+ "Valid extended options are:\n"), stderr);
+ fputs(("\tea_ver=<ea_version (1 or 2)>\n"), stderr);
+ fputs(("\tfragcheck\n"), stderr);
+ fputc('\n', stderr);
exit(1);
}
}
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
-test_filesys: 12/64 files (8.3% non-contiguous), 158/512 blocks
+test_filesys: 12/64 files (0.0% non-contiguous), 158/512 blocks
Exit status is 0
debugfs -R ''dump test_data test.verify'' ./test.img
Exit status is 0
*** journal has been re-created - filesystem is now ext3 again ***
test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
-test_filesys: 11/256 files (9.1% non-contiguous), 1112/8192 blocks
+test_filesys: 11/256 files (0.0% non-contiguous), 1112/8192 blocks
Exit status is 1
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
-test_filesys: 11/256 files (9.1% non-contiguous), 1112/8192 blocks
+test_filesys: 11/256 files (0.0% non-contiguous), 1112/8192 blocks
Exit status is 0
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
-test_filesys: 12/2560 files (16.7% non-contiguous), 485/10240 blocks
+test_filesys: 12/2560 files (8.3% non-contiguous), 485/10240 blocks
Exit status is 0
test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
-test_filesys: 18/32 files (0.0% non-contiguous), 145/200 blocks
+test_filesys: 18/32 files (44.4% non-contiguous), 145/200 blocks
Exit status is 1
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
-test_filesys: 18/32 files (0.0% non-contiguous), 145/200 blocks
+test_filesys: 18/32 files (44.4% non-contiguous), 145/200 blocks
Exit status is 0
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
-test_filesys: 11/3744 files (9.1% non-contiguous), 685/769 blocks
+test_filesys: 11/3744 files (0.0% non-contiguous), 685/769 blocks
Exit status is 0
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
-test_filesys: 11/3744 files (9.1% non-contiguous), 685/769 blocks
+test_filesys: 11/3744 files (0.0% non-contiguous), 685/769 blocks
Exit status is 0
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
-test_filesys: 11/32 files (9.1% non-contiguous), 105/10000 blocks
+test_filesys: 11/32 files (0.0% non-contiguous), 105/10000 blocks
Exit status is 0
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
-test_filesys: 11/32 files (9.1% non-contiguous), 105/10000 blocks
+test_filesys: 11/32 files (0.0% non-contiguous), 105/10000 blocks
Exit status is 0
Pass 5: Checking group summary information
test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
-test_filesys: 11/2512 files (9.1% non-contiguous), 415/10000 blocks
+test_filesys: 11/2512 files (0.0% non-contiguous), 415/10000 blocks
Exit status is 1
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
-test_filesys: 11/2512 files (9.1% non-contiguous), 415/10000 blocks
+test_filesys: 11/2512 files (0.0% non-contiguous), 415/10000 blocks
Exit status is 0
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
-test_filesys: 11/16384 files (9.1% non-contiguous), 1104/32768 blocks
+test_filesys: 11/16384 files (0.0% non-contiguous), 1104/32768 blocks
Exit status is 0
Filesystem volume name: <none>
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
-test_filesys: 11/64 files (9.1% non-contiguous), 17/16384 blocks
+test_filesys: 11/64 files (0.0% non-contiguous), 17/16384 blocks
Exit status is 0
Filesystem volume name: <none>
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
-test_filesys: 11/16384 files (9.1% non-contiguous), 3364/65536 blocks
+test_filesys: 11/16384 files (0.0% non-contiguous), 3364/65536 blocks
Exit status is 0
Filesystem volume name: <none>
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
-test_filesys: 11/32768 files (9.1% non-contiguous), 5691/131072 blocks
+test_filesys: 11/32768 files (0.0% non-contiguous), 5691/131072 blocks
Exit status is 0
Filesystem volume name: <none>