jueves, 31 de marzo de 2016

Escribiendo una imagen

Para escribir una imagen, usamos de nuevo wodim, especificando el nombre del dispositivo grabador óptico y el nombre del archivo de imagen:

wodim dev=/dev/cdrw image.iso

Además del nombre del dispositivo y el archivo de imagen, wodim soporta una gran variedad de opciones. Dos muy comunes son “-v” para una salida detallada, y “-dao”, que graba el disco en el modo disc-at-once (disco de una vez). Este modo debería usarse si estás preparando un disco para reproducción comercial. El modo por defecto de wodim es track-at-once (pista de una vez), que es útil para grabar pistas de música.

miércoles, 30 de marzo de 2016

Borrando un CD-ROM regrabable

Los CD-RW regrabables necesitan ser borrados antes de ser reutilizados. Para hacerlo, podemos usar wodim, especificando el nombre del dispositivo del grabador de CD y el tipo de borrado a realizar. El programa wodim ofrece varios tipos. El más simple (y rápido) es el modo “rápido”:

wodim dev=/dev/cdrw blank=fast

martes, 29 de marzo de 2016

Montando una imagen ISO directamente

Hay un truco que podemos usar para montar una imagen iso mientras que está todavía en nuestro disco duro y tratarla como si ya estuviera en un medio óptico. Añadiendo la opción “-o loop” a mount (además del requerido tipo de sistema de archivos “-t iso9660”), podemos montar el archivo de imagen como si fuera un dispositivo y conectarlo al árbol del sistema de archivos:

mkdir /mnt/iso_image
mount -t iso9660 -o loop image.iso /mnt/iso_image

En el ejemplo anterior, creamos un punto de montaje llamado /mnt/iso_image y luego montamos el archivo de imagen image.iso en el punto de montaje. Una vez que la imagen está montada, puede ser tratada como si fuera un CD-ROM o DVD real. Recuerda desmontar la imagen cuando ya no la necesites.

lunes, 28 de marzo de 2016

Escribiendo imágenes de CD-ROM

Una vez que tenemos un archivo de imagen, podemos grabarlo en nuestro medio óptico. La mayoría de los comandos que veamos a continuación pueden ser aplicados tanto a CD-ROM como a DVD.

viernes, 25 de marzo de 2016

Un programa con otro nombre…

Si miras tutoriales on-line sobre crear y grabar medios ópticos como CD-ROMs y DVDs, frecuentemente encontrarás dos programas llamados mkisofs y cdrecord. Estos programas eran parte del popular paquete llamado “cdr-tools” creados por Jörg Schilling. En el verano de 2006, Mr. Schilling hizo un cambio de licencia a una parte del paquete cdrtools que, en opinión de muchos en la comunidad Linux, creó una incompatibilidad de licencia con el GNU GPL. Como resultado, surgió un fork del proyecto cdrtools que ahora incluye programas para reemplazar a cdrecord y mkisofs llamados wodim y genisoimage, respectivamente.

jueves, 24 de marzo de 2016

Creando una imagen de una colección de archivos

Para crear una imagen iso con el contenido de un directorio, usamos el programa genisoimage. Para hacerlo, primero creamos un directorio conteniendo todos los archivos que queramos incluir en la imagen y luego ejecutamos el comando genisoimage para crear el archivo imagen. Por ejemplo, si hubiéramos creado un directorio llamado ~/cd-rom-files y lo llenamos con archivos para nuestro CD-ROM, podríamos crear un archivo de imagen llamado cd-rom.iso con el siguiente comando:

genisoimage -o cd-rom.iso -R -J ~/cd-rom-files

La opción “-R” añade metadatos para las extensiones Rock Ridge, que permiten usar nombres de archivo largos y permisos de archivos estilo POSIX. Igualmente, la opción “-J” activa las extensiones Joilet, que permiten nombres de archivo largos para Windows.

miércoles, 23 de marzo de 2016

Creando una copia imagen de un CD-ROM

Si queremos hacer una imagen iso de un CD-ROM existente, podemos usar dd para leer todos los bloques de datos del CD-ROM y copiarlos en un archivo local. Digamos que tenemos un CD de Ubuntu y queremos hacer un archivo iso que podamos usar más tarde para hacer más copias. Después de insertar el CD y determinar su nombre de dispositivo (asumiremos que es /dev/cdrom), podemos hacer el archivo iso así:

dd if=/dev/cdrom of=ubuntu.iso

Esta técnica funciona también para DVDs de datos, pero no funcionará para CDs de audio, ya que no usan un sistema de archivos para almacenamiento. Para CDs de audio, mira el comando cdrdao.

martes, 22 de marzo de 2016

Creando imágenes de CD-ROM

Escribir un CD-ROM grabable (tanto un CD-R como un CD-RW) consta de dos pasos: primero, construir un archivo de imagen iso que es la imagen exacta del sistema de archivos del CD-ROM y segundo, escribir el archivo de imagen en el CD-ROM.

lunes, 21 de marzo de 2016

Moviendo datos directamente a/desde dispositivos

Generalmente pensamos en que los datos en nuestros ordenadores están organizados en archivos, pero también podemos pensar en los datos en su forma “bruta”. Si observamos un disco duro, por ejemplo, vemos que consiste en un gran número de “bloques” de datos que el sistema operativo ve como directorios y archivos. Sin embargo, si pudiéramos tratar una unidad de disco simplemente como una gran colección de bloques de datos, podríamos realizar tareas útiles, como clonar dispositivos.

El programa dd realiza esta tarea. Copia bloques de datos de un lugar a otro. Usa una sintaxis única (por motivos históricos) y generalmente se usa de esta forma:

dd if=input_file of=output_file [bs=block_size [count=blocks]]

Digamos que tenemos dos memorias USB del mismo tamaño y queremos copiar exactamente la primera unidad en la segunda. Si conectamos ambas unidades al ordenador y están asignadas a los dispositivos /dev/sdb y /dev/sdc respectivamente, podríamos copiar todo lo que hay en la primera unidad a la segunda haciendo lo siguiente:

dd if=/dev/sdb of=/dev/sdc

Alternativamente, si sólo estuviera conectado a nuestro ordenador el primer dispositivo, podríamos copiar su contenido en un archivo normal para su posterior restauración o copia:

dd if=/dev/sdb of=flash_drive.img

¡Aviso! El comando dd es muy potente. Aunque su nombre deriva de “data definition” (definición de datos), a veces se le llama “destroy disk” (destruye discos) porque los usuarios a menudo escriben mal las especificaciones if o of. ¡Siempre comprueba dos veces tus especificaciones de entrada y salida antes de pulsar intro!

viernes, 18 de marzo de 2016

Formateando disquetes

Para aquellos de nosotros que todavía usamos ordenadores lo suficientemente antiguos como para que estén equipados con unidades de disquetes, podemos manejar también dichos dispositivos. Preparar un disquete en blanco para usar es un proceso en dos pasos. Primero, realizamos un formateo de bajo nivel en el disquete, y luego creamos un sistema de archivos. Para realizar el formateo, usamos el programa fdformat especificando el nombre del dispositivo del disquete (normalmente /dev/fd0):

[me@linuxbox ~]$ sudo fdformat /dev/fd0
Double-sided, 80 tracks, 18 sec/track. Total capacity 1440 kB.
Formatting ... done
Verifying ... done

A continuación, aplicamos el sistema de archivos FAT al disquete con mkfs:

[me@linuxbox ~]$ sudo mkfs -t msdos /dev/fd0

Fíjate que usamos el sistema de archivos de “msdos” para tener las tablas de asignación de archivos más antiguas (y pequeñas). Cuando el disquete esté preparado, se montará como otros dispositivos.

jueves, 17 de marzo de 2016

What the fsck?

En la cultura Unix, la palabra “fsck” a menudo se usa en lugar de una popular palabra con la que comparte tres letras. Esto es especialmente apropiado, dado que probablemente pronunciarás la mencionada palabra si te encuentras en una situación en la que estás forzado a ejecutar fsck.

miércoles, 16 de marzo de 2016

Probando y reparando sistemas de archivos

En nuestra anterior exposición sobre el archivo /etc/fstab, vimos algunos números misteriosos al final de cada línea. Cada vez que el sistema arranca, chequea rutinariamente la integridad del sistema de archivos antes de montarlo. Esto lo hace el programa fsck (abreviatura de “file system check” - Chequeo del sistema de archivos). El último número de cada línea de fstab especifica el orden en que los dispositivos tienen que ser chequeados. En nuestro ejemplo anterior, vemos que el sistema de archivos raiz es el primero en ser chequeado, seguido de los sistemas de archivos home y boot. Los dispositivos con un cero como último número no son chequeados rutinariamente.

Además del chequeo de la integridad del sistema de archivos, fsck también puede reparar sistemas de archivos corruptos con distintos grados de éxito, dependiendo de la magnitud del daño. En sistemas de archivos tipo Unix, las porciones recuperadas de los archivos se colocan en el directorio lost+found, localizado en la raíz de cada sistema de archivos.

Para chequear nuestra unidad flash (que debe ser desmontada primero), podríamos hacer lo siguiente:

[me@linuxbox ~]$ sudo fsck /dev/sdb1
fsck 1.40.8 (13-Mar-2008)
e2fsck 1.40.8 (13-Mar-2008)
/dev/sdb1: clean, 11/3904 files, 1661/15608 blocks

En mi experiencia, la corrupción del sistema de archivos es muy rara a menos que haya un problema de hardware, como un disco duro que falle. En la mayoría de los sistemas, la corrupción del sistema de archivos detectada en el arranque causará que el sistema se detenga y te indicará que ejecutes fsck antes de continuar.

martes, 15 de marzo de 2016

Creando un nuevo sistema de archivos con mkfs

Con nuestra edición de particiones hecha (más sencillamente de lo que parecía) es hora de crear un nuevo sistema de archivos en nuestra unidad flash. Para hacerlo, usaremos mkfs (abreviatura de “make file system” - “fabricar sistema de archivos”), que puede crear sistemas de archivos en una variedad de formatos. Para crear un sistema de archivos ext3 en el dispositivo usamos la opción “-t” para especificar el tipo de sistema “ext3”, seguido por el nombre del dispositivo incluyendo la partición que queremos formatear:

[me@linuxbox ~]$ sudo mkfs -t ext3 /dev/sdb1
mke2fs 1.40.2 (12-Jul-2007)
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
3904 inodes, 15608 blocks
780 blocks (5.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=15990784
2 block groups
8192 blocks per group, 8192 fragments per group
1952 inodes per group
Superblock backups stored on blocks:
     8193

Writing inode tables: done
Creating journal (1024 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 34 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override.
[me@linuxbox ~]$

El programa mostrará un montón de información cuando elegimos el tipo de sistema de archivos ext3. Para reformatear el dispositivo a su sistema de archivos original FAT32, especifica “vfat” como el tipo de sistema de archivos:

[me@linuxbox ~]$ sudo mkfs -t vfat /dev/sdb1

Este proceso de particionado y formateado puede usarse cada vez que se agreguen dispositivos de almacenamiento adicionales al sistema. Aunque hemos trabajado con una diminuta unidad flash, el mismo proceso puede aplicarse a discos duros internos y a otros dispositivos de almacenamiento extraibles, como los discos duros USB.

lunes, 14 de marzo de 2016

Manipulando particiones con fdisk

El programa fdisk nos permite interactuar directamente con los dispositivos que se comportan como discos (como discos duros o unidades flash) a muy bajo nivel. Con esta herramienta podemos editar, eliminar y crear particiones en el dispositivo. Para trabajar con nuestra unidad flash, tenemos primero que desmontarla (si es necesario) y luego invocar el programa fdisk como sigue:

[me@linuxbox ~]$ sudo umount /dev/sdb1
[me@linuxbox ~]$ sudo fdisk /dev/sdb

Fíjate que tenemos que especificar el dispositivo en términos del dispositivo completo, no por un número de partición. Después de que el programa arranque, veremos el siguiente prompt:

Command (m for help):

Introducir una “m” mostrará el menú del programa:

Command action
   a toggle a bootable flag
   b edit bsd disklabel
   c toggle the dos compatibility flag
   d delete a partition
   l list known partition types
   m print this menu
   n add a new partition
   o create a new empty DOS partition table
   p print the partition table
   q quit without saving changes
   s create a new empty Sun disklabel
   t change a partition's system id
   u change display/entry units
   v verify the partition table
   w write table to disk and exit
   x extra functionality (experts only)



Command (m for help):

La primera cosa que queremos hacer es examinar la tabla de particiones existente. Lo hacemos introduciendo “p” para imprimir la tabla de particiones del dispositivo:

Command (m for help): p

Disk /dev/sdb: 16 MB, 16006656 bytes
1 heads, 31 sectors/track, 1008 cylinders
Units = cylinders of 31 * 512 = 15872 bytes

   Device Boot Start  End Blocks Id System
/dev/sdb1          2 1008 15608+  b W95 FAT32

En este ejemplo, vemos un dispositivo de 16 MB con una única partición (1) que usa 1006 de los 1008 cilindros disponibles en el dispositivo. La partición está identificada como una partición FAT32 de Windows 95. Algunos programas usarán este identificador para limitar el tipo de operaciones que pueden hacerse en el disco, pero la mayoría de las veces no es crítico cambiarlo. Sin embargo, a modo de demostración, lo cambiaremos para indicar una partición Linux. Para hacerlo, primero debemos encontrar qué ID se usa para identificar una partición Linux. En la lista anterior vemos que se usa el ID “b” para especificar la partición existente. Para ver una lista de los tipos de partición disponibles, volveremos al menú del programa. Allí podemos ver la siguiente opción:

l list known partition types

Si introducimos una “l” en el prompt, se muestra una gran lista de los tipos posibles. Entre ellos, vemos “b” para nuestro tipo de partición existente y “83” para Linux.

Volviendo al menú, vemos la opción de cambiar la ID de una partición:

t change a partition's system id

Introducimos “t” en el prompt y luego la nueva ID:

Command (m for help): t
Selected partition 1
Hex code (type L to list codes): 83
Changed system type of partition 1 to 83 (Linux)

Esto completa todos los cambios que necesitamos hacer. Hasta ahora, el dispositivo no ha sido tocado (todos los cambios han sido almacenados en la memoria, no en el dispositivo físico), así que escribiremos la tabla de particiones modificada en el dispositivo y saldremos. Para hacerlo, introducimos “w” en el prompt:

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: If you have created or modified any DOS 6.x partitions, please see the fdisk manual page for additional information.
Syncing disks.
[me@linuxbox ~]$

Si hubiéramos decidido dejar el dispositivo sin modificaciones, podríamos haber introducido “q” en el prompt, que habría salido del programa sin guardar los cambios. Podemos ignorar tranquilamente el ominoso sonido del mensaje de advertencia.

viernes, 11 de marzo de 2016

Creando un nuevo sistema de archivos

Digamos que queremos formatear la unidad flash con un sistema de archivos nativo de Linux, en lugar del sistema FAT32 que tiene ahora. Esto implica dos pasos: 1. (opcional) crear una nueva tabla de particiones si la existente no es de nuestro gusto, y 2. crear un sistema de archivos nuevo y vacío en el disco.

¡Advertencia! En el siguiente ejercicio, vamos a formatear una unidad flash. ¡Usa una unidad que no contenga nada que necesites porque será borrada! De nuevo, asegúrate completamente de que estás especificando el nombre de dispositivo correcto en nuestro sistema, no el que se muestra en el texto. ¡Incumplir esta medida puede provocar el formateo (o sea borrado) del disco equivocado!

jueves, 10 de marzo de 2016

Determinando los nombres de los dispositivos

A veces es difícil determinar el nombre de un dispositivo. En los viejos tiempos, no era muy difícil. Un dispositivo siempre estaba en el mismo sitio y no cambiaba. A los sistemas tipo Unix les gusta esa manera de proceder. Volviendo a cuando Unix se desarrolló, “cambiar una unidad de disco” implicaba usar un montacargas para retirar un dispositivo del tamaño de una lavadora de la sala de ordenadores. En los últimos años, la configuración del hardware de escritorio se ha vuelto algo más dinámica y Linux ha evolucionado para hacerse más flexible que sus antepasados.

En los ejemplos siguientes aprovecharemos la capacidad de los escritorios modernos de Linux para montar los dispositivos “automágicamente” y después, determinar el nombre. Pero ¿qué pasa si estamos administrando un servidor o algún otro entorno donde esto no ocurre? ¿cómo podemos resolverlo?

Primero, veamos cómo el sistema nombra los dispositivos. Si listamos el contenido del directorio /dev (donde viven todos los dispositivos), podemos ver que hay montones y montones de dispositivos:

[me@linuxbox ~]$ ls /dev

El contenido del listado revela algunos patrones en el nombrado de los dispositivos. Aquí tenemos unos pocos:

Tabla 15-2: Nombres de los dispositivos de almacenamiento en Linux
Patrón
Dispositivo
/dev/fd*
Disquetes
/dev/hd*
Discos IDE (PATA) en sistemas antiguos. Las placas base típicas contienen dos conectores IDE o canales, cada uno con un cable con dos puntos de conexión para unidades. La primera unidad del cable se llama dispositivo maestro y la segunda se llama dispositivo esclavo. Los nombres de dispositivos se ordenan de tal forma que /dev/hda se refiere al dispositivo maestro del primer canal, /dev/hdb es el dispositivo esclavo del primer canal; /dev/hdc, el dispositivo maestro del segundo canal, etc. Un dígito al final indica el número de partición en el dispositivo. Por ejemplo, /dev/hda1 se refiere a la primera partición del primer disco duro del sistema mientras que /dev/hda se refiere al disco completo.
/dev/lp*
Impresoras
/dev/sd*
Discos SCSI. En sistemas Linux recientes, el kernel trata todos los dispositivos que sirven de disco (incluyendo discos duros PATA/SATA, unidades flash, dispositivos de almacenamiento USB como reproductores de música portátiles y cámaras digitales) como discos SCSI. El resto del sistema de nombres es similar al antiguo esquema de nombres /dev/hd* descrito arriba.
/dev/sr*
Discos ópticos (lectores y grabadores de CD/DVD).

Además, vemos a menudo enlaces simbólicos como /dev/cdrom, /dev/dvd y /dev/floppy que apuntan a los archivos de los dispositivos reales, proporcionados para una mayor comodidad.

Si estás trabajando en un sistema que no monta automáticamente los dispositivos extraíbles, puedes usar la siguiente técnica para determinar cómo son nombrados los dispositivos extraíbles cuando son conectados. Primero, arranca una vista en tiempo real del archivo /var/log/messages o /var/log/syslog (puedes necesitar privilegios de superusuario para ello):

[me@linuxbox ~]$ sudo tail -f /var/log/messages

Las últimas líneas del archivo se mostrarán y luego se pausarán. A continuación, conecta el dispositivo removible. En este ejemplo, usaremos una memoria flash de 16MB. Casi inmediatamente, el kernel detectará el dispositivo y lo probará:

Jul 23 10:07:53 linuxbox kernel: usb 3-2: new full speed USB device using uhci_hcd and address 2
Jul 23 10:07:53 linuxbox kernel: usb 3-2: configuration #1 chosen from 1 choice
Jul 23 10:07:53 linuxbox kernel: scsi3 : SCSI emulation for USB Mass Storage devices
Jul 23 10:07:58 linuxbox kernel: scsi scan: INQUIRY result too short (5), using 36
Jul 23 10:07:58 linuxbox kernel: scsi 3:0:0:0: Direct-Access Easy Disk 1.00 PQ: 0 ANSI: 2
Jul 23 10:07:59 linuxbox kernel: sd 3:0:0:0: [sdb] 31263 512-byte hardware sectors (16 MB)
Jul 23 10:07:59 linuxbox kernel: sd 3:0:0:0: [sdb] Write Protect is off
Jul 23 10:07:59 linuxbox kernel: sd 3:0:0:0: [sdb] Assuming drive cache: write through
Jul 23 10:07:59 linuxbox kernel: sd 3:0:0:0: [sdb] 31263 512-byte hardware sectors (16 MB)
Jul 23 10:07:59 linuxbox kernel: sd 3:0:0:0: [sdb] Write Protect is off
Jul 23 10:07:59 linuxbox kernel: sd 3:0:0:0: [sdb] Assuming drive cache: write through
Jul 23 10:07:59 linuxbox kernel: sdb: sdb1
Jul 23 10:07:59 linuxbox kernel: sd 3:0:0:0: [sdb] Attached SCSI removable disk
Jul 23 10:07:59 linuxbox kernel: sd 3:0:0:0: Attached scsi generic sg3 type 0

Después de que la pantalla se pare de nuevo, pulsa Ctrl-C para volver al prompt. Las partes interesantes de la salida son las referencias repetidas a “[sdb]” que coinciden con nuestra expectativa de un nombre de dispositivo de un disco SCSI. Sabiendo esto, dos líneas pasan a ser particularmente esclarecedoras:

Jul 23 10:07:59 linuxbox kernel: sdb: sdb1
Jul 23 10:07:59 linuxbox kernel: sd 3:0:0:0: [sdb] Attached SCSI removable disk

Esto nos dice que el nombre del dispositivo es /dev/sdb para el dispositivo completo y /dev/sdb1 para la primera partición del dispositivo. Como hemos visto, ¡trabajar con Linux está lleno de interesantes trabajos detectivescos!

Consejo: usar la técnica tail -f /var/log/messages es una excelente manera de ver lo que el sistema está haciendo casi en tiempo real.

Con nuestro nombre de dispositivo en la mano, podemos montar la unidad flash:

[me@linuxbox ~]$ sudo mkdir /mnt/flash
[me@linuxbox ~]$ sudo mount /dev/sdb1 /mnt/flash
[me@linuxbox ~]$ df
Filesystem  1K-blocks     Used  Available  Use% Mounted on
/dev/sda2    15115452  5186944    9775164   35% /
/dev/sda5    59631908 31777376   24776480   57% /home
/dev/sda1      147764    17277     122858   13% /boot
tmpfs          776808        0     776808    0% /dev/shm
/dev/sdb1       15560        0      15560    0% /mnt/flash

El nombre del dispositivo permanecerá igual mientras que permanezca físicamente conectado al ordenador y este no sea reiniciado.

miércoles, 9 de marzo de 2016

Por qué es importante desmontar

Si vemos la salida del comando free, que muestra estadísticas sobre el uso de memoria, verás una estadística llamada “buffers”. Los sistemas informáticos está diseñados para ir lo más rápido posible. Uno de los impedimentos a la velocidad del sistema son los dispositivos lentos. Las impresoras son un buen ejemplo. Incluso la impresora más rápida es extremadamente lenta para los estándares de los ordenadores. Un ordenador sería muy lento si tuviera que parar y esperar a que la impresora termine de imprimir una página. En los primeros días de los Pcs (antes de la multitarea), esto era un problema real. Si estabas trabajando en una hoja de cálculo o un documento de texto, el ordenador se paraba y cada vez que imprimías no estaba disponible. El ordenador enviaba los datos a la impresora tan rápido como la impresora podía aceptarlos, pero esto era muy lento ya que las impresoras no imprimen demasiado rápido. Este problema se solucionó con la llegada del buffer de impresora, un dispositivo con memoria RAM que podía situarse entre el ordenador y la impresora. Con el buffer de impresora instalado, el ordenador podía enviar la salida de la impresora al buffer y era rápidamente almacenado en la rápida RAM para que el ordenador pudiera volver al trabajo sin esperar. Mientras tanto, el buffer de impresora iba enviando la cola de datos a la impresora lentamente desde la memoria del buffer a la velocidad a que la impresora podía aceptarlos.

La idea del buffer se usa abundantemente en ordenadores para hacerlos más rápidos. No permite que la necesidad de leer o escribir datos ocasionalmente, hacia o desde dispositivos lentos dificulte la velocidad del sistema. Los sistemas operativos almacenan datos que han sido leídos, y tienen que ser escritos en dispositivos de almacenamiento, situados en memoria, durante el máximo tiempo posible antes de tener que interactuar con el dispositivo lento. En un sistema Linux, por ejemplo, notarás que el sistema parece tener la memoria llena cuanto más tiempo se usa. Esto no significa que Linux esté “utilizando” toda la memoria, significa que Linux está  aprovechando toda la memoria disponible para hacer todo el buffering que pueda.

Este buffer permite que escribir en dispositivos de almacenamiento se haga rápidamente, porque la escritura en el dispositivo físico ha sido pospuesta a un tiempo futuro. Al mismo tiempo, los datos destinados al dispositivo se van acumulando en la memoria. De vez en cuando, el sistema operativo escribirá estos datos en el dispositivo físico.

Desmontar un dispositivo implica escribir todos los datos restantes en el dispositivo para que pueda ser retirado con seguridad. Si se retira el dispositivo sin desmontarlo primero, existe la posibilidad de que no todos los datos destinados al dispositivo hallan sido transferidos. En algunos casos, estos datos pueden incluir actualizaciones vitales de directorios, que causará una corrupción del sistema de archivos, una de las peores cosas que le puede ocurrir a un ordenador.

martes, 8 de marzo de 2016

Viendo una lista de los sistemas de archivos montados

El comando mount se usa para montar sistemas de archivos. Introducir el comando sin argumentos mostrará una lista de los sistemas de archivos actualmente montados:

[me@linuxbox ~]$ mount
/dev/sda2 on / type ext3 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
/dev/sda5 on /home type ext3 (rw)
/dev/sda1 on /boot type ext3 (rw)
tmpfs on /dev/shm type tmpfs (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
fusectl on /sys/fs/fuse/connections type fusectl (rw)
/dev/sdd1 on /media/disk type vfat (rw,nosuid,nodev,noatime,uhelper=hal,uid=500,utf8,shortname=lower)
twin4:/musicbox on /misc/musicbox type nfs4 (rw,addr=192.168.1.4)

El formato del listado es: dispositivo on punto_de_montaje type tipo_sistema_archivos (opciones). Por ejemplo, la primera línea muestra que el dispositivo /dev/sda2 está montado como la raíz del sistema de archivos, es de tipo ext3, y que es tanto legible como modificable (la opción “rw”). Este listado también tiene dos entradas interesantes al final de la lista. La penúltima entrada muestra una tarjeta de memoria SD de 2 gigabytes montada en /media/disk, y la última entrada es un disco de red montado en /misc/musicbox.

Para nuestro primer experimento, trabajaremos con un CD-ROM. Primero, veamos el sistema antes de insertar el CD-ROM:

[me@linuxbox ~]$ mount
/dev/mapper/VolGroup00-LogVol00 on / type ext3 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
/dev/hda1 on /boot type ext3 (rw)
tmpfs on /dev/shm type tmpfs (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)

El listado es de un sistema CentOS 5, que usa LVM (Logical Volume Manager) para crear su sistema de archivos raíz. Como muchas distribuciones Linux modernas, este sistema tratará de montar automáticamente el CD-ROM después de ser insertado. Después de insertar el disco, veremos lo siguiente:

[me@linuxbox ~]$ mount
/dev/mapper/VolGroup00-LogVol00 on / type ext3 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
/dev/hda1 on /boot type ext3 (rw)
tmpfs on /dev/shm type tmpfs (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
/dev/hdc on /media/live-1.0.10-8 type iso9660 (ro,noexec,nosuid,nodev,uid=500)

Tras insertar el disco, vemos la misma lista de antes con una entrada adicional. Al final de la lista vemos que el CD-ROM (que es el dispositivo /dev/hdc en este sistema) ha sido montado en /media/live-1.0.10-8, y es tipo iso9660 (un CD-ROM). Para el propósito de nuestro experimento, nos interesa el nombre del dispositivo. Cuando hagas este experimento tú mismo, el nombre del dispositivo será probablemente distinto.

Advertencia: En los ejemplos siguientes, es de vital importancia que prestes mucha atención a los nombres reales de los dispositivos en uso en tu sistema y ¡no usar los nombres utilizados en este texto!

Ten en cuenta también que los CDs de audio no son lo mismo que los CD-ROMs. Los CDs de audio no contienen sistemas de archivos y por lo tanto no pueden ser montados en la forma normal.

Ahora que tenemos el nombre del dispositivo de la unidad de CD-ROM, desmontemos el disco y lo montaremos de nuevo en otra ubicación en el árbol del sistema de archivos. Para hacerlo, nos haremos superusuario (usando el comando apropiado para nuestro sistema) y desmontaremos el disco con el comando umount (fíjate en cómo se escribe):

[me@linuxbox ~]$ su -
Password:
[root@linuxbox ~]# umount /dev/hdc

El siguiente paso es crear un nuevo punto de montaje para el disco. Un punto de montaje es simplemente un directorio en algún lugar del árbol del sistema de archivos. No tiene nada de especial. No tiene por qué ser un directorio vacío, pero si montas un dispositivo en un directorio no vacío, no podrás ver el contenido previo del directorio a no ser que desmontes el dispositivo. Para nuestro propósito, crearemos un nuevo directorio:

[root@linuxbox ~]# mkdir /mnt/cdrom

Finalmente, montamos el CD-ROM en un nuevo punto de montaje. La opción -t se usa para especificar el tipo de sistema de archivos:

[root@linuxbox ~]# mount -t iso9660 /dev/hdc /mnt/cdrom

Después de esto, podemos examinar el contenido del CD-ROM a través del nuevo punto de montaje:

[root@linuxbox ~]# cd /mnt/cdrom
[root@linuxbox cdrom]# ls

Fíjate que ocurre cuando tratamos de desmontar el CD-ROM:

[root@linuxbox cdrom]# umount /dev/hdc
umount: /mnt/cdrom: device is busy

¿Por qué pasa esto? La razón es que no podemos desmontar un dispositivo si está siendo usado por alguien o por algún proceso. En este caso, hemos cambiado nuestro directorio de trabajo al punto de montaje del CD-ROM, lo que causa que el dispositivo esté ocupado. Podemos remediar el problema fácilmente cambiando el directorio de trabajo a otro que no sea el punto de montaje:

[root@linuxbox cdrom]# cd
[root@linuxbox ~]# umount /dev/hdc

Ahora el dispositivo se desmonta con éxito.

lunes, 7 de marzo de 2016

Montando y desmontando dispositivos de almacenamiento

Avances recientes en el escritorio de Linux han hecho la gestión de los dispositivos de almacenamiento extremadamente sencilla para los usuarios de escritorio. La mayoría de las veces, conectamos un dispositivo a nuestro sistema y “simplemente funciona”. Volviendo a los viejos tiempos (digamos, 2004), esto había que hacerlo manualmente. En sistemas sin escritorio (p.ej.: Servidores) esto sigue siendo en gran parte un procedimiento manual ya que los servidores tienen, a menudo, necesidades extremas de almacenamiento que necesitan configuraciones complejas.

El primer paso en la gestión de un dispositivo de almacenamiento es conectar el dispositivo en el árbol de sistema de archivos. Este proceso, llamado montaje, permite al dispositivo participar en el sistema operativo. Como vimos en el Capítulo 2, los sistemas operativos tipo Unix, por ejemplo Linux, mantienen un único árbol de sistema de archivos con los dispositivos conectados en varios puntos. Esto contrasta con otros sistemas operativos, como MS-DOS y Windows, que mantienen árboles de sistemas de archivos separados para cada dispositivo (por ejemplo C:\, D:\, etc.).

Un archivo llamado /etc/fstab lista los dispositivos (generalmente, las particiones del disco duro) que se montan en el arranque del sistema. Aquí tenemos un ejemplo de archivo /etc/fstab de un sistema Fedora 7:

LABEL=/12       /        ext3   defaults       1 1
LABEL=/home     /home    ext3   defaults       1 2
LABEL=/boot     /boot    ext3   defaults       1 2
tmpfs           /dev/shm tmpfs  defaults       0 0
devpts          /dev/pts devpts gid=5,mode=620 0 0
sysfs           /sys     sysfs  defaults       0 0
proc            /proc    proc   defaults       0 0
LABEL=SWAP-sda3 swap     swap   defaults       0 0

La mayoría de los sistemas de archivos listados en el ejemplo son virtuales y no se aplican a nuestro tema. Para nuestros propósitos, los interesantes son los tres primeros:

LABEL=/12   /     ext3 defaults 1 1
LABEL=/home /home ext3 defaults 1 2
LABEL=/boot /boot ext3 defaults 1 2

Son las particiones del disco duro. Cada línea del archivo consiste en seis campos, como sigue:

Tabla 15-1:Campos de /etc/fstab
Campo
Contenido
Descripción
1
Dispositivo Tradicionalmente, este campo contiene el nombre real de un archivo de dispositivo asociado con el dispositivo físico, como /dev/hda1 (la primera partición del dispositivo maestro en el primer canal IDE). Pero con los ordenadores de hoy en día, que tienen muchos dispositivos que son plug & play (como unidades USB), muchas distribuciones Linux modernas asocian, en su lugar, un dispositivo con una etiqueta de texto. Esta etiqueta (que se añade al medio de almacenamiento cuando se formatea) la lee el sistema operativo cuando el dispositivo es conectado al sistema. De esta forma, sin importar qué archivo de dispositivo se le asigna al dispositivo físico real, este aún puede ser identificado correctamente.
2
Punto de montaje El directorio donde el dispositivo es conectado dentro del árbol del sistema de archivos.
3
Tipo de sistema de archivos Linux permite montar muchos tipos de sistemas de archivos. La mayoría de los sistemas de archivos nativos en Linux son ext3, pero soporta muchos más, como FAT16 (msdos), FAT32 (vfat), NTFS (ntfs), CD-ROM (iso9660), etc.
4
Opciones Los sistemas de archivos pueden montarse con varias opciones. Es posible, por ejemplo, montar sistemas de archivos como sólo-lectura, o prevenir que los programas se ejecuten desde él (una característica de seguridad útil para medios extraíbles).
5
Frecuencia Un único número que especifica si y cuándo se realizará una copia de seguridad de un sistema de archivos con el comando dump.
6
Orden Un único número que especifica en qué orden va a ser chequeado el sistema de archivos con el comando fsck.

viernes, 4 de marzo de 2016

Medios de almacenamiento

En capítulos anteriores hemos visto como manejar datos a nivel de archivos. En este capítulo, consideraremos los datos a nivel de dispositivo. Linux tiene capacidades sorprendentes para soportar dispositivos de almacenamiento, desde almacenamiento físico, como discos duros o almacenamiento en red, a dispositivos de almacenamiento virtuales como RAID (Redundant Array of Independent Disk - Conjunto redundante de discos independientes) y LVM (Logical Volume Manager – Administrador de volúmenes lógicos).

Sin embargo, dado que este no es un libro sobre administración de sistemas, no trataremos de cubrir este tema en profundidad. Lo que trataremos de hacer es presentar algunos de los conceptos y comandos que se usan para manejar dispositivos de almacenamiento.

Para realizar los ejercicios de este capítulo, usaremos una unidad flash USB, un disco CD-RW (para sistemas equipados con un grabador de CD-ROM) y un disquete (de nuevo, si el sistema está equipado).

Veremos los siguientes comandos:
  • mount – Monta un sistema de ficheros
  • umount – Desmonta un sistema de ficheros
  • fsck – Chequea y repara un sistema de ficheros
  • fdisk – Manipulador de tablas de particiones
  • mkfs – Crea un sistema de ficheros
  • fdformat – Formatea un disquete
  • dd – Escribe datos orientados a bloques directamente en un dispositivos
  • genisoimage (mkisofs) – Crea un archivo de imagen ISO 9660
  • wodim (cdrecord) – Escribe datos en una unidad de almacenamiento óptico
  • md5sum – Calcula un checksum MD5

jueves, 3 de marzo de 2016

Para saber más

Dedica un tiempo a conocer el sistema de gestión de paquetes de tu distribución. Cada distribución proporciona documentación para sus herramientas de gestión de paquetes. Además, aquí hay algunas fuentes más genéricas:

miércoles, 2 de marzo de 2016

El mito de la instalación de software Linux

La gente que migra desde otras plataformas, a veces, son víctimas del mito de que el software es algo difícil de instalar en Linux y que la variedad de sistemas de paquetes usados por las diferentes distribuciones es un impedimento. Bien, es un impedimento, pero sólo para los vendedores de software propietario que deseen distribuir versiones binarias exclusivas de su software secreto.

El ecosistema Linux se basa en la idea del código abierto. Si el desarrollador de un programa libera el código fuente de un producto, es probable que una persona asociada a la distribución empaquete el producto y lo incluya en su repositorio. Este método asegura que el producto se integra bien con la distribución y que el usuario tiene la comodidad de una “única tienda”, en lugar de tener que buscar la web de cada producto.

Los controladores de dispositivos (drivers) son manejados de forma muy parecida, excepto que en lugar de ser elementos separados en el repositorio de una distribución, forman parte del propio kernel Linux. Hablando en general, no hay algo como un “disco de controladores” en Linux. O el kernel soporta un dispositivo o no lo hace, y el kernel Linux soporta muchos dispositivos. Muchos más, de hecho, que Windows. Por supuesto, esto no consuela si el dispositivo en concreto que necesitas, no está soportado. Cuando esto ocurre, necesitas ver la causa. Una falta de soporte de controladores está a menudo causada por una de estas tres cosas:

1. El dispositivo es demasiado nuevo. Como muchos distribuidores de hardware no soportan activamente el desarrollo Linux, un miembro de la comunidad Linux debe escribir el código del controlador para el kernel. Esto lleva tiempo.

2. El dispositivo es demasiado exótico. No todas las distribuciones incluyen todos los posibles controladores de dispositivos. Cada distribución desarrolla sus propios kernels, y como los kernels son muy configurables (lo que hace posible ejecutar Linux en todo, desde relojes de pulsera a grandes servidores) podrían haber pasado por alto un dispositivo en particular. Encontrando y descargando el código fuente del controlador, puedes (sí tú) compilar e instalar el controlador tú mismo. Este proceso no es demasiado difícil, pero sí que es enredado. Hablaremos sobre compilar software en un capítulo posterior.

3. El vendedor de hardware esconde algo. Ni ha liberado el código fuente para el controlador de Linux,  ni ha liberado la información técnica para que alguien lo cree. Esto significa que el proveedor de hardware está tratando de mantener las interfaces de programación del dispositivo en secreto. Como no queremos dispositivos secretos en nuestros ordenadores, sugiero que quitemos el hardware ofensivo y lo tiremos a la basura con otras cosas inútiles.

martes, 1 de marzo de 2016

Resumiendo

En los siguientes capítulos, exploraremos muchos programas diferentes cubriendo un amplio rango de áreas de aplicación. Aunque que la mayoría de los programas se instalan normalmente por defecto, necesitaremos instalar paquetes adicionales si los programas necesarios no están instalados en nuestro sistema. Con nuestro, recién obtenido y apreciado, conocimiento de gestión de paquetes, no deberíamos tener problemas instalando y administrando los programas que necesitemos.