public inbox for linux-xfs@vger.kernel.org
 help / color / mirror / Atom feed
From: "Darrick J. Wong" <djwong@kernel.org>
To: Zorro Lang <zlang@redhat.com>
Cc: hch@lst.de, linux-xfs@vger.kernel.org, fstests@vger.kernel.org
Subject: Re: [PATCH 1/1] xfs: test filesystem recovery with rdump
Date: Mon, 24 Mar 2025 17:50:26 -0700	[thread overview]
Message-ID: <20250325005026.GI4001511@frogsfrogsfrogs> (raw)
In-Reply-To: <20250322200429.7xtqnvss64qbt4ib@dell-per750-06-vm-08.rhts.eng.pek2.redhat.com>

On Sun, Mar 23, 2025 at 04:04:29AM +0800, Zorro Lang wrote:
> On Fri, Mar 21, 2025 at 02:27:07PM -0700, Darrick J. Wong wrote:
> > From: Darrick J. Wong <djwong@kernel.org>
> > 
> > Test how well we can dump a fully populated filesystem's contents.
> > 
> > Signed-off-by: "Darrick J. Wong" <djwong@kernel.org>
> > Reviewed-by: Christoph Hellwig <hch@lst.de>
> > ---
> >  tests/xfs/1895     |  153 ++++++++++++++++++++++++++++++++++++++++++++++++++++
> >  tests/xfs/1895.out |    6 ++
> >  2 files changed, 159 insertions(+)
> >  create mode 100755 tests/xfs/1895
> >  create mode 100644 tests/xfs/1895.out
> > 
> > 
> > diff --git a/tests/xfs/1895 b/tests/xfs/1895
> > new file mode 100755
> > index 00000000000000..18b534d328e9fd
> > --- /dev/null
> > +++ b/tests/xfs/1895
> > @@ -0,0 +1,153 @@
> > +#! /bin/bash
> > +# SPDX-License-Identifier: GPL-2.0
> > +# Copyright (c) 2025 Oracle, Inc.  All Rights Reserved.
> > +#
> > +# FS QA Test No. 1895
> > +#
> > +# Populate a XFS filesystem, ensure that rdump can "recover" the contents to
> > +# another directory, and compare the contents.
> > +#
> > +. ./common/preamble
> > +_begin_fstest auto scrub
> > +
> > +_cleanup()
> > +{
> > +	command -v _kill_fsstress &>/dev/null && _kill_fsstress
> 
> I'm wondering why you always do "command -v _kill_fsstress &>/dev/null" before
> _kill_fsstress, isn't _kill_fsstress a common helper in common/rc ?

Yeah, I probably copy-pasta'd that from common/preamble.  Will remove it
before the next posting, assuming you don't decide to fix+merge it.

--D

> Thanks,
> Zorro
> 
> > +	cd /
> > +	test -e "$testfiles" && rm -r -f $testfiles
> > +}
> > +
> > +_register_cleanup "_cleanup" BUS
> > +
> > +# Import common functions.
> > +. ./common/filter
> > +. ./common/populate
> > +. ./common/fuzzy
> > +
> > +_require_xfs_db_command "rdump"
> > +_require_test
> > +_require_scratch
> > +_require_scrub
> > +_require_populate_commands
> > +
> > +make_md5()
> > +{
> > +	(cd $1 ; find . -type f -print0 | xargs -0 md5sum) > $tmp.md5.$2
> > +}
> > +
> > +cmp_md5()
> > +{
> > +	(cd $1 ; md5sum --quiet -c $tmp.md5.$2)
> > +}
> > +
> > +make_stat()
> > +{
> > +	# columns:	raw mode in hex,
> > +	# 		major rdev for special
> > +	# 		minor rdev for special
> > +	# 		uid of owner
> > +	# 		gid of owner
> > +	# 		file type
> > +	# 		total size
> > +	# 		mtime
> > +	# 		name
> > +	# We can't directly control directory sizes so filter them.
> > +	# Too many things can bump (or not) atime so don't test that.
> > +	(cd $1 ; find . -print0 |
> > +		xargs -0 stat -c '%f %t:%T %u %g %F %s %Y %n' |
> > +		sed -e 's/ directory [1-9][0-9]* / directory SIZE /g' |
> > +		sort) > $tmp.stat.$2
> > +}
> > +
> > +cmp_stat()
> > +{
> > +	diff -u $tmp.stat.$1 $tmp.stat.$2
> > +}
> > +
> > +make_stat_files() {
> > +	for file in "${FILES[@]}"; do
> > +		find "$1/$file" -print0 | xargs -0 stat -c '%f %t:%T %u %g %F %s %Y %n'
> > +	done | sed \
> > +		-e 's/ directory [1-9][0-9]* / directory SIZE /g' \
> > +		-e "s| $1| DUMPDIR|g" \
> > +		| sort > $tmp.stat.files.$2
> > +}
> > +
> > +cmp_stat_files()
> > +{
> > +	diff -u $tmp.stat.files.$1 $tmp.stat.files.$2
> > +}
> > +
> > +make_stat_dir() {
> > +	find "$1" -print0 | \
> > +		xargs -0 stat -c '%f %t:%T %u %g %F %s %Y %n' | sed \
> > +		-e 's/ directory [1-9][0-9]* / directory SIZE /g' \
> > +		-e "s| $1| DUMPDIR|g" \
> > +		| sort > $tmp.stat.dir.$2
> > +}
> > +
> > +cmp_stat_dir()
> > +{
> > +	diff -u $tmp.stat.dir.$1 $tmp.stat.dir.$2
> > +}
> > +
> > +FILES=(
> > +	"/S_IFDIR.FMT_INLINE"
> > +	"/S_IFBLK"
> > +	"/S_IFCHR"
> > +	"/S_IFLNK.FMT_LOCAL"
> > +	"/S_IFIFO"
> > +	"/S_IFDIR.FMT_INLINE/00000001"
> > +	"/ATTR.FMT_EXTENTS_REMOTE3K"
> > +	"/S_IFREG.FMT_EXTENTS"
> > +	"/S_IFREG.FMT_BTREE"
> > +	"/BNOBT"
> > +	"/S_IFDIR.FMT_BLOCK"
> > +)
> > +DIR="/S_IFDIR.FMT_LEAF"
> > +
> > +testfiles=$TEST_DIR/$seq
> > +mkdir -p $testfiles
> > +
> > +echo "Format and populate"
> > +_scratch_populate_cached nofill > $seqres.full 2>&1
> > +_scratch_mount
> > +
> > +_run_fsstress -n 500 -d $SCRATCH_MNT/newfiles
> > +
> > +make_stat $SCRATCH_MNT before
> > +make_md5 $SCRATCH_MNT before
> > +make_stat_files $SCRATCH_MNT before
> > +make_stat_dir $SCRATCH_MNT/$DIR before
> > +_scratch_unmount
> > +
> > +echo "Recover filesystem"
> > +dumpdir1=$testfiles/rdump
> > +dumpdir2=$testfiles/sdump
> > +dumpdir3=$testfiles/tdump
> > +rm -r -f $dumpdir1 $dumpdir2 $dumpdir3
> > +
> > +# as of linux 6.12 fchownat does not work on symlinks
> > +_scratch_xfs_db -c "rdump / $dumpdir1" | sed -e '/could not be set/d'
> > +_scratch_xfs_db -c "rdump ${FILES[*]} $dumpdir2" | sed -e '/could not be set/d'
> > +_scratch_xfs_db -c "rdump $DIR $dumpdir3" | sed -e '/could not be set/d'
> > +
> > +echo "Check file contents"
> > +make_stat $dumpdir1 after
> > +cmp_stat before after
> > +cmp_md5 $dumpdir1 before
> > +
> > +echo "Check selected files contents"
> > +make_stat_files $dumpdir2 after
> > +cmp_stat_files before after
> > +
> > +echo "Check single dir extraction contents"
> > +make_stat_dir $dumpdir3 after
> > +cmp_stat_dir before after
> > +
> > +# remount so we can check this fs
> > +_scratch_mount
> > +
> > +# success, all done
> > +status=0
> > +exit
> > diff --git a/tests/xfs/1895.out b/tests/xfs/1895.out
> > new file mode 100644
> > index 00000000000000..de639ed3fc7e38
> > --- /dev/null
> > +++ b/tests/xfs/1895.out
> > @@ -0,0 +1,6 @@
> > +QA output created by 1895
> > +Format and populate
> > +Recover filesystem
> > +Check file contents
> > +Check selected files contents
> > +Check single dir extraction contents
> > 
> 
> 

  reply	other threads:[~2025-03-25  0:50 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-03-21 21:25 [PATCHBOMB v2] fstests: random fixes and 6.14 stragglers Darrick J. Wong
2025-03-21 21:26 ` [PATCHSET 1/3] fstests: test dumping fs directory trees Darrick J. Wong
2025-03-21 21:27   ` [PATCH 1/1] xfs: test filesystem recovery with rdump Darrick J. Wong
2025-03-22 20:04     ` Zorro Lang
2025-03-25  0:50       ` Darrick J. Wong [this message]
2025-03-25  1:08         ` Zorro Lang
2025-03-25  1:20           ` Darrick J. Wong
2025-03-21 21:26 ` [PATCHSET 2/3] fstests: test handling emoji filenames better Darrick J. Wong
2025-03-21 21:27   ` [PATCH 1/1] generic/45[34]: add colored emoji variants to unicode tests Darrick J. Wong
2025-03-21 21:26 ` [PATCHSET 3/3] fstests: more random fixes for v2025.03.17 Darrick J. Wong
2025-03-21 21:27   ` [PATCH 1/4] xfs/614: determine the sector size of the fs image by doing a test format Darrick J. Wong
2025-03-21 21:27   ` [PATCH 2/4] generic/537: disable quota mount options for pre-metadir rt filesystems Darrick J. Wong
2025-03-22 14:37     ` Zorro Lang
2025-03-25  0:51       ` Darrick J. Wong
2025-03-21 21:28   ` [PATCH 3/4] common/populate: drop fallocate mode 0 requirement Darrick J. Wong
2025-03-21 21:28   ` [PATCH 4/4] xfs/818: fix some design issues Darrick J. Wong
2025-03-22 15:00     ` Zorro Lang
2025-04-01 14:43 ` [PATCHSET] xfsprogs: localize the python programs Darrick J. Wong
2025-04-01 14:43   ` [PATCH 1/5] xfs_protofile: rename source code to .py.in Darrick J. Wong
2025-04-01 14:43   ` [PATCH 2/5] xfs_scrub_all: " Darrick J. Wong
2025-04-01 14:44   ` [PATCH 3/5] Makefile: inject package name/version/bugreport into pot file Darrick J. Wong
2025-04-01 14:44   ` [PATCH 4/5] xfs_protofile: add messages to localization catalog Darrick J. Wong
2025-04-01 14:44   ` [PATCH 5/5] xfs_scrub_all: localize the strings in the program Darrick J. Wong
2025-04-02  9:55   ` [PATCHSET] xfsprogs: localize the python programs Andrey Albershteyn
2025-04-02 14:00   ` Bill O'Donnell
  -- strict thread matches above, loose matches on Subject: below --
2025-03-12 23:10 [PATCHSET 1/3] fstests: test dumping fs directory trees Darrick J. Wong
2025-03-12 23:11 ` [PATCH 1/1] xfs: test filesystem recovery with rdump Darrick J. Wong
2025-02-19  0:49 [PATCHSET 12/12] fstests: dump fs directory trees Darrick J. Wong
2025-02-19  1:09 ` [PATCH 1/1] xfs: test filesystem recovery with rdump Darrick J. Wong
2025-02-19  7:45   ` Christoph Hellwig

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20250325005026.GI4001511@frogsfrogsfrogs \
    --to=djwong@kernel.org \
    --cc=fstests@vger.kernel.org \
    --cc=hch@lst.de \
    --cc=linux-xfs@vger.kernel.org \
    --cc=zlang@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox