File: lvm

package info (click to toggle)
partman-lvm 53
  • links: PTS
  • area: main
  • in suites: etch-m68k
  • size: 1,660 kB
  • ctags: 37
  • sloc: sh: 1,128; makefile: 30
file content (112 lines) | stat: -rwxr-xr-x 2,726 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
#!/bin/sh

# This script sets method "lvm" for all partitions that have the lvm
# flag set.  It also discovers the logical volumes and creates in them
# a loop partition table and partition.

. /lib/partman/definitions.sh

# Avoid warnings from lvm2 tools about open file descriptors
export LVM_SUPPRESS_FD_WARNINGS=1

log-output -t partman pvscan
log-output -t partman vgscan

if [ -x /sbin/vgdisplay ]; then
	vgroups=$(/sbin/vgdisplay | grep '^[ ]*VG Name' | 
		sed -e 's/.*[[:space:]]\(.*\)$/\1/' | sort)
else
	vgroups=''
fi

for dev in /var/lib/partman/devices/*; do
	[ -d "$dev" ] || continue
	cd $dev
	partitions=
	open_dialog PARTITIONS
	while { read_line num id size type fs path name; [ "$id" ]; }; do
		if [ "$fs" != free ]; then
			partitions="$partitions $id"
		fi
	done
	close_dialog

	for id in $partitions; do
		lvm=no

		# If the device is in fact being used for lvm, mark it as such.
		# This is a hack and it only works for full block devices, not
		# partitions. It makes raid devices used for lvm show up as such.
		if pvdisplay $(cat $dev/device) >/dev/null 2>&1 ; then
			lvm=yes
		fi
	
		open_dialog GET_FLAGS $id
		while { read_line flag; [ "$flag" ]; }; do
			if [ "$flag" = lvm ]; then
				lvm=yes
				# can not break here
			fi
		done
		close_dialog
		if [ "$lvm" = yes ]; then
			[ -d $id ] || mkdir $id
			echo lvm >$id/method
		fi
	done

	if [ -f device ]; then
		# Obtain the VG from the device name
		device=`cat device`
		case "$device" in
		    # LVM2
		    /dev/mapper/*)
			vglv=${device#/dev/mapper/}
			vglv=$(echo "$vglv" | sed -e 's/\([^-]\)-\([^-]\)/\1 \2/' |
			       sed -e 's/--/-/g')
			vg=$(echo "$vglv" | cut -d" " -f1)
			;;
		    # LVM1
		    *)
			vg=$(sed 's,^/[^/]*/\([^/]*\)/.*,\1,' device)
			;;
		esac
		is_vg=no
		for vgs in $vgroups; do
			[ "$vgs" = "$vg" ] && is_vg=yes
		done
		if [ "$is_vg" = "yes" ] ; then
			# this is an activated logical volume
			# let's create label on it
			open_dialog NEW_LABEL loop
			close_dialog
			# find the free space
			open_dialog PARTITIONS
			free_space=''
			while { read_line num id size type fs path name; [ "$id" ]; }; do
				if [ "$fs" = free ]; then
					free_space=$id
					free_size=$size
				fi
			done
			close_dialog
			# create partition in the free space
			if [ "$free_space" ]; then
				open_dialog NEW_PARTITION primary ext2 $free_space full $free_size
				read_line num id size type fs path name
				close_dialog
				if [ "$id" ]; then
					open_dialog GET_FILE_SYSTEM $id 
					read_line filesystem
					close_dialog
					if [ "$filesystem" != none ]; then
						open_dialog CHANGE_FILE_SYSTEM $id $filesystem
						close_dialog
					fi
				fi
			fi
			open_dialog DISK_UNCHANGED
			close_dialog
		fi
	fi
done