#!/python/bin/python# Script automagico que reparticiona el rigidofrom subprocess import PIPE, Popen, STDOUTimport osdef _show_error(msg): cmd = "dialog --title 'ERROR' --msgbox '%s' 10 60" % msg p = Popen(cmd, stdout=PIPE, stderr=PIPE, shell=True) stdout, stderr = p.communicate()def _exec(cmd): ''' Ejecuta un proceso en el shell y retorna la salida del mismo ''' p = Popen(cmd, stdout=PIPE, stderr=PIPE, shell=True) stdout, stderr = p.communicate() if stderr != '': _show_error(stderr) return stdoutdef hd_size(): ''' Devuelve el tamanio del disco rigido en GB ''' cmd = "fdisk -l | grep Disk | cut -f 3 -d ' ' | head -n1" pstdout = _exec(cmd) if '.' in pstdout: pstdout = int(pstdout.split('.')[0]) return pstdoutdef hd_root(): ''' Devolveme punto de montaje del disco ... TODO: a futuro, soportar RAID, para ello, devolver todos los discos encontrados. ''' cmd = "fdisk -l | grep Disk | cut -f 2 -d ' ' | head -n1" pstdout = _exec(cmd) pstdout = pstdout.strip().split(':')[0] return pstdoutdef psize(part): ''' Devuelve el tamanio de las particiones, esto se calcula dinamicamente a partir del tamanio del disco ... 30 % lo usamos para el /root 70 % para el /var La swap siempre es de 2G ''' # restamos lo que usamos para la swap total = hd_size() - 2 if part == 'swap': return 2 if part == 'root': return 30 * total / 100 if part == 'var': return 70 * total / 100def format(): ''' Borra todas las particiones. Toma como parametro el /dev/xxx de un disco rigido, busca la cantidad de particiones que tiene y las escribe en un archivo. ''' cmd = "fdisk %s -l | tail -n1 | cut -f 1 -d ' ' | cut -c 9" % hd_root() particion = _exec(cmd) fh = open('fdisk.tmp', 'w') if particion != '\n': print "Borrando particioes" particion = int(particion) while particion != 0: if particion == 0: break fh.write('d\n%s\n' % particion) particion = particion - 1 fh.write('w\n') fh.close() cmd = "cat fdisk.tmp | fdisk %s" % hd_root() p = _exec(cmd) os.unlink('fdisk.tmp')def repart(): ''' Armamos las particiones en el disco MUAHAHAHAA ''' cmd = "fdisk %s -l | tail -n1 | cut -f 1 -d ' ' | cut -c 9" % hd_root() particion = _exec(cmd) if particion == '\n': fh = open('fdisk.tmp', 'w') # creo swap fh.write('n\np\n1\n\n+%sG\n\nt\n82\n' % psize('swap')) # creo particion para root y la marco como booteable fh.write('n\np\n2\n\n+%sG\n\na\n2\n\n' % psize('root')) # creo el /var fh.write('n\np\n3\n\n+%sG\n\n\n' % psize('var')) fh.write('w\n') fh.close() cmd = "cat fdisk.tmp | fdisk %s" % hd_root() p = _exec(cmd) os.unlink('fdisk.tmp')if __name__ == '__main__': format() repart()