Dd - Why message suggesting flag ... when flag is already present?

Anybody know why I am getting the message touse the "fullblock" flag?

  • dd: (coreutils) 8.32
COMMAND: dd if=UbuntuXubuntu__26.04_LTS__2025-12-25__resolute-desktop-amd64.iso bs=4M iflag=direct,fullblock | pv -s 5092M | dd of=/dev/sdc bs=4M conv=fdatasync oflag=direct,dsync ...

dd: warning: partial read (65536 bytes); suggest iflag=fullblock
4.39GiB 0:13:45 [6.05MiB/s] [==================================================================================>            ] 88% ETA 0:01:48

(EDIT 2: Just an update. I tried xubuntu. Not enough fine control on the Panel App for my taste. That in itself is a definite no-go! Beyond that, I prefer the interractivity of the Brisk Menu. xubuntu's interractivity is just to non-intuitive for me. Lastly, Caja has a definite superior feel to it, altough Thunar seems to have more options for date display in the listings. So ... xubuntu is not the soft-landing alternative I thought it could be, given that it is GTK3-based.)



My script [USER__ISO__BurnImageOnStick.sh] :

(EDIT 1: updated with fix; added "iflag=fullblock" to definition of "optionsO")

#!/bin/sh

rootDisk=$(df / | grep '^/dev' | awk '{ print $1 }' | cut -f3 -d/ | cut -c1-3)

USB_eject=0
usepv=0

while [ $# -gt 0 ]
do
	case "${1}" in
		--file ) 
			#ISO_file="/DB001_F3/Distros__Local/UbuntuMATE__26.04_LTS__2025-11-19__resolute-desktop-amd64.iso"
			ISO_file="${2}"
			shift ; shift
			;;
		--dev )
			#USB_device="/dev/sdc"
			USB_device="${2}"
			shift ; shift
			;;
		"--usepv" )
			usepv=1
			shift
			;;
		"--eject" )
			USB_eject=1
			shift
			;;
		* )
			echo "\n\t Invalid option specified.  Only valid options:  [ --file {fullpath_filename} ] [ --dev {device_file} ] \n" ; exit 1
			;;
	esac
done

if [ -z "${USB_device}" ]
then
	echo "\n\t Need to specify the target device file for the USB stick, using '--dev {device_file}'\n" ; exit 1
fi

if [ ! -b "${USB_device}" ]
then
	echo "\n\t The specified target device file for the USB stick is not recognized by the OS.\n" ; exit 1
fi

choices=$(ls -l /dev/disk/by-id/usb* | awk '{ print $NF }' | cut -f3 -d/ | grep -v "${rootDisk}" )

usbStick=$(lsblk -l -p -o NAME,SIZE ${USB_device} |
	awk '{
		if( $2 ~ /G/ ){
			gsub(/G/, "", $2 ) ;
			# print $2 ;
			if( $2/64.0 <= 1.0 ){
				print $1 ;
			} ;
		} ;
	}' )

if [ -z "${usbStick}" ]
then
	echo "\n\t Unable to use '${USB_device}' since it is not identified as a USB stick.  Abandonning process.\n" ; exit 1
fi

if [ -z "${ISO_file}" ]
then
	echo "\n\t Need to specify the full pathname to the file containing the ISO image that is to be used, using '--file {fullpath_filename}'\n" ; exit 1
fi

if [ ! -s "${ISO_file}" ]
then
	echo "\n\t The specified file is empty and contains no ISO image.\n" ; exit 1
fi

testor=$(file "${ISO_file}" | grep 'ISO 9660 CD-ROM filesystem data' )
if [ -z "${testor}" ]
then
	echo "\n\t The specified file is not recognized as an ISO 9660 CD-ROM filesystem and is not usable.\n" ; exit 1
fi


# Testing to ensure the specified device is not accidentally selecting
# one of the local hard disk partitions per mountpoints using
# a custom local partition naming convention.
# Those who want to customize, could come up with checking against 
# a stored list, if you don't use a naming pattern convention.
testor=$(df | grep "${USB_device}" | grep 'DB00[0-9]_F[0-9]' )

if [ "${testor}" ]
then
	echo "\n\t Wrong device file specified.  Bye!\n" ; exit 1
fi

# Method using PipeView for displaying progress bar
# dd if=<path to input file> | pv -s <size e.g. 1377M> | dd of=<path to target device>

ISO_location=$(dirname ${ISO_file} )
ISO_basename=$(basename ${ISO_file} )

cd "${ISO_location}"
if [ $? -ne 0 ]
then
	echo "\n\t Unable to set '${ISO_location}' as work directory where ISO file is located.  Bye!\n" ; exit 1
fi

ISO_image="if=${ISO_basename}"

ISO_target="of=${USB_device}"

if [ ${usepv} -eq 1 ]
then
	optionsI="bs=4M iflag=direct,fullblock"
	optionsO="bs=4M iflag=fullblock conv=fdatasync oflag=direct,dsync"

	ISO_size=$(du -BM ${ISO_basename} | awk '{ print $1 }' )

	echo "\n COMMAND: dd ${ISO_image} ${optionsI} | pv -s ${ISO_size} | dd ${ISO_target} ${optionsO} ...\n"

	dd ${ISO_image} ${optionsI} | pv -s ${ISO_size} | dd ${ISO_target} ${optionsO}
else
	options="bs=4M status=progress conv=fdatasync iflag=direct oflag=direct"

	echo "\n COMMAND: dd ${ISO_image} ${ISO_target} ${options} ...\n"

	dd ${ISO_image} ${ISO_target} ${options}
fi

if [ ${USB_eject} -eq 1 ]
then
	echo "\n Issuing 'EJECT' command to unmount bootable USB stick ..."
	eject ${USB_device}
else
	echo ""
	lsblk -P -p -o NAME,FSTYPE,PARTLABEL,UUID,SIZE,MOUNTPOINT,SUBSYSTEMS | awk -v dev="${USB_device}" '$1 ~ dev { print $0 }'
	echo ""
	blkid | awk -v dev="${USB_device}" '$1 ~ dev { print $0 }'
fi
2 Likes

apply the iflag in the second dd (after pv)

dd if=/dev/urandom | pv | dd iflag=fullblock of=file bs=1M count=1000000

3 Likes

Thank you, Pavlos. That fixed it!

I didn't think that I would need that on the 2nd dd because, via pipe, I expected that there would be no "loss" or "fragmentation" or "data offset" that would trigger such a condition. Guess I was wrong!

:slight_smile:

2 Likes