Montar disco duro automaticamente al iniciar linux

Iniciado por elrodrix, Abril 03, 2014, 10:20:56 AM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

La idea surgió porque, en mi notebook, tengo toda la música almacenada en una partición para datos (disco D: en NTFS), y cada vez que inicio linux (Debian Wheezy), tengo que montar esa partición para escuchar música. Lo mismo sucede cuando hago una lista de reproducción, necesito montar esa partición.

Entonces se me ocurrió codear un script en python que me permita automatizar el proceso de montar el disco una sola vez y que lo haga cada vez que iniciemos el sistema.

Básicamente, lo que hace el script es crear una carpeta en /media/ con el nombre DATOS, listar las particiones disponibles con el comando fdisk para almacenar el nombre de la unidad en una lista, y luego, junto con su sistema de archivo correspondiente (NTFS, FAT o FAT32) agregarlos a una nueva linea al archivo /etc/fstab/ para que se puedan montar todas las unidades listadas en ese archivo fstab con el comando mount -a

El script se debe correr con permiso sudo, ya que necesito listar las particiones y montarlas con privilegio.

Instrucciones: Se debe listar si o si las particiones (con la opcion 1) para luego setear los valores de unidad y sistema de archivos (opcion 2) de la particion que queremos montar.

Por el momento el script me permite montar solo una particion. Si se copan, pueden agregar un menu mas para montar varias particiones.

Les dejo el código para que lo vean y analicen y todo eso.

Código: python

#!/usr/bin/python

from pexpect import run
from re import split
import os

class Crear:

divline = "*"*80

def listar(self):
self.valor = []
part = "/dev/sda"
stdout = split("\n", run("fdisk -l"))
print self.divline
print "Listado de Tabla de Particiones"
print self.divline
#print self.divline
for e in stdout:
for x in range(1,10):
if part + str(x) in e:
#agrego cadena a la lista
self.valor.append(part + str(x))
#guardo la longitud de la lista
total = len(self.valor)
print "Opcion " + str(total) + ": " + e

def menu(self):
while (1):
 print("""

****************************************
* Montar particion al iniciar SO       *
* por Rodrigo Avila - @el_rodrix       *
* [email protected]               *
****************************************

Menu
------
1 - Listar tabla de particiones
2 - Montar particion en /media/DATOS

x - salir

""")
 opc = raw_input("Opcion: ")
 if (opc == "1"):
  self.listar()
 elif (opc == "2"):
  self.montar()
 elif (opc.lower() == "x"):
  print "Bye !"
  exit()
 else:
  print "Opcion no valida"

 print self.divline
 pausa = raw_input("presiona ENTER para continuar")

def set_particion(self):
self.opcion1 = raw_input("Ingrese particion a montar: ")
try:
self.sda = int(self.opcion1) - 1
print self.divline
print "Particion a montar: " + self.valor[self.sda]
print self.divline
except:
print "Opcion no valida"
exit(0)

def set_sist_archivo(self):
self.sist_archivo = ['ntfs', 'fat', 'fat32']
texto = "Opcion: "
codigo = 0
print self.divline
print "Sistema de archivo - Elegir una Opcion"
print self.divline
for x in self.sist_archivo:
texto += '(%d)%s ' % (codigo, x)
codigo = codigo + 1
texto += ": "
self.opcion2 = raw_input(texto)
try:
print self.divline
print "Sistema de archivo: " + self.sist_archivo[int(self.opcion2)]
print self.divline
except:
print "Opcion no valida"
exit(0)

def verificar_dir(self):
try:
os.stat("/media/DATOS")
except:
pass
else:
print "Ya existe particion montada"
exit(0)

def crear_dir(self):
try:
fichero = split("\n", run("mkdir /media/DATOS"))
print self.divline
print "Carpeta /media/DATOS creada correctamente"
print self.divline
pass
except:
print "Error al crear directorio"
exit(0)

def set_path(self):
self.verificar_dir()
self.crear_dir()
self.path = '%s /media/DATOS %s auto,rw,exec,users,dmask=000,fmask=111,nls=utf8 0 0' % (self.valor[self.sda], self.sist_archivo[int(self.opcion2)])
print self.path

def agregar_path(self):
try:
with open('/etc/fstab', 'r+') as fstab:
fstab.read()
fstab.write(self.path)
print self.divline
print "Se agrego path correctamente"
print self.divline
except:
print "Error al escribir archivo fstab"
exit(0)

def set_montar(self):
try:
fichero2 = split("\n", run("mount -a"))
print self.divline
print "Particion montada correctamente"
print self.divline
except:
print "Error al montar particion"
exit(0)

def montar(self):
self.set_particion()
self.set_sist_archivo()
self.set_path()
self.agregar_path()
self.set_montar()

#metodo constructor
def __init__(self):
self.menu()

#instanciar clase
crear = Crear()


Saludos !

P.D.: el menu lo hurte de un script que subieron a Underc0de  ;D

Que bien bro!
Gran aporte compañero! Gracias por el post!


Primero felicitaciones por el desarrollo y el aporte vale mucho la pena aun mas porque aprende uno haciendo scripts que a veces son tontos para algunos porque ya existe la rueda inventada.

Por si no conocias existen utilidades que te permites hacer eso.

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Como tambien a lo artesanal con fstab solo para dar un ejemplo, pero excelente lo que desarrollaste.

Regards,
Snifer
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta


Llaman traidor a la persona que evito que caiga el foro, gente bruta!