martes, 26 de junio de 2012

Recuperar un sistema usándolo desde una sesión viva (parte 2)

Hace poco tiempo me pasó que un amigo que cambiando las particiones se cargó la partición donde estaba alojado el cargador de arranque GRUB. Luego de eso no pudo arrancar su pc. He aquí la solución.

Recuperar GRUB desde LiveCD (sesión viva)

Vamos a utilizar un LiveCD para recuperarlo. En este caso uso Ubuntu por ser la que más novatos usan, pero los comandos para montar la partición del disco rígido deben ser las mismas. Tengan en cuenta que es más seguro hacerlo desde la sesión viva del mismo sistema operativo que tienen instalado, i.e: si tienen instalado Ubuntu, usen un LiveCD de Ubuntu. Es posible hacerlo combinando distribuciones, pero no lo probé, así que no puedo estar seguro.

Iniciar la sesión viva

Empezamos por tomar un LiveCD de Ubuntu, el mismo que utilizaste para instalar el sistema operativo. Puede ser en CD/DVD o en un pendrive USB. Hay que tener cuidado de que estemos arrancando el USB/CD y no el disco local. Cuando aparezca el diálogo de ubiquity, vamos a seleccionar "Español" y "Probar Ubuntu".
 Es recomendable hacer un backup de datos en este punto.

Identificar la partición de nuestro sistema

Ahora lo problemático: identificar en qué partición está el directorio /boot. Para eso abrimos la terminal click sobre "Inicio" y empezar a escribir "terminal" (puede que aparezca con las primeras letras)
El dispositivo en donde se encuentra la partición /boot depende de como se haya instalado el sistema. En éste caso se instaló sobre un disco que tenía Windows XP utilizando la opción "Instalar Ubuntu junto a Windows XP". Entonces, tenemos que identificar esa partición. Vamos a utilizar fdisk -l como usuario root para identificar las particiones del disco local.
$ sudo fdisk -l
Estas son las particiones de mi disco. La partición con "Sistema" Linux es donde se instaló Ubuntu. Si eligieron alguna forma de particionado donde /boot esté en una partición separada del resto del sistema tendrán que montarla más adelante junto con la partición del sistema. Como ven, la partición donde está el directorio /boot es /dev/sda5.

Montar la partición del sistema

Identificada la partición del sistema vamos a montarla en el directorio /mnt del árbol de directorios de nuestra sesión viva para que sea accesible. Para montar particiones se usa el comando mount como root:
$ sudo mount [opciones] <partición> <directorio>
En nuestro caso la partición es /dev/sda5 y el directorio /mnt, no necesitamos ninguna opción para montar ésta partición. Ejecutamos el comando (recordar cambiar el nombre de la partición adecuada!)
$ sudo mount /dev/sda5 /mnt
Sólo si tenemos el directorio /boot en una partición diferente la montamos en /mnt/boot utilizando el mismo comando, por ejemplo:
$ sudo mount /dev/sdaX /mnt/boot

Montar los sistemas de directorios virtuales (virtual filesystems)

Es necesario para poder utilizar el sistema desde el disco local. Si alguna parte escapa a tu conocimiento, simplemente tomalo como "magia". La razón simple es que hace falta "mentirle" al sistema para poder utilizarlo desde el disco local, haciendole creer que la partición "root" (/) está en el directorio /mnt. Pero para lograrlo es necesario poder acceder al sistema que está corriendo realmente en nuestra sesión viva.
Entonces, montamos los sistemas virtuales /dev (información sobre dispositivos en el sistema), /proc (información de los procesos en ejecución del sistema) y /sys (información sobre el sistema y controladores). Nuevamente usamos el comando mount pero esta vez con la opción --bind:
$ sudo mount --bind /dev /mnt/dev
$ sudo mount --bind /proc /mnt/proc
$ sudo mount --bind /sys /mnt/sys 

Asegurar que ejecutamos comandos de la sesión viva

Para no llevarnos sorpresas con cambios de versiones entre la sesión viva y el sistema local.
Hay que tomar nota que estamos usando la opción --bind para no sobrescribir los archivos en el disco local!
$ sudo mount --bind /usr /mount/usr

Cambiar de directorio raíz (root)

Ahora viene la parte divertida (o no), cambiar el directorio root del sistema a nuestro disco local. Para esto usamos el comando chroot:
$ sudo chroot /mnt
A partir de este momento el directorio / (root) está en el disco local, ejecutamos comandos de la sesión viva y tenemos toda la información de procesos, dispositivos y controladores de la sesión viva, sorprendente, no?
También hay que notar que estamos registrados como usuario root. No es necesario anteponer sudo a cada comando que necesite privilegios.

Generando un archivo de configuración para GRUB

En Ubuntu, la creación del archivo de configuración de GRUB está a cargo de un comando (update-grub), en otras distribuciones tienen nombres diferentes, incluso algunas (como ArchLinux) no tienen ningún comando específico sino que usan las utilidades proporcionadas por GRUB (grub-mkconfig). es recomendable leer los manuales de cada una. En Ubuntu ejecutamos
# update-grub 

Reinstalar GRUB en el disco

El comando grub-install instala el cargador de arranque en el MBR (Registro de Arranque Principal) del disco local. Es importante notar que es necesario especificar el disco en el que queremos instalar el cargador de arranque, no la partición. Esto es, si la partición donde está instalado nuestro sistema es /dev/sda5, entonces el disco es /dev/sda (sin el número de partición)
# grub-install /dev/sda

Verificar la instalación

Usando el mismo comando podemos checkear que todo esté bien, para no tener que volver a rehacer todo. Siempre es bueno gastar unos segundos para luego no tener problemas que cuesten horas.
# grub-install --recheck /dev/sda

Salir de chroot

Si todo salió bien salimos de chroot. Para eso presionamos CTRL+D o alternativamente escribimos:
# exit

Desmontar los sistemas de archivos

Ahora desmontamos todos los sistemas de archivos que montamos para "engañar" a nuestra sesión viva
$ sudo umount /mnt/dev
$ sudo umount /mnt/proc
$ sudo umount /mnt/sys
$ sudo umount /mnt/usr
Si habíamos instalado una partición que contiene el directorio /boot aparte lo desmontamos también
$ sudo umount /mnt/boot
Y por último desmontamos el disco local
$ sudo umount /mnt
Noten que si falta desmontar alguna partición, no se puede desmontar el directorio /mnt, resultando en un error como me lo indicó la terminal (me olvidé de desmontar /mnt/usr). También nos da una ayuda para saber qué proceso o qué usuario está usando la partición.

Listo! a reiniciar la PC

Para reiniciar, se pude hacer desde el entorno gráfico pero ya que estamos en la terminal, escribimos
$ sudo reboot
Hay que asegurarse de que ésta vez la PC inicie desde el disco local.

Espero haberles sido útil.

martes, 12 de junio de 2012

Recuperar un sistema usándolo desde una sesión viva (parte 1)

A más de uno le ha pasado que por alguna cuestión el sistema directamente "no arranca". En los próximos posts iré agregando información sobre como reparar sistemas desde la sesión viva de nuestra distribución. Pero primero lo primero: BACKUP DE DATOS!

Backup desde sesión viva (Live CD/USB)

Antes de preguntarnos "¿Como repararlo?" hay que prepararse para lo peor. Como la ley de Murphy dice: "Si te olvidaste de hacer un backup, seguro se te va a morir el disco". Así que para conjurar la suerte, vamos a conseguir un muy bonito disco externo USB con suficiente lugar para almacenar todos nuestros datos preciados y copiarlos fuera de nuestro disco rígido. Voy a mostrarlo con Ubuntu por ser la más común entre usuarios nóveles, pero los pasos generales son los mismos.

Arrancando la sesión viva

Este paso es el que difiere de máquina en máquina. Lo que necesitamos es un LiveCD o una memoria USB con la imagen grabada de nuestra distribución favorita. Insertar el LiveCD/USB al momento de arrancar la PC y bootear desde el CD/USB.
Este paso depende de cada computadora en particular, a veces se presiona una tecla (por ejemplo F12) para acceder a un menú, a veces es necesario tocar la configuración de prioridad de arranque del BIOS (cuidado al tocar el BIOS, por lo menos recordar qué se tocó). De todas maneras si ya instalaste tu distribución, seguramente pudiste hacerlo al menos una vez ;).
Cuando aparece el siguiente diálogo, seleccionamos el idioma y luego "Probar Ubuntu".

Acceder a nuestros archivos en el disco rígido local

Ahora que entramos en nuestra sesión viva, insertamos el disco externo y arrancamos el administrador de archivos (nautilus en Ubuntu).
En el menú aparecerán las particiones de nuestro disco local. Tenemos que montar la que contenga la carpeta /home donde están nuestros archivos. Para montar el disco simplemente hacer click sobre él en el menú de la izquierda, aparecerá un símbolo de "eject" al costado del ícono, mostrándonos que está montado.
Ahora podremos acceder a nuestra información, incluyendo los archivos de configuración de los programas que tenemos instalados en nuestro sistema local. Para eso navegamos hasta /home/${nombre-de-usuario}/.

Respaldar archivos

Ahora habrá que montar el disco externo. Se lo conecta al USB y aparecerá en la barra lateral del administrador de archivos. Para montarlo, simplemente hacer click sobre el, igual que con el disco rígido local.
Para respaldar los archivos, copiarlos directamente al disco externo.

Opcional: respaldar configuraciones de programas

¿Te pasate horas configurando programas que usás regularmente? Es posible respaldar también esas configuraciones. Muchos programas de escritorio almacenan información específica del usuario en carpetas ocultas dentro de la carpeta Home de cada usuario. De manera que si se respaldan esas carpetas, cuando instalemos el programa de cero en una instalación nueva, tendremos nuestra configuración que tanto nos gusta.
Para mostrar las carpetas ocultas dentro de /home se presiona CTRL+H
Ahora copiamos esas carpetas ocultas a nuestro disco externo y listo, nuestras configuraciones están seguras.

¿Qué sigue?

En el próximo post voy a mostrar como montar el sistema local desde la sesión viva. Es una forma muy útil de recuperar el tiempo que puede llevar el reinstalar todo de cero.

Saludos!

jueves, 7 de junio de 2012

El molesto "beep" a todo volumen tiene solución

No les ha pasado últimamente que en distribuciones relativamente nuevas (con kerneles relativamente nuevos) cada vez que se apaga la PC se escucha un "beep" del speaker a todo volumen?
Es muy molesto. Y no sólo pasa cuando se apaga la PC, también pasa cuando estamos en una de nuestras terminales TTY y por alguna razón se da un error o damos sobre TAB para que nos autocomplete o nos de alguna sugerencia. Es sumamente molesto.
Pero gracias a mi amigo Javier, con el mismo problema, encontré la solución. Mejor dicho, él encontró la solución, me la pasó y ahora yo a ustedes. Creo que arrancó en kerneles en versiones mayores a la 3.3. Resulta que el "speaker" de la PC ahora está comandada por los módulos de cada placa de sonido, en mi caso es una Intel y su módulo es el snd_hda_intel. Entonces ya no alcanza con poner en lista negra el módulo pcspkr, sino que hay que agregar una opción más a un archivo de configuración de modprobe.

Poniendo pcspkr en lista negra

 Antes era necesario simplemente poner en lista negra el módulo pcspkr. Para hacerlo, abrir una terminal y como super-usuario (root) ejecutar:
# echo "blacklist pcspkr" >> /etc/modprobe.d/blacklist.conf
Luego de esto reiniciar la PC. Debería haberse ido ese molesto pitido del sistema.

Si el anterior falla

Como parte del control del pitido se hace por medio del módulo de la placa de sonido (en mi caso una Intel). Parece ser que el módulo snd_hda_intel tiene un control de pitido (beep_mode) que está habilitado por defecto. Para deshabilitarlo (como root):
# gedit /etc/modprobe.d/beep-off.conf
Y agregar la siguiente línea:
options snd_hda_intel beep_mode=0
Guardar el archivo y cerrar gedit. Después de un reinicio debería haberse ido ese (mencioné molesto?) pitido.
La solución la encontré aquí.
Espero que les haya sido útil.

miércoles, 6 de junio de 2012

Arrancamos el blog con arte de uso libre y útil.

Empecemos por las presentaciones siguiendo a convención social. Me llamo Joaquín. No dice demasiado un nombre, es simplemente la palabra que pretende designar un grupo de características que definen la identidad de una persona. Para hacerlo más interesante, pasemos a lo que nos congrega en éste recinto: ayuda para novatos y no tanto en sistemas operativos libres.
Me decidí hace poco a empezar a publicar las respuestas que fui dando a muchísimos amigos y conocidos sobre la configuración y resolución de problemas en sus computadoras con sistemas libres. También impulsando el uso de Software Libre siempre que puedo, si algo se puede hacer con una computadora, que sea con libertad. Me han aparecido cosas de lo más simple a lo más complejo. Pero siempre se le encuentra la vuelta, y si no, se le inventa la vuelta ;)

Voy a empezar por publicar un trabajo propio derivado del trabajo de otros. Un buen ejemplo de lo que se puede hacer en comunidad, cooperando en lugar de competir.
Hace un tiempo me descubrí imprimiendo un "cheat-cube". Una especie de dado que contiene comandos usuales para la terminal. Lo vi para la distribución Ubuntu primero y me decidí a encontrarlo (traducido) para ArchLinux (la distribución que uso). Finalmente lo encontré en un blog en español. Lo armé y quedó así
Y está licenciado bajo una licencia Creative Commons y luego me pregunté:
"Qué desperdicio de espacio ¿Y si lo convierto en una caja?"
Y así fue:


Los planos se pueden bajar de aquí. Incluí el cubo original de pico.dev así están los dos para completarlo.

Saludos!