From Fedora Project Wiki

Revision as of 18:31, 5 January 2011 by Bruno (talk | contribs) (Created page with '#!/bin/bash # We need rpmdev-vercmp rpm -q rpmdevtools > /dev/null 2>&1 || (echo 'rpmdev-vercmp from rpmdevtools is needed to run this script, aborting.'; exit 1) # Define bloc...')
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Squashfs-compression-test.sh(file size: 4 KB, MIME type: application/x-bash)

Warning: This file type may contain malicious code. By executing it, your system may be compromised.

  1. !/bin/bash
  1. We need rpmdev-vercmp

rpm -q rpmdevtools > /dev/null 2>&1 || (echo 'rpmdev-vercmp from rpmdevtools is needed to run this script, aborting.'; exit 1)

  1. Define block sizes

blocks=(4K 1M)

  1. Define fill files

fill=(/dev/zero /dev/urandom)

  1. Define number of iterations

iter=5

  1. Define fragment sizes

frags=(0 1 2047 4095)

  1. Define test directory

testdir=./test-squashfs

  1. Define mount point

mp=${testdir}/mnt

  1. Define data directory

datadir=${testdir}/data

  1. Check for squashfs-tools version and set compression types to test

sqfsver=rpm -q --qf '%{EVR}' squashfs-tools if rpmdev-vercmp 4.1 ${sqfsver} > /dev/null; [ $? == '11' ]; then

 ucomp=('gzip')

elif rpmdev-vercmp 4.2 ${sqfsver} > /dev/null; [ $? == '11' ]; then

 ucomp=(gzip lzo lzma)

else

 ucomp=(gzip lzo lzma xz)

fi

  1. Check for kernel verion and set mount test compression types

kernel=uname -r if rpmdev-vercmp 2.6.36 ${kernel} > /dev/null; [ $? == '11' ]; then

 mcomp=('gzip')

elif rpmdev-vercmp 2.6.38 ${kernel} > /dev/null; [ $? == '11' ]; then

 mcomp=(gzip lzo)

else

 mcomp=(gzip lzo xz)

fi

  1. Check for uid 0 and print a warning if not

[ ${UID} -ne 0 ] && echo 'Mount tests will not be performed when not running as root'

  1. Check if test directory exists and make if not

[ -d ${testdir} ] || mkdir ${testdir} [ -d ${testdir} ] || (echo "Unable to make '${testdir}', aborting."; exit 1)

  1. Check if mount point directory exists and make if not

[ -d ${mp} ] || mkdir ${mp} [ -d ${mp} ] || (echo "Unable to make '${mp}', aborting."; exit 1)

  1. Check if data directory exists and make if not

if [ -d ${datadir} ]; then

 echo "Using existing data directory."

else

 echo "Building data directory."
 mkdir ${datadir}
 [ -d ${datadir} ] || (echo "Unable to make '${datadir}', aborting."; exit 1)
 for size in ${frags[*]}; do
   for file in ${fill[*]}; do
     dd if=${file} of=${datadir}/frag-basename ${file}-${size} bs=1 count=${size} > /dev/null 2>&1
   done
 done
 for size in ${blocks[*]}; do
   for ((count=1;${count}<=${iter};count++)); do
     for file in ${fill[*]}; do
       dd if=${file} of=${datadir}/file-basename ${file}-${size}-${count} bs=${size} count=${count} > /dev/null 2>&1
     done
   done
 done
 for size1 in ${frags[*]}; do
   for file1 in ${fill[*]}; do
     for size2 in ${blocks[*]}; do
       for ((count=1;${count}<=${iter};count++)); do
         for file2 in ${fill[*]}; do
           cat ${datadir}/file-basename ${file2}-${size2}-${count} ${datadir}/frag-basename ${file1}-${size1} > ${datadir}/combined-basename ${file2}-${size2}-${count}-basename ${file1}-${size1}
         done
       done
     done
   done
 done

fi

  1. Run unmounted tests

for comp in ${ucomp[*]}; do

 echo "Building squashfs image using ${comp} compression."
 if [ "${comp}" == gzip ]; then
   mksquashfs ${datadir} ${testdir}/sq.img || (echo "mksquashfs failed for ${comp} compression."; continue)
 else
   mksquashfs ${datadir} ${testdir}/sq.img -comp ${comp} || (echo "mksquashfs failed for ${comp} compression."; continue)
 fi
 echo "Testing unmounted extract using ${comp} compression."
 unsquashfs -d ${testdir}/sq ${testdir}/sq.img  || echo "unsquashfs failed for ${comp} compression."
 diff -r -q ${testdir}/sq ${datadir} || echo "Extract test failed for ${comp} compression."
 rm -rf ${testdir}/sq
 if [ ${UID} == 0 ]; then
   for kern in ${mcomp[*]}; do
     if [ ${kern} == ${comp} ]; then
       echo "Testing mounted image using ${comp} compression."
       mount -r -o loop ${testdir}/sq.img ${mp} || echo "Mount failed.";
       diff -r -q ${mp} ${datadir} || echo "Mounted test failed for ${comp} compression."
       umount ${mp}
       break
     fi
   done
 fi
 rm -f ${testdir}/sq ${testdir}/sq.img

done

File history

Click on a date/time to view the file as it appeared at that time.

Date/TimeDimensionsUserComment
current11:27, 23 May 2019 (4 KB)Bruno (talk | contribs)Include zstd testing
03:39, 15 December 2014 (4 KB)Bruno (talk | contribs)Test mounting archives using lz4 compression with 3.19+ kernels.
07:05, 13 May 2014 (4 KB)Bruno (talk | contribs)
18:35, 5 January 2011 (4 KB)Bruno (talk | contribs)Compression test script for squashfs-tools.

There are no pages that use this file.