Confirming predefined partition layout using kickstart
Jason Kohles
email at jasonkohles.com
Fri Dec 7 20:29:00 UTC 2007
On Dec 6, 2007, at 3:02 PM, Peter Åstrand wrote:
> On Mon, 26 Nov 2007, Peter Åstrand wrote:
>
>> ...
>> "Could not allocate requested partitions". If we are using:
>>
>> zerombr
>> clearpart --all --initlabel
>> partition / --fstype ext3 --size=1600 --asprimary
>> partition swap --recommended
>>
>> ...things works great, but then there's no confirmation.
>
> I've discovered one major problem: When booting from a USB stick with
> diskboot.img, a kickstart file like this erases the USB stick! How can
> this be prevented? It seems like it's fairly reliable that the first
> disk
> is normally sda, but if booting from USB stick, sda is the stick. I
> guess
> we need to use "ignoredisk" on the USB stick or something like that,
> but I
> cannot find any obvious solution.
>
If you know it will always be sda, you can do:
ignoredisk --drives=sda
If you don't know for sure that it will always be sda, you can build
an ignoredisk line from %pre. This is the code I use to ignore the
usb stick regardless of where it shows up...
# This part goes in the main body of ks.cfg, I use it for several
# different configuration things built by my %pre scripts
%include /tmp/generated-configuration
%pre
# This %pre just makes sure the file exists, so the include
# never fails
touch /tmp/generated-configuration
%pre --interpreter=python
# This is a generic %pre script that creates a file named
# /tmp/disks with the device name and the size of the disk in MB
# You can use this for all kinds of stuff
import os
import sys
import parted
sys.path.append('/usr/lib/anaconda')
import isys
drives = isys.hardDriveDict().keys()
drives.sort()
f = open( "/tmp/disks", "w" )
for drive in drives:
device = "/tmp/" + drive
if not os.access(device, os.O_RDONLY):
try:
isys.makeDevInode(drive, device)
except:
continue
dev = parted.PedDevice.get(device)
mb = (float(dev.heads * dev.cylinders * dev.sectors) / (1024 *
1024) * dev.sector_size)
dev.close()
f.write( "%s %s\n" % ( drive, mb ) )
%pre
# This one looks for disks smaller than a given size, and if any are
found, ignores them
TINY=`awk 'BEGIN { ORS="," } $2 < 2000 { print $1 }' /tmp/disks | sed
's/,$//'`
if [ -n "$TINY" ]; then
echo "ignoredisk --drives=$TINY" >> /tmp/generated-configuration
fi
--
Jason Kohles, RHCA RHCDS RHCE
email at jasonkohles.com - http://www.jasonkohles.com/
"A witty saying proves nothing." -- Voltaire
More information about the Kickstart-list
mailing list