[Fedora-livecd-list] Bug 587411 - livecd-iso-to-disk --format fails with SD/MMC partitions
Frederick Grose
fgrose at gmail.com
Wed May 12 21:22:41 UTC 2010
Sorry for 'jumping the gun'. Here's a more fully debugged version:
--Fred
On Wed, May 12, 2010 at 4:35 PM, Frederick Grose <fgrose at gmail.com> wrote:
> On Mon, May 10, 2010 at 6:27 PM, Alan Pevec <apevec at gmail.com> wrote:
> On Mon, May 10, 2010 at 10:20 PM, David Huff <dhuff at redhat.com> wrote:
>
>> > Frederick's patch fixes issues with SD cards that do not have a standard
>
>> > partitioning layout and requires part0 ie: /dev/mmcblk0
>
>>
> issue is that partitions on mmc device use separator p i.e. 1st
>
>> partition is mmcblk0p1
>
>>
> > However the proposed patch requires users specify a
>
>> > partition for the storage device or have --format option require a
>
>> > partition number.
>
>>
> --format will create one, first partition, so it doesn't make sense to
> specify the partition number
>
Yes, currently we don't support multiple partition devices. That will be
> another bug and patch upcoming.
>
> > Any comments on this?
>
>> >
>
>> > Also Frederick can you please resend the patch to the list, that way I
>
>> > can apply it and retain all header info for the commit.
>
>>
> patch in BZ also merged checkLVMActive() which is now committed
>
>>
> I don't like special case for mmc:
>
>> [[ "${path/*mmc*/yes}" = yes ]] && mmc=p
>
>>
> instead, why not simply detect partition separator here:
>
>>
> path=/dev/`basename $path`
>
>> partnum0=${path##$device}
>
>> partnum=${partnum0/#p/}
>
>> if [ "$partnum" = "$partnum0" ]; then
>
>> separator=""
>
>> else
>
>> separator="p"
>
>> fi
>
>> ...
> USBDEV=${device}${separator}${partnum:-1}
>
A problem arises because users are allowed to --reset-mbr --format a
partition by simply supplying a device node such as /dev/sdb. This means
the code must determine an appropriate partition name when one is not
supplied. So the suggested test fails for the case where "... --format
/dev/mmcblk0 ..." is supplied to livecd-iso-to-disk.
>
The path test works, but assumes that the separator is used, and apparently
some older systems did not use a 'p' separator. So, better to just read
from /proc/partitions.
>
The following patch is proposed--but note: It has NOT been tested on EFI
code paths.
>
--Fred
diff --git a/tools/livecd-iso-to-disk.sh b/tools/livecd-iso-to-disk.sh
> index f4d0855..ad85839 100755
> --- a/tools/livecd-iso-to-disk.sh
> +++ b/tools/livecd-iso-to-disk.sh
> @@ -47,21 +47,24 @@ getdisk() {
> return
> fi
>
> - p=$(udevadm info -q path -n $DEV)
> - if [ -e /sys/$p/device ]; then
> - device=$(basename /sys/$p)
> + path=$(udevadm info -q path -n $DEV)
> + if [ -e /sys/$path/device ]; then
> + device=$(basename /sys/$path)
> else
> - device=$(basename $(readlink -f /sys/$p/../))
> + device=$(basename $(readlink -f /sys/$path/../))
> fi
> if [ ! -e /sys/block/$device -o ! -e /dev/$device ]; then
> - echo "Error finding block device of $DEV. Aborting!"
> - exitclean
> + echo "Error finding block device of $DEV. Aborting!"
> + exitclean
> fi
> -
> - device="/dev/$device"
> +
> # FIXME: weird dev names could mess this up I guess
> - p=/dev/`basename $p`
> - partnum=${p##$device}
> + set $( awk '$4 ~ /'$device'.*[0-9]$/ {print $4}' /proc/partitions )
> + partition=$1
> + path=$(basename $path)
> + partnum=${path##$device}
> + [[ -z "$partnum" ]] && partnum=${partition##$device}
> + device="/dev/$device"
> }
>
> resetMBR() {
> @@ -157,16 +160,18 @@ createGPTLayout() {
> echo "WARNING: THIS WILL DESTROY ANY DATA ON $device!!!"
> echo "Press Enter to continue or ctrl-c to abort"
> read
> - umount ${device}? &> /dev/null
> + umount ${device}* &> /dev/null
> /sbin/parted --script $device mklabel gpt
> partinfo=$(LC_ALL=C /sbin/parted --script -m $device "unit b print"
|grep ^$device:)
> size=$(echo $partinfo |cut -d : -f 2 |sed -e 's/B$//')
> /sbin/parted --script $device unit b mkpart '"EFI System Partition"'
fat32 17408 $(($size - 17408)) set 1 boot on
> - USBDEV=${device}1
> # Sometimes automount can be _really_ annoying.
> echo "Waiting for devices to settle..."
> /sbin/udevadm settle
> sleep 5
> + partition=$( awk '$4 ~ /'${device#/dev/}'.*[0-9]$/ {print $4}'
/proc/partitions )
> + partnum=${partition##${device#/dev/}}
> + USBDEV=${device}${partnum}
> umount $USBDEV &> /dev/null
> /sbin/mkdosfs -n LIVE $USBDEV
> USBLABEL="UUID=$(/sbin/blkid -s UUID -o value $USBDEV)"
> @@ -179,16 +184,18 @@ createMSDOSLayout() {
> echo "WARNING: THIS WILL DESTROY ANY DATA ON $device!!!"
> echo "Press Enter to continue or ctrl-c to abort"
> read
> - umount ${device}? &> /dev/null
> + umount ${device}* &> /dev/null
> /sbin/parted --script $device mklabel msdos
> partinfo=$(LC_ALL=C /sbin/parted --script -m $device "unit b print"
|grep ^$device:)
> size=$(echo $partinfo |cut -d : -f 2 |sed -e 's/B$//')
> /sbin/parted --script $device unit b mkpart primary fat32 17408
$(($size - 17408)) set 1 boot on
> - USBDEV=${device}1
> # Sometimes automount can be _really_ annoying.
> echo "Waiting for devices to settle..."
> /sbin/udevadm settle
> sleep 5
> + partition=$( awk '$4 ~ /'${device#/dev/}'.*[0-9]$/ {print $4}'
/proc/partitions )
> + partnum=${partition##${device#/dev/}}
> + USBDEV=${device}${partnum}
> umount $USBDEV &> /dev/null
> /sbin/mkdosfs -n LIVE $USBDEV
USBLABEL="UUID=$(/sbin/blkid -s UUID -o value $USBDEV)"
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.fedoraproject.org/pipermail/livecd/attachments/20100512/bf930579/attachment.html
More information about the livecd
mailing list