Parted y Python: pyparted
Supongo que muchos de vosotros conoceréis libparted, la librería que hay debajo de los programas de particionado típicos de GNU. Muchos de vosotros conocéis también Python, si juntamos estas dos cosas tenemos que hacer programitas que manejen el particionado del disco va a estar al alcance de cualquiera. Llegados a este punto, no sobra decir que: NO me responsabilizo de los daños que pueda causar el uso de esta receta, yo lo he probado con un disco flash y me ha funcionado sin problemas. Quien quiera garantías... que las pague :P.
Instalación
Pues lamentablemente hay que compilar e instalar... no es muy complicado, pero bueno... empecemos por descargarnos los fuentes del modulo de python, los encontramos en http://dcantrel.fedorapeople.org/pyparted/. Hay que tener en cuenta una cosa, a fecha de hoy (4 de diciembre de 2007) en Debian Unstable la versión de libgparted-dev empaquetada es la antiquísima 1.7, lo cual nos obliga a usar una versión del módulo antigua: la 1.8.5. Esto es un poco rollo, pero por lo menos no tenemos que instalar y configurar libgparted entera. No he probado versiones más nuevas del módulo de python, salvo la versión 1.8.9 que compilaba pero luego no funcionaba. Descargados los fuentes nos tenemos que instalar ciertas cosillas:# apt-get install libparted-dev uuid-dev
typedef enum { PED_PARTITION_NORMAL = 0x00, PED_PARTITION_LOGICAL = 0x01, PED_PARTITION_EXTENDED = 0x02, PED_PARTITION_FREESPACE = 0x04, PED_PARTITION_METADATA = 0x08 } PedPartitionType;Lo cambiaremos por:
typedef enum { PED_PARTITION_NORMAL = 0x00, PED_PARTITION_LOGICAL = 0x01, PED_PARTITION_EXTENDED = 0x02, PED_PARTITION_FREESPACE = 0x04, PED_PARTITION_METADATA = 0x08, PED_PARTITION_PROTECTED = 0x10 } PedPartitionType;...y ahora sí, a compilar:
:~$ unp pyparted-1.8.1.tar.gz
~$ cd pyparted-1.8.1
~/pyparted-1.8.1$ ./configure
~/pyparted-1.8.1$ make && sudo make install
Ejemplos de uso
Para probar el módulo vamos a usar ipython, si no lo tenéis ya sabéis: apt-get o aptitude. Y una cosa más: hay que ejecutarlo en modo superusuario porque si no no podréis abrir los dispositivos de escritura. En los ejemplos vamos a usar un pendrive direccionado en /dev/sda. TENED CUIDADO POR SI VUESTRO DISCO PRINCIPAL ES SATA QUE ENTONCES SERÁ /dev/sda. Si queréis hacer las pruebas con un pendrive comprobad con dmesg el nombre del dispositivo. Y una cosa más: si gnome os automonta la unidad, debéis desmontarla primero. Al tajo, ejecutamos ipython:$ sudo ipython
Total number of aliases: 15
Python 2.4.4 (#2, Aug 16 2007, 02:03:40)
Type "copyright", "credits" or "license" for more information.
IPython 0.8.1 -- An enhanced Interactive Python.
? -> Introduction to IPython's features.
%magic -> Information about IPython's 'magic' % functions.
help -> Python's own help system.
object? -> Details about 'object'. ?object also works, ?? prints more.
In [1]:
In [1]:import parted
In [2]:myDisk = parted.PedDisk.new(parted.PedDevice.get('/dev/sda'))
In [3]:myDisk.dev.open()
In [4]:myDisk.get_last_partition_num()
Out[4]:1
In [5]:partition = myDisk.get_partition(1)
In [6]:partition.type_name
Out[6]:'primary'
In [7]:geometria = partition.geom
In [8]:geom2 = geometria.duplicate()
In [9]:print geometria.start, geometria.end
19 63359
In [10]:myDisk.delete_all()
In [11]:print myDisk.get_partition(1).geom.start
---------------------------------------------------------------------------
parted.error Traceback (most recent call last)
/home/tobias/pyparted-1.7.3/<ipython console>
error: partition not found
In [12]:myPartition=myDisk.partition_new(parted.PARTITION_PRIMARY,None,1,4000)
In [13]:myFs = parted.file_system_type_get('fat32')
In [14]:myPartition.set_system(myFs)
In [14]:entireDisk = parted.PedDevice.get('/dev/sda').constraint_any()
In [15]:myDisk.add_partition(myPartition, entireDisk)
In [16]:myDisk.commit()
Out[16]:1
Enlaces
Ya están por la receta... :P [ show comments ]
blog comments powered by Disqus