All pastes #2008613 Raw Edit

Katana

public python v1 · immutable
#2008613 ·published 2010-12-02 14:24 UTC
rendered paste body
#!/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 stdout    def 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 pstdout    def 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()