2 sys.path.append(os.path.abspath(os.curdir))
3 sys.path.append('/usr/lib/dumpdisklayout/modules/')
4 import re,os,commands,sys,datetime
10 hddlist=[] # list of harddisks found in the layout-file
11 volgroup={} # list of volume-groups and their pvs
13 # -------------------------------------------------------------------------------------
14 def check_filefmt(inlines):
16 if not re.match('^fileformat!',line): continue
17 filefmt=line.split('!')[1]
18 if filefmt==FILEFORMVER:
21 print 'found file format %s and expected %s' % (filefmt, FILEFORMVER)
25 def check_physhdd(inlines):
27 if not (re.match('[:alnum:]*|[0-9]*![:alnum:]*![:alnum:]*', line)): continue
28 (dev,size,vendor,model)=line.split('!')
29 if not dev in mod_diskutil.list_disks():
30 print 'Cannot find hard disk %s'%devname
33 cursize=file('/sys/block/%s/size'%dev).readline().strip("\r\n").strip()
37 print 'size of hard disk does not match for device %s'%devname
41 def rest_sfdisk(inlines):
45 if not re.match('^%s!'%hdd, line): continue
46 line=line.replace('%s!'%hdd,'')
49 if sfdiskdat=='': continue
50 cmd='echo "%s" | sfdisk /dev/%s'%(sfdiskdat,hdd)
51 (status, output) = commands.getstatusoutput(cmd)
52 print 'sfdisk returned %s'%status
53 if not int(status) in (0,256):
54 print 'sfdisk failed to restore disk /dev/%s'%hdd
61 if len(data)!=12: continue
62 (devname,vgname,uuid)=(data[0],data[1],data[11])
63 if not volgroup.has_key(vgname):
64 volgroup[vgname]=(devname+' ')
66 volgroup[vgname]+=(devname+' ')
67 commands.getstatusoutput('dd if=/dev/zero of=%s count=400 bs=512'%devname)
68 cmd='pvcreate -ff -Zy -u %s %s'%(uuid, devname)
69 print 'pv_exec %s'%cmd
70 (status, output) = commands.getstatusoutput(cmd)
72 print 'pvcreate failed (%s) with status %s'%(cmd,status)
79 if len(data)!=18: continue
80 (vgname,uuid,lvmvers)=(data[0],data[16],data[17])
81 cmd='vgcreate %s %s'%(vgname, volgroup[vgname])
82 print 'vg_exec %s'%cmd
83 (status, output) = commands.getstatusoutput(cmd)
85 print 'vgcreate failed (%s) with status %s'%(cmd,status)
92 if len(data)!=13: continue
93 lvname=data[0].split('/')[-1]
96 commands.getstatusoutput('dd if=/dev/zero of=%s count=4 bs=512'%data[0])
97 cmd='lvcreate -n %s -L %sk %s'%(lvname, lvsize, vgname)
98 print 'lv_exec %s'%cmd
99 (status, output) = commands.getstatusoutput(cmd)
101 print 'lvcreate failed (%s) with status %s'%(cmd,status)
105 def rest_fs(inlines):
107 if len(line.split('!'))!=4: continue
108 (devname,filesys,label,attrib)=line.split('!')
109 res=mod_filesys.format(devname, filesys, label, attrib)
111 print 'failed to format device %s'%devname