[sf-lug] yes(1): Re: problem using gnu parted

Alex Kleider akleider at sonic.net
Fri Feb 2 09:22:36 PST 2018


Thanks, Michael, for suggesting sfdisk (in place of gnu parted.)

I like it because of its --dump option:

Now my implementation simply
dumps the partition data to a temporary file,
uses sed to change just the one crucial number,
and then 'dump's back to the device (in my case an sdcard image 
associated with a loop device):

# sfdisk "$LOOPDEV" > "$DUMP_FILE"
# sed -i s/"$P2_SIZE"/"$NEW_SIZE_sectors"/g "$DUMP_FILE"
# sfdisk "$LOOPDEV" < "$DUMP_FILE"

So now we have at least two ways to 'skin this cat.'


On 2018-01-30 23:48, Michael Paoli wrote:
> Well, typically with something like:
> $ yes | some_program
> 
> But alas, GNU parted - or at least the version I've got at my 
> fingertips,
> is rather annoyingly adverse to automation and non-interactive use.
> Seems it insists upon reading from a tty device, and stubbornly fails
> to make a change it otherwise warns about without being able to get a
> Yes from attached tty device.  Your version/mileage may very.
> Even if I do it under batch(1) so there's no attahced tty device,
> parted still fails.  From strace(1), I find:
> ...
> 6111  write(2, "Shrinking a partition can cause data loss, are you
> sure you want to", 67) = 67
> 6111  write(2, "\n", 1)                 = 1
> 6111  write(2, "continue?", 9)          = 9
> 6111  write(2, "\n", 1)                 = 1
> 6111  ioctl(0, TCGETS, 0x7ffe7922d2c0)  = -1 ENOTTY (Inappropriate
> ioctl for device)
> ...
> essentially, after prompting (and regardless of whether or not -s or 
> --script
> option is given), it seems to try tty type ioctl call on file 
> descriptor
> 0 (stdin), and if that fails it just fairly quickly cleans up and 
> exits.
> Annoying, but could possibly use expect or similar to work around that.
> 
> Personally I tend to use and quite like sfdisk ... but one needs to be
> highly careful with sfdisk - very easy to screw things up if one 
> doesn't
> know what one is doing, e.g. "Oh, sure, sfdisk, let me try that ..."
> # sfdisk /dev/sda
> Your input is now specifying the precise layout of your new partition
> table.  You know the precise input format to use, right?
> Good luck with that if that isn't what you were expecting to be doing.
> 
> Anyway, in more typical case using stdin, yes(1) is quite useful, e.g.:
> $ ./yn; echo $?
> What'll it be?  [y/n]: y
> Okay, fine.
> 
> $ </dev/null ./yn; echo $?
> What'll it be?  [y/n]: Nope.
> 1
> $ yes | ./yn; echo $?
> What'll it be?  [y/n]: Okay, fine.
> 
> $
> 
>> From: "Alex Kleider" <akleider at sonic.net>
>> Subject: Re: yes(1): Re: [sf-lug] problem using gnu parted
>> Date: Tue, 30 Jan 2018 22:01:59 -0800
> 
>> On 2018-01-30 21:31, Michael Paoli wrote:
>>> See also: yes(1)
>>> 
>>>> From: "Alex Kleider" <akleider at sonic.net>
>>>> Subject: [sf-lug] problem using gnu parted
>>>> Date: Tue, 30 Jan 2018 19:59:46 -0800
>>> 
>>>> parted $LOOPDEV unit 's' resizepart "$PART_NUMBER" 
>>>> "${ENDING_SECTOR}" <<
>>>> HERE
>>>> yes
>>>> HERE
>> 
>> I looked at man yes.
>> How would one use it?  And specifically, how could it be used to  
>> solve my problem?



More information about the sf-lug mailing list