Re: Testing iso downloads?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



| From: Paul Howarth <paul@xxxxxxxxxxxx>

You and I have talked about this in the past:
  http://lists.debian.org/cdwrite/2005/06/msg00064.html

My bad experiences have been due to the CD driver reading past the end
of the burned part of the CD and getting all huffy when it doesn't
like what it sees.

The cure that has worked for me is to pad the .iso with zero blocks.
Then the driver can read that stuff without getting indigestion.

I've enclosed a script that I call "isopad".  You can use it to add
padding (isopad + x.iso), remove padding (isopad - x.iso), or report
padding (isopad x.iso).

NOTE: this adds and removes padding to your .iso file in-place.  This
saves a lot of disk space and file copying but it is rather daring.

How do you use this program?
	# pad:
	isopad + x.iso
	# burn:
	cdrecord ... x.iso
	# remove padding:
	isopad - x.iso
You can replace cdrecord with your favourite program.

md5sum for the script:
5ac2ec3d11e4079d400abaebc22587bf  bin/isopad
================ start of isopad script ================
#!/bin/sh

# isopad [+] [-] isofile...
#
# The Linux IDE CD driver in 2.6 tries to read ahead, even past the end of the
# CD or DVD.  Even when the program issuing the original read request was only
# trying to read legitimate parts of the disc (albeit near the end).
# The result is spurious I/O errors and read failures.
# It does not seem that this driver bug is going to be fixed soon.
#
# This program is intended to facilitate a workaround.  It can pad (or unpad)
# a .iso file so that, when it is burned, the resulting disc will allow
# reads past the end of the content to succeed.
#
# "+" means pad the following .iso files.
# "-" means remove all padding.
# neither means test file and iso sizes.
#
# To see how much readahead is enabled on a drive: hdparm -a /dev/hdc
#
# Why do the padding in place, rather than on a copy of the file?
# .iso files are usually quite large so copying takes a lot of time and space.
#
# Copyright 2005 D. Hugh Redelmeier
# License: GPL
# Version: Sat Jun 18 02:31:48 EDT 2005

# stop at the least sign of trouble
set -u -e

# op is "", "-", or "+": operation to be performed
op=""

for fn
do
	case "$fn"
	in
	"-h"|"--help")
		echo "Usage: $0 [-|+|] isofile..."
		;;
	"+"|"-")
		op="$fn"
		;;
	*)
		isosize -x "$fn"
		isz=`isosize "$fn"`
		fsz=`stat --format='%s' "$fn"`

		# conventional block size for CDs
		bs=2048

		# my guess at a sufficient amount of padding (in blocks)
		pb=64

		if [ $fsz -lt $isz ]
		then
			echo "$fn is shorter ($fsz) than it should be ($isz)" >&2
			exit 3
		elif [ ` expr $fsz % $bs ` -ne 0 ]
		then
			echo "$fn file size ($fsz) is not a multiple of $bs" >&2
			exit 4
		elif [ ` expr $isz % $bs ` -ne 0 ]
		then
			echo "$fn isosize ($isz) is not a multiple of $bs" >&2
			exit 5
		else
			case "$op" in
			"")
				if [ $fsz -eq $isz ]
				then
					echo "$fn: isosize == file size == $fsz"
				else
					echo "$fn: isosize $isz; file size $fsz"
				fi
				;;
			"+")
				echo "$fn: padding with $pb blocks of $bs zero bytes"
				dd if=/dev/zero bs=$bs count=$pb >>"$fn"
				;;
			"-")
				if [ $fsz -eq $isz ]
				then
					echo "$fn: already $fsz bytes"
				else
					echo "$fn: truncating from $fsz to $isz bytes"
					dd if=/dev/null of="$fn" seek=$isz bs=1
				fi
				;;
			esac
		fi
		;;
	esac
done
================ end ================


[Index of Archives]     [Current Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Yosemite News]     [Yosemite Photos]     [KDE Users]     [Fedora Tools]     [Fedora Docs]

  Powered by Linux