| #! /bin/bash |
| # SPDX-License-Identifier: GPL-2.0 |
| # Copyright (c) 2018 Red Hat Inc. All Rights Reserved. |
| # |
| # FS QA Test generic/560 |
| # |
| # Iterate dedupe integrity test. Copy an original data0 several |
| # times (d0 -> d1, d1 -> d2, ... dn-1 -> dn), dedupe dataN everytime |
| # before copy. At last, verify dataN same with data0. |
| # |
| . ./common/preamble |
| _begin_fstest auto stress dedupe |
| |
| # Import common functions. |
| . ./common/filter |
| . ./common/reflink |
| |
| # real QA test starts here |
| _supported_fs generic |
| _require_scratch_duperemove |
| |
| _scratch_mkfs > $seqres.full 2>&1 |
| _scratch_mount >> $seqres.full 2>&1 |
| |
| function iterate_dedup_verify() |
| { |
| local src=$srcdir |
| local dest=$dupdir/1 |
| |
| for ((index = 1; index <= times; index++)); do |
| cp -a $src $dest |
| find $dest -type f -exec md5sum {} \; \ |
| > $md5file$index |
| # Make some noise |
| $FSSTRESS_PROG $fsstress_opts -d $noisedir \ |
| -n 200 -p $((5 * LOAD_FACTOR)) >/dev/null 2>&1 |
| # Too many output, so only save error output |
| $DUPEREMOVE_PROG -dr --dedupe-options=same $dupdir \ |
| >/dev/null 2>$seqres.full |
| md5sum -c --quiet $md5file$index |
| src=$dest |
| dest=$dupdir/$((index + 1)) |
| done |
| } |
| |
| srcdir=$SCRATCH_MNT/src |
| dupdir=$SCRATCH_MNT/dup |
| noisedir=$dupdir/noise |
| mkdir $srcdir $dupdir |
| mkdir $dupdir/noise |
| |
| md5file=${tmp}.md5sum |
| |
| fsstress_opts="-w -r" |
| # Create some files to be original data |
| $FSSTRESS_PROG $fsstress_opts -d $srcdir \ |
| -n 500 -p $((5 * LOAD_FACTOR)) >/dev/null 2>&1 |
| |
| # Calculate how many test cycles will be run |
| src_size=`du -ks $srcdir | awk '{print $1}'` |
| free_size=`df -kP $SCRATCH_MNT | grep -v Filesystem | awk '{print $4}'` |
| times=$((free_size / src_size)) |
| if [ $times -gt $((4 * TIME_FACTOR)) ]; then |
| times=$((4 * TIME_FACTOR)) |
| fi |
| |
| echo "= Do dedup and verify =" |
| iterate_dedup_verify |
| |
| # Use the last checksum file to verify the original data |
| sed -e s#dup/$times#src#g $md5file$times > $md5file |
| echo "= Backwords verify =" |
| md5sum -c --quiet $md5file |
| |
| # read from the disk also doesn't show mutations. |
| _scratch_cycle_mount |
| echo "= Verify after cycle mount =" |
| for ((index = 1; index <= times; index++)); do |
| md5sum -c --quiet $md5file$index |
| done |
| |
| status=0 |
| exit |