possible FAQ: setting file system parameters with part/logvol?

Tim Mooney Tim.Mooney at ndsu.edu
Mon Dec 31 22:40:57 UTC 2007


In regard to: RE: possible FAQ: setting file system parameters with...:

> Going along with what Chip said,  you will *have* to use pre because
> there doesn't seem to be a way to specify the mkfs options via the part
> command.

Thanks to both you and Chip for confirming what I suspected.  I was just
hoping there was some undocumented way to pass things through part/logvol,
since that would have made my life much easier.

We make heavy use of %post in all of our kickstart files, but although
I knew %pre existed, I had never needed to use it before.  I have now.

> The way I see it, is you have two options.
>
> 1) If the partition you need to use "custom" formatting options on does
> not contain any OS data, then just have part create the partition for
> you and re-format it in %post.  (Personally, I'd have part make a VG,
> but not LV, and create it during %post to speed up deployment time)
> 2) If you do require OS data, then you will need to calculate the size
> of the partition you need, then format them accordingly, then just have
> part use --noformat --onpart

The second option is essentially what I ended up doing.  Here's what my
partitioning section of my ks config files look like:



zerombr yes
#
# TVM: don't do anything to the disk label.
#
clearpart --none

#/boot
part /boot  --noformat --onpart=hda1

# swap
part swap   --noformat --onpart=hda2

# /
part    /   --noformat --onpart=hda3

# remainder for LVM
part pv.01  --noformat --onpart=hda4

volgroup localvg1 pv.01 --noformat

logvol /usr/local   --noformat  --name=local    --vgname=localvg1
logvol /tmp         --noformat  --name=tmp      --vgname=localvg1
logvol /var         --noformat  --name=var      --vgname=localvg1
logvol /home        --noformat  --name=home     --vgname=localvg1
logvol /u01         --noformat  --name=oracle   --vgname=localvg1




Here's the %pre I ended up using (don't laugh, I was pressed for time):



%pre
echo '***'
echo '*** Perform manual partitioning step now.'
echo '***'
sleep 99999



echo 'boot-alignment-check' > /dev/hda1
echo 'swap-alignment-check' > /dev/hda2
echo 'root-alignment-check' > /dev/hda3
echo 'vg-alignment-check' > /dev/hda4

echo '***'
echo '*** Perform alignment checks for boot/swap/root/vg now.'
echo '***'
sleep 99999



lvm.static pvcreate /dev/hda4
lvm.static vgcreate --alloc contiguous -s 8M localvg1 /dev/hda4

lvm.static lvcreate --alloc contiguous --name var   --size 36864 localvg1
lvm.static lvcreate --alloc contiguous --name tmp   --size 2048 localvg1
lvm.static lvcreate --alloc contiguous --name local --size 1024 localvg1
lvm.static lvcreate --alloc contiguous --name home  --size 2048 localvg1

# figure out how many free physical extents there are remaining, and use
# them up.
pe=`lvm.static vgdisplay localvg1 | \
     sed -ne 's+^.*Free *PE.*/ Size *\([0-9]*\) /.*$+\1+p'`

#lvm.static lvcreate --alloc contiguous --name oracle --extents $pe localvg1
lvm.static lvcreate --alloc contiguous --name oracle --size 24576 localvg1

echo 'var-alignment-check' > /dev/localvg1/var
echo 'tmp-alignment-check' > /dev/localvg1/tmp
echo 'local-alignment-check' > /dev/localvg1/local
echo 'home-alignment-check' > /dev/localvg1/home
echo 'oracle-alignment-check' > /dev/localvg1/oracle

echo '***'
echo '*** Perform alignment checks for var/tmp/local/home/oracle now.'
echo '***'
sleep 99999




mkfs.ext3 -j -L /boot -E stride=16 /dev/hda1
mkswap -L swap /dev/hda2
mkfs.ext3 -j -L / -E stride=16 /dev/hda3

mkfs.ext3 -j -L /var -E stride=16 /dev/localvg1/var
mkfs.ext3 -j -L /tmp -E stride=16 /dev/localvg1/tmp
mkfs.ext3 -j -L /local -E stride=16 /dev/localvg1/local
mkfs.ext3 -j -L /home -E stride=16 /dev/localvg1/home
mkfs.ext3 -j -L /u01 -E stride=16 /dev/localvg1/oracle

echo '***'
echo '*** Filesystems created, perform any remaining tests you wish now.'
echo '***'
sleep 3600





Some explanation of the %pre is probably in order.  First, each of the
four boxes I was kickstarting were actually RHEL4.6 Xen (fully) virtual
machines on a RHEL5.1 base host.  The RHEL5.1 host has about 300 GB of
SAN storage, and I created four LVs within that, and put each of the
virtual hosts directly on one of the LVs (kickstarting with Xen, the
LV appears as /dev/hda).

Within the %pre:

- I pause the %pre with sleep and manually switch to virtual console #2
   (bash prompt) and perform the partitioning manually.  I didn't have time
   to figure out how to script sfdisk to automate the partitioning.  That's
   something I plan to play with in the coming days.

   When I'm done with partitioning and have things the way I want, I
   find the pid of the sleep command and kill it.

- the echo commands write a bit of text to the beginning of each
   partition, and then a sleep pauses %pre again.

   I then use a utility on the RHEL5.1 base host to verify that
   each of the bits of text that were written to the start of the
   VMs partitions is aligned on a 64K boundary.  Since all of the
   partitions ultimately get their storage from a RAID5 volume with
   a 64K stripe cache, you pay a signficant performance hit if your
   partitions or LVs are not aligned on a 64K boundary.

- once I've verified that the partitions are aligned on 64K boundaries,
   I again switch to virtual console 2 in the kickstart and kill the
   sleep.

- the LVM commands run to create the PV, volume group, and my LVs, and
   then write a bit of text to the start of each of the LVs, and again
   %pre pauses

- switch back to the RHEL5.1 base host, and spot check that at least
   one of the LVs is aligned on a 64K boundary by checking for the bit of
   text that was written to the start of the LV.  If one LV is correctly
   aligned, all of them will be.

- kill the sleep, at which point mkfs runs to create the empty filesystems
   on the partitions and LVs, with the stride=16, as well as setting up swap.
   The stride is used to make the filesystem play nicely with a RAID5
   stripe cache of 64K.

- the final sleep really isn't needed, kill it and %pre ends and the
   kickstart actually begins.



Thanks again for your help.  With the suggestions you provided, I was
able to get these four VMs kickstarted over the past weekend, and I've
verified that their filesystems are all correctly aligned for the maximum
performance all the way through the storage stack (which in this case
is unbelievably deep).

Tim
-- 
Tim Mooney                                        Tim.Mooney at ndsu.edu
Information Technology Services                   (701) 231-1076 (Voice)
Room 242-J6, IACC Building                        (701) 231-8541 (Fax)
North Dakota State University, Fargo, ND 58105-5164




More information about the Kickstart-list mailing list