[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: A Newbie LVM Question



Hi,

stan <stanb@panix.com> wrote:

> I've played with LVM on HP-UX, but only just enough to get a firm 
> handle on the fact that I don't understand the complexities of it,
> and that is easy to screw up, but hard to fix :-)
> 
> So, I find myself building a Debian MytTV machine. In addition
> to the 40G root drive, I installed 2 other drives, a 60G (/dev/hdb), 
> and a 120G (/dev/hdd). 
> 
> What I want to do is create one large "virtual disk" out of these,
> then I will then create a XFS filesystem on and use to store various 
> multimedia files for mythtv. I want the disks to be "striped" if
> that is possible with different size disks? 
> 
> I've installed the lvm (1) packages, and I've read the HOWTO.
> Here is what I came up with:
> 
> fdisk both disks, creating a single partition on each one of type 8e
> 
> pvcreate /dev/hdb1
> pvcreate /dev/hdd1
> 
> vgcreate mythtv /dev/hdb1 /dev/hdd1
> 
> And then I should be ready to create a filesystem on this "virtual 
> disk".

Not quite. You need to run

lvcreate -L <size> -n <name> <vgname> 
e.g.
lvcreate -L 180 GB -n lvol1 mythtv

remember: you create filesystems on *logical volumes*, not on a VG.

The lvcreate ... command creates a Logical Volume for you and makes it
available under /dev/<vgname>/<lvname>, e.g. /dev/mythtv/lvol1

Then you create the filesystem like so

mkfs.xfs /dev/mythtv/lvol1

and mount it. (I assume at this point that you have relevant modules
loaded, a good kernel to support xfs, and the userland xfsprogs installed)


Be sure to exercise the commands
  cat /proc/lvm/global
  vgdisplay -v <vgname>
  lvdisplay -v /dev/<vgname>/<lvname>
a lot!

> 
> Is it really that simple?
> 
> Any advice on pitfalls appreciated!


Good luck!
Erich


PS: as a goodie, I attach a script of mine, which I use a lot just to make
life a bit more simple. READ IT, use at your own risk, report
errors/suggestions/kudos/...

#!/bin/bash

#set -x

Prog=$(basename $0)

tmp_lv=/tmp/$Prog.$$.lv
tmp_pv=/tmp/$Prog.$$.pv
tmp_vg=/tmp/$Prog.$$.vg


L_VG=$(vgdisplay | grep -E '^[ ]*VG Name' | awk '{print $3}')

for vg in $L_VG
do
	vgdisplay $vg > $tmp_vg
	vg_total=$(grep '^[ ]*Total PE' $tmp_vg | awk '{print $3}')
	vg_free=$(grep '^[ ]*Free  PE' $tmp_vg | awk '{print $5}')
	echo "--- $vg ---   free $vg_free of $vg_total"
	L_LV=$(vgdisplay -v $vg | grep -E '^[ ]*LV Name' | awk '{print $3}')
	echo "    lvols"
	for lv in $L_LV
	do	
		lvs=${lv##*/}
		lvdisplay -v $lv > $tmp_lv
		lv_stat=$(grep '^[ ]*LV Status' $tmp_lv | awk '{print $3}')
		lv_size=$(grep '^[ ]*LV Size' $tmp_lv | awk '{print $3,$4}')
		lv_cule=$(grep '^[ ]*Current LE' $tmp_lv | awk '{print $3}')
		lv_alle=$(grep '^[ ]*Allocated LE' $tmp_lv | awk '{print $3}')
		echo "$lv:$lv_alle:$lv_cule:$lv_size:$lv_stat" |\
		awk -F: '{printf "\t%-20s (%s/%s)\t%s\t%s\n",$1,$2,$3,$4,$5}'
		xx=$(df -PT | grep $vg | grep $lvs)
		lv_mountp=$(echo $xx |awk '{print $7}')
		lv_fs_typ=$(echo $xx | awk '{print $2}' )
		if [ "X$lv_mountp" = "X" ]
		then
			if [ $(grep -c $lv /proc/swaps) = 1 ]
			then
				lv_mountp="SWAP"
			else
				lv_mountp="RAW"
			fi
		fi
		echo -e "	$lv_mountp\t\t($lv_fs_typ)"
		sed -n  '/^   PV Name/,/^$/p' $tmp_lv | grep -vE 'PV|^$' | awk '{printf "\t  %s %s\n", $1,$2}'
	done
	L_PV=$(vgdisplay -v $vg | grep '^[ ]*PV Name' | awk '{print $3}')
	echo "    pvs"
	for pv in $L_PV
	do
		pvdisplay $pv > $tmp_pv
		pv_total=$(grep '^[ ]*Total PE' $tmp_pv | awk '{print $3}')
		pv_free=$(grep '^[ ]*Free PE' $tmp_pv | awk '{print $3}')
		echo "	$pv	free $pv_free of $pv_total"
	done
done

rm -f $tmp_lv $tmp_pv $tmp_vg

Reply to: