martes, 11 de noviembre de 2008

[HowTo] Cómo extraer la tabla de particiones de un disco duro y restaurarla.

En ocasiones nos es necesario extraer la tabla de particiones de un disco duro, para crearla en otro de idénticas características. Supongamos que tenemos un disco duro de 320 Gb repartidos de la siguiente forma:
  • Una partición con 20 Gb con windows.
  • Una segunda partición de 20 Gb con la raíz de un linux.
  • Una de 279 Gb con los home del linux.
  • Una de 1 Gb de swaping.
Suponiendo que se trate de un disco SATA pinchado en el primer bus SATA, la tabla de particionado se vería:
  • /dev/sda1 --> Windows
  • /dev/sda2 --> / (Raíz de linux)
  • /dev/sda3 --> /home (linux)
  • /dev/sda4 --> swap (linux)
La tabla de particiones (que contiene la información expuesta) se escribe en los primeros 512 Kb del disco duro, en nuestro caso /dev/sda. Los linux tienen un programa que sirve para convertir y copiar ficheros planos (eso pone en el man) llamada dd (Data Definition). Como en linux todo es un fichero (incluido los discos) le podemos indicar que nos copie en un fichero raw (plano) los primeros 512 kB del disco al sitio que nosotros queramos, obteniendo de esta forma la tabla de particiones del disco. Para hacer esto solo tendríamos que ejecutar el siguiente comando como superusuario o root (lo pongo de forma genérica):

# dd if=fichero_origen of=fichero_destino bs=tamaño_del_bloque_a_copiar count=numero_de_veces

Donde los parámetros que le estamos pasando son:
  • if: Input File o fichero del que quermos extraer la imágen.
  • of: Output File o fichero donde queremos almacenar esa imagen.
  • bs: Block Size o tamaño del bloque a copiar. No le ponemos unidades por que por defecto son kB, pero también admintiría por ejemplo megabytes
  • count: número de veces que queremos copiar consecutivamente el tamaño de bs, es decir si le ponemos bs=512 count=2 el fichero que nos genere será de 1024 kB (512 kB x 2)o lo que es lo mismo 1 MB.
Ahora que sabemos lo que significa cada cosa, vamos a ejemplificarlo con nuestro caso concreto:

# dd if=/dev/sda of=/tmp/particiones.mbr bs=512 count=1

Este comando nos creará un fichero llamado particiones.mbr en el directorio /tmp. Puesto que lo queremos mover para usarlo en otro disco (o en el mismo) deberíamos copiarlo a un soporte extraíble lo mejor es hacerlo a un pendrive porque después lo más probable es que se tenga que usar una liveCD y no tengamos el CDROM disponible.

Para restaurar la tabla de particiones, hay que seguir el proceso contrario, pero a diferencia del primero, el disco duro NO puede estar montado, por lo que si sólo tenemos un disco duro y lo queremos hacer en él, no tendremos más remedio que arrancar una liveCD de cualquier distro que la tenga.

Vamos a dar por supuesto que lo queremos hacer sobre una máquina con dos discos y ya tenemos arrancado el sistema live. A diferencia del caso anterior, esta máquina tiene como /dev/sda un disco de datos, y como /dev/sdb el disco idéntico al nuestro donde queremos restaurar la tabla de particiones. En este caso cambiará un poco el comando, pero la la norma general será la misma, y se restaurarán las particiones de la siguiente forma:

En primer lugar montamos el pendrive donde tenemos el fichero particiones.mbr en /media/disk, suponiendo que el pendrive es el dispositivo /dev/sdc y que sólo tiene una partición hecha:

# mount /dev/sdc1 /media/disk

Lo más probable es que el sistema live monte automáticamente el pendrive y nos ahorremos este paso.

A continuación restauraremos la tabla de particiones en nuestro disco:

# dd if=/media/disk/particiones.mbr of=/dev/sdb

A diferencia de la vez anterior hemos omitido los parámtros bs y count puesto que el fichero pesa 512 kB y lo copiará al inicio de sdb una sóla vez por defecto, pero si se ponen no hay ningún problema.

Hay que tener en cuenta que si ahora hacemos un listado de dispositivos sata, es probable que no nos aparezcan las particiones recién creadas puesto que cuando se arrancó el sistema no existían, pero podremos comprobar si se han creado correctamente ejecutando cfdisk y vemos las particiones recien creadas:

# cfdisk /dev/sdb

Si no aparecen con este programa es que hemos tenido algún error al extraer o copiar el fichero particiones.mbr.

sábado, 2 de agosto de 2008

Quiero empezar a usar un Sistema Operativo GNU/Linux ¿Qué tengo que saber? (Parte I)

Este artículo y los siguientes estarán dirigidos a usuarios que quieran empezar a usar un sistema GNU/Linux y quieran saber las cosas básicas de estos sistemas, está basado en mi experiencia personal, así que si alguien está en desacuerdo o quiere aportar algo más es libre de hacerlo.

Si acabas de comenzar a usar una distribución GNU/Linux es muy probable que hayas escogido Ubuntu, esto tiene sentido porque es una de las distribuciones de linux más usadas en entornos domésticos y probablemente haya uno o dos amigos o familiares que te la hayan recomendado. Personalmente me parece una buena distribución para empezar porque está ampliamente documentada en internet, si ponemos “ubuntu” en el buscador google, nos aparecerán 89.400.000 páginas que contienen esa palabra, y si marcamos “páginas en español” 3.590.000.

Pero ya hemos hablado de conceptos que no se tienen por qué saber a priori por lo que dejo unos cuantos enlaces a wikipedia, para que se sepa qué es cada cosa (Nota para perezosos: no hace falta leerlos enteros, con las primeras líneas para hacernos una idea es suficiente): Sistema Operativo, kernel o núcleo, GNU, Linux (ver también el apartado de etimología), distribuciones GNU/Linux, Ubuntu. Si te quedas con ganas de más visita las páginas oficiales de cada cosa.

La mayoría de las personas empiezan a usar linux tras muchos años usando el SO de las ventanitas, que todos conocemos, lo que nos produce un esquema mental de cómo funciona ese sistema en concreto, que nada tiene que ver con un sisitema basado en Unix. Para empezar, en linux, no existen las unidades lógicas, porque como se suele decir todo es un fichero. ¿Cómo que todo es un fichero? Tal y como suena, en linux no tenemos una unidad C: para el disco duro, otra D: para el lector de DVD, ni A: para la disquetera. Sonará raro, pero vamos a ver una descripción rápida de cómo está estructurado el sistema, porque bajo mi punto de vista, una de las cosas más importantes a la hora de moverse por un SO es saber las rutas o path donde se encuentran las distintas cosas:

Raiz, root o /: No se me ha colado un símbolo de dividir, en linux, todo, absolutamente todo cuelga de raiz: aplicaciones, usuarios, grupos, discos duros, CD, pen, etc. Por eso cuando desglose los directorios más importantes todos empezarán por /, por ejemplo /home, /dev o /etc.

/bin:Contiene todos los comandos que puede ejecutar un usuario sin permisos de superusuario (podría haber dicho permisos de administrador, pero hay que ir haciendose a la jerga) se explicará en un próximo artículo.

/dev: aquí encontramos todos los ficheros relacionados con los dispositivos hardware o devices, por ejemplo, los discos duros serán los ficheros hda o sda (dependiendo del bus SATA o IDE), hdb para el segundo, etc. Tambiéne están las disqueteras fd, lector de CD cdrom, etc.

/etc: en este directorio se encuentran los ficheros de configuración genéricos de las aplicaciones del sistema y servicios (también llamados demonios).

/home: En este se ubican todos los directorios personales de los usuarios del sistema por defecto. Cuando creamos un usuario, su directorio personal será /home/nombre_usuario (aunque podemos especificar otro) y contendrá todo lo relativo a la configuración personal de las aplicaciones (amule, mozilla firefox, amsn), apariencia del sistema (que es otra aplicación, fondos, ventanas, etc), y todo lo que el usuario quiera. El es el propietario de ese directorio y puede crear, borrar y modificar archivos y carpetas. El path por defecto cuando guardemos algo desde el entorno gráfico como por ejemplo un documento de open office, será este.

/media: Es en el directorio por defecto donde se montan dispositivos de almacenamiento (pen, cdrom, discos extraibles, etc) en Ubuntu. Si insertamos un cdrom podremos acceder a él si vamos a /media/cdrom.

/root: Es el directorio personal del usuario root. Se explicará en el siguiente artículo.

/sbin: Contiene todos los comandos que puede ejecutar el usuario root y los usuarios con permisos de superusuario.

/tmp: aquí se ubican los archivos temporales del sistema. Este se borra cuando reiniciamos el ordenador.

/var: Contiene ficheros útiles para la administración de sistemas, por ejemplo logs o registros del sistema y aplicaciones (/var/log). Por ejemplo si abrimos el fichero /var/log/syslog tendremos gran parte de la secuencia de arranque y podemos ver si ha fallado algo.

Con este primer artículo se pretende dar una visión genérica de un sistema GNU/Linux basado en Debian, en el siguiente artículo veremos usuarios, grupos y ficheros, y formas de crearlos, borrarlos y manipularlos mediante entorno gráfico y consola.

Un Saludo.

¿Por qué existe este blog?

Hace algún tiempo comencé a estudiar informática, esto era algo que tenía que suceder tarde o temprano debido a las innumerables horas que he invertido delante del ordenador. Simultáneamente, empecé a interesarme por ese "oscuro" mundillo llamado software libre integrado por un montón de hackers amantes de la programación que se negaban a usar sistemas operativos y software de naturaleza privada. Siempre me ha sorprendido como proyectos formados por millones de desarrolladores por todo el mundo funcionan tan bien, con lo difícil que resulta en ocasiones llevar proyectos compuestos por siete personas a buen puerto.

Ahora, por fin he conseguido relacionarme profesionalmente con el mundo del GNU y el open-source y este blog surge precisamente como respuesta a eso. Una gran parte de las personas que usan software libre, no participan con este porque piensan que no tienen el conocimiento técnico necesario para hacerlo. Bajo mi punto de vista, pienso que es un concepto erróneo, puesto que para participar en este mundillo no hace falta ser informático profesional ni usuario avanzado puesto que la verdadera naturaleza, y en lo que reside la fuerza de este movimiento es en la libertad y flujo de conocimientos, o lo que es lo mismo, "liberar" los conocimientos que uno tenga sobre cualquier cosa. Así pues si eres filólogo, enseña a la gente una lengua; si eres cocinero, enseña a la gente a cocinar, y si eres informático, enseña a la gente a manejar sus ordenadores. Aunque dicho así suene utópico, el conocimiento científico siempre ha seguido estas directrices, puesto que yo a día de hoy, no conozco a nadie que haya pagado derechos de autor por aplicar las leyes de Newton.

Dicho todo esto, este blog es un homenaje a todas las personas que hacen posible que tenga un sistema GNU corriendo en mi ordenador, y tenga acceso a todo lo que quiera saber sobre el funcionamiento de éste. O dicho de otra manera, este blog es mi contribución, mi pequeño grano de arena a este mundo que tanto me gusta.

Por último, en cuanto al contenido del blog, no hace falta que mencione a estas alturas que estará dedicado al software libre y más concretamente a sistemas GNU/Linux basados en Debian. Procuraré desglosar al máximo los pequeños tutoriales que vaya subiendo, para que las personas que recurran a ellos, consigan lo que se han propuesto y además entiendan lo que están haciendo. Sé que suena un poco vehemente por mi parte decir esto, pero en caso de no comprender algo, siempre se podrá preguntar y contestaré en la medida en la que sea capaz de hacerlo.

Un saludo.