Mantenimiento de tu Mac: aprendizaje, automatización y diversión, parte II

14/01/2013 por Carlos Burges

En el artículo anterior nos quedamos en el reinicio a un disco duro externo usando una alarma de Automator. Una vez realizada esta tarea nos vamos a dedicar a realizar diferentes test de integridad de los discos duros instalados, a repararlos y a reparar los permisos de forma automatizada para de nuevo, volver a reiniciar a a nuestro disco duro de trabajo. Adicionalmente, recibiremos en nuestro correo electrónico sendos informes sobre el proceso realizado.

Realización de las tareas automatizadas de mantenimiento desde el disco duro externo

Para la creación de las tareas automatizadas de mantenimiento el el disco duro externo reiniciaremos desde ese disco.

Asumiendo que nuestro disco duro externo arranca con un usuario por defecto y este es administrador,abriremos el editor de Scripts de Applescript, y añadiremos este script que ejecuta varios comandos de Terminal. El script está profusamente comentado además de comentarios adicionales añadidos después del mismo:

--Iniciamos un cuadro de diálogo que nos permite parar el proceso de mantenimiento. El plazo definido para parar el proceso es de 5 segundos (giving up after 5)
set question to display dialog "El proceso de mantenimiento se iniciará en 5 segundos." buttons {"Parar"} default button 1 giving up after 5
set answer to button returned of question
--ejecutamos un error -128 (cancelar por parte del usuario) si pulsamos el botón "Parar"
if answer is equal to "Parar" then
error number -128
end if
--Si no hemos pulsado el botón parar, automáticamente se empezarán a ejecutar los siguientes comandos

--Reparación de disco duro y creación de un archivo de log en la carpeta Documents
do shell script "Diskutil repairVolume /Volumes/Disco_duro > ~/Documents/RepairDisk_Mi_disco.log"
--Enviamos por correo electrónico el archivo de logs a la cuenta predeterminada en el comando
do shell script "uuencode ~/Documents/RepairDisk_Mi_disco.log RepairDisk_Mi_disco.log | mail -s “Logs-Repair-for-Mi_Disco_Duro” micorreo@electronico.com"
--eliminamos el archivo de log una vez enviado
do shell script "rm ~/Documents/RepairDisk_Mi_disco.log"

--reiniciamos el cuadro de diálogo por si querremos parar el proceso. Si no queremos pararlo, continuará en 5 segundos (giving up after 5)
set question to display dialog "¿Desea Proseguir con el proceso de Mantenimiento?" buttons {"Parar"} default button 1 giving up after 5
set answer to button returned of question

if answer is equal to "Parar" then
error number -128
end if

--Ejecutamos la verificación de permisos y su reparación. Debe ser un disco duro que contenga OS X. Generamos también un archivo de Log
do shell script "diskutil repairPermissions /Volumes/Disco_duro > ~/Documents/RepairPermisions.log"
--Enviamos por correo electrónico el archivo de logs a la cuenta predeterminada en el comando
do shell script "uuencode ~/Documents/RepairPermisions.log RepairPermisions.log | mail -s “Logs-Repair-Permissions-for-Disco_duro” micorreo@electronico.com"
--eliminamos el archivo de log una vez enviado
do shell script "rm ~/Documents/RepairPermisions.log"

--Seleccionamos un nuevo disco de arranque
do shell script "bless -mount '/Volumes/nuevo disco de arranque' -setBoot" password "tu_contraseña_de_administrador" with administrator privileges

--reiniciamos el ordenador
do shell script "shutdown -r now" password "tu_contraseña_de_administrador" with administrator privileges

end

En este script hay bastante información que tenemos que modificar para adaptarla a nuestro sistema:

Disco_duro: será el disco que elijamos para reparación, verificación del mismo y sus permisos. Recuerda, que tal como comentamos en el primer artículo, tienes que añadir comillas simples a la ruta del disco si su nombre tiene espacios en blanco por una razón muy sencilla: mientras que en un comando de Terminal solo requeriríamos definir los espacios en blanco con "\ " para el nombre del disco duro (Macintosh HD) para ejecutar un do shell script con Applescript es necesario entrecomillar la ruta para evitar la interpretación de este espacio en blanco u otros símbolos especiales.

RepairDisk_Mi_disco.log: será el archivo de log que se genere. Puedes modificar el nombre si quieres para incluir el nombre del disco que se va a verificar. Recuerda que luego tendrás que cambiar ese nombre también en el comando para enviar por correo electrónico el archivo o no funcionará y también en la ruta de eliminación del archivo.

Logs-Repair-for-Mi_Disco_Duro: es el asunto del correo electrónico que se enviará. Puedes modificarlo para que refleje información más exacta de lo que estás enviando. No incluyas espacios en blanco o omitirá la información después de esos espacios.

micorreo@electronico.com: evidentemente, la dirección de correo electrónico a la que enviaremos el correo con el archivo de log con la información del resultado.

Si no quieres que se te envíen correos electrónicos con los logs de las tareas realizadas, simplemente puedes comentar las líneas:

do shell script "uuencode ~/Documents/RepairDisk_Mi_disco.log RepairDisk_Mi_disco.log | mail -s “Logs-Repair-for-Mi_Disco_Duro” micorreo@electronico.com"

do shell script "rm ~/Documents/RepairDisk_Mi_disco.log"

con dos -- delante.

Con este Applescript repasaríamos "Un solo disco duro". Evidentemente, si quisiéramos repasar más discos habría ciertos cambios en el Applescript de forma que se leyeran todos los discos duros posibles montados para reparar cada uno de ellos. Recuerda que la verificación y reparación de permisos solo puede realizarse contra discos duros que tienen instalado OS X, así que después tendrás que copiar y pegar las correspondientes líneas del anterior script para esta tarea además de las líneas para el cambio de disco duro de arranque y reinicio y parametrizarlas para cada disco duro que quieras reparar permisos (en el caso de que tengas varios OS X instalados además del que utilizas para arranque de emergencia en el disco duro externo).

--Iniciamos un cuadro de diálogo que nos permite parar el proceso de mantenimiento. El plazo definido para parar el proceso es de 5 segundos (giving up after 5)
set question to display dialog "El proceso de mantenimiento se iniciará en 5 segundos." buttons {"Parar"} default button 1 giving up after 5
set answer to button returned of question
--ejecutamos un error -128 (cancelar por parte del usuario) si pulsamos el botón "Parar"
if answer is equal to "Parar" then
error number -128
end if
--Si no hemos pulsado el botón parar, automáticamente se empezarán a ejecutar los siguientes comandos

--solicitamos todos los discos duros y ejecutamos una reparación sobre cada uno de ellos
do shell script "for volume in $(ls /Volumes | sort)
do
echo 'Volume: $volume'
diskutil repairVolume $volume
echo ''
done > ~/Documents/RepairDisk_todos_los_discos.log"
--enviamos el correo con el informe de reparación
do shell script "uuencode ~/Documents/RepairDisk_todos_los_discos.log RepairDisk_todos_los_discos.log | mail -s “Logs-Repair-for-all-todos_los_discos” micorreo@electronico.com"
--borramos el archivo de log
do shell script "rm ~/Documents/RepairDisk_todos_los_discos.log"
end

Tanto uno como el otro Applescript, una vez probados, debes guardarlos como aplicaciones para añadirlos a los ítems de inicio de tu usuario en el Panel de Usuarios y grupos en Preferencias del Sistema. Se ejecutarán cuando se reinicie el sistema y podrás pararlos gracias al cuadro de diálogo que hemos creado para este efecto.

Este segundo Applescript tiene una ventaja adicional para aquellos usuarios que dan soporte remoto: puedes convertirlo en una aplicación de verificación remota para aquellos usuarios "que no tienen ni idea" y para los que explicarles el proceso de verificación del disco supone utilizar una aplicación, Utilidad de Discos, que no conocen. Simplemente hay que sustituir la línea:

diskutil repairVolume $volume

por

diskutil verifyVolume $volume

Guardar el Applescript como una aplicación, enviarla por coreo electrónico y que la ejecuten para que puedas recibir un informe del estado de sus discos duros y tomar las acciones oportunas.

Algunos detalles para el final

Mientras preparaba el tutorial, Postfix (que es quien se enverga de enviar el correo) me estaba dando algunos problemas indicándome que no podía enviar un correo con el siguiente texto:

postfix/postdrop[1668] warning: mail_queue_enter: create file maildrop/832987.1668: Permission denied

Para solucionar el problema he ejecutado los siguientes comandos de Terminal:

sudo /usr/sbin/postfix check

para después:

sudo chown root /private/var/spool/postfix

sudo chgrp _postdrop /private/var/spool/postfix/maildrop

y

sudo /usr/sbin/postfix set-permissions

Espero que hayáis disfrutado con el tutorial: es un poco denso, pero seguramente vais a poder aprender un montón de cosas que aprovechar para otras tareas como el cuadro de diálogo especial de Applescript, el reinicio automatizado a otra unidad de disco o la verificación de permisos y discos duros.

0
Comentarios
  • #1 por Oriol el 14/01/2013
    ¿no existe alguna aplicación que realice estas tareas? Al vuelo pienso en Cocktail.
  • #2 por Carlos Burges el 14/01/2013
    Si, si que la hay. Como decía en la primera parte, esto va de aprender, más que de usar aplicaciones a ojos cerrados.

    Un saludo.