lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20241104065214.3831364-1-zhangshida@kylinos.cn>
Date: Mon,  4 Nov 2024 14:52:14 +0800
From: zhangshida <starzhangzsd@...il.com>
To: starzhangzsd@...il.com
Cc: dchinner@...hat.com,
	djwong@...nel.org,
	leo.lilong@...wei.com,
	linux-kernel@...r.kernel.org,
	linux-xfs@...r.kernel.org,
	osandov@...com,
	wozizhi@...wei.com,
	xiang@...nel.org,
	zhangjiachen.jaycee@...edance.com,
	zhangshida@...inos.cn
Subject: frag.sh 

From: Shida Zhang <zhangshida@...inos.cn>

#usage: ./frag.sh $dev $dir $size_k $filename 
#!/bin/bash

cleanup() {
	echo "Ctrl+C detected. Killing child processes..." >&2
	pkill -P $$ # Kill all child processes
	echo "exit...umount ${test_dev}" >&2
	umount ${test_dev}
	exit 1
}
trap cleanup SIGINT SIGTERM

test_dev=$1
if [ -z $test_dev ]; then
	echo "test_dev cant be null"
	echo "usage: ./create_file.sh [test_dev] [test_dir] [file_size_k]"
	exit 1
fi
test_mnt=$2
if [ -z $test_mnt ]; then
	echo "test_mnt cant be null"
	echo "usage: ./create_file.sh [test_dev] [test_dir] [file_size_k]"
	exit 1
fi
file_size_k=$3
if [ -z ${file_size_k} ]; then
	echo "file_size_k cant be null"
	echo "usage: ./create_file.sh [test_dev] [test_dir] [file_size_k]"
	exit 1
fi
echo "test_dev:${test_dev} test_mnt:${test_mnt} fize_size:${file_size_k}KB"

#mkfs.xfs -f ${test_dev}

if [ $5 -eq 0 ]; then
	echo "mount ${test_dev} ${test_mnt}"
	mount $test_dev $test_mnt
else
	echo "mount -o af1=1 ${test_dev} ${test_mnt}"
	mount -o af1=1 $test_dev $test_mnt
fi



# Parameters

FILE=${test_mnt}/"$4"   # File name
echo "$FILE"
if [ -z ${FILE} ]; then
	FILE=${test_mnt}/"fragmented_file"   # File name
fi
TOTAL_SIZE=${file_size_k}	# Total size in KB
CHUNK_SIZE=4             # Size of each punch operation in KB


# Create a big file with allocated space
xfs_io -f -c "falloc 0 $((TOTAL_SIZE))k" $FILE

# Calculate total number of punches needed
NUM_PUNCHES=$(( TOTAL_SIZE / (CHUNK_SIZE * 2) ))

last_percentage=-1
# Punch holes alternately to create fragmentation
for ((i=0; i<NUM_PUNCHES; i++)); do
    OFFSET=$(( i * CHUNK_SIZE * 2 * 1024 ))
    xfs_io -c "fpunch $OFFSET ${CHUNK_SIZE}k" $FILE
    
    # Calculate current percentage and print if changed
    PERCENTAGE=$(( (i + 1) * 100 / NUM_PUNCHES ))
    if [ "$PERCENTAGE" -ne "$last_percentage" ]; then
        #echo "Processing...${PERCENTAGE}%"
        last_percentage=$PERCENTAGE
    fi
done

# Verify the extent list (to see fragmentation)
# echo "Extent list for the file:"
# xfs_bmap -v $FILE
df -Th ${test_mnt}

echo "umount ${test_dev}"
umount $test_dev

xfs_db -c 'freesp' $test_dev

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ