Bienvenido a la wiki dedicada a los usuarios nuevos en GNU/Linux, este sitio esta orientado a ayudar a los usuarios nuevos... Si deseas contribuir, por favor crate una cuenta.
Montar Unidades
De PUFs Wiki
En Unix a diferencia de Windows no se accede a las particiones o dispositivos mediante letras de unidades, sino que todos los dispositivos se colocan bajo un mismo árbol de directorios, es decir, no hay separación entre las unidades, sino que todas están bajo el disco raíz /.
Tabla de contenidos |
[editar] Conceptos de Montaje
Como dijimos, todos los dispositivos están bajo el disco raíz, sin embargo los archivos no se encuentran desordenados bajo un mismo directorio, ya que esto podría crear colisiones ( sucede cuando dos archivos diferentes tienen el mismo nombre ); en su lugar se decidió utilizar los puntos de montaje. Un punto de montaje es un simple directorio que utilizamos para acceder a los contenidos del dispositivo, de esta forma podemos tener una estructura de directorios como:
- /
- /Disco1
- /Disco2
- /Disco2/Disco3
- /Disco4
- /home
- /usr
- ...
Si quisieramos acceder al archivo "foto.jpg" ubicado en el disco 3 utilizaríamos el siguiente camino: /Disco2/Disco3/foto.jpg.
Bajo Unix siempre ha sido común que todos los procesos y usuarios vean una misma jerarquía de directorios, sin embargo, en Linux tenemos los namespaces ( espacio de nombres ); mediante estos podemos lograr que distintos procesos y/o usuarios vean una jerarquía de directorios diferente, de esta forma cada usuario podría montar los discos en carpetas diferentes, o montar discos sin que lo puedan ver los otros usuarios, etc. Esta es una poderosa característica de los Unix modernos, sin embargo utilizarla no es nada sencillo por lo cual no la documentaremos ( al menos no en este tutorial ).
[editar] Montando
Para montar unidades Linux dispone del conocido comando de Unix mount. El uso del comando es así:
mount [-t tipo] [-o opciones] dispositivo punto_de_montaje
donde los argumentos entre corchetes son opcionales:
- -t: Se utiliza para especificar el sistema de archivos, ej: ntfs, reiserfs, ext3, iso9660, udf.
- -o: Se utiliza para especificar opciones que puden ser o no específicas del sistema de archivos, ej: bind, rw, ro, umask=0220.
- dispositivo: Especifica el dispositivo a montar.
- punto_de_montaje: Especifica el directorio bajo el cual será accesible el dispositivo.
Debemos recordar que los dispositivos son simplemente archivos que se encuentran bajo el directorio /dev, veamos algunos ejemplos:
# mount -t ext3 -o ro /dev/sdc1 /mnt/PenDrive # mount /mnt/Disco1 # mount /dev/sda1 # mount /dev/hda2 /mnt/DiscoD
Descripción de los ejemplos:
- Montamos el dispositivo /dev/sdc1 bajo el directorio /mnt/PenDrive, además le decimos que el sistema de archivos es ext3 y que lo monte como sólo-lectura, de modo que no podamos modificarlo.
- Montamos el disco 1 bajo el punto de montaje /mnt/Disco1, para que esto funcione debemos tener una entrada en fstab, sino es imposible que Linux sepa que queremos montar.
- Montamos el dispositivo /dev/sda1, nuevamente necesitamos una entrada en /etc/fstab.
- Montamos el dispositivo /dev/hda2 en /mnt/DiscoD, no especificamos el sistema de archivos ya que por lo general Linux es lo suficientemente inteligente para encontrarlo solo, además no le pasamos opciones de montaje, lo cual quiere decir que estamos utilizando las opciones por defecto, de esta manera el dispositivo se monta como lectura-escritura.
También podemos utilizar:
mount -a
de manera que se monten todas las unidades que tengan una entrada bajo /etc/fstab.
[editar] Desmontando
Para desmontar unidades podemos utilizar el comando umount:
umount [-a] dispositivo | punto_de_montaje
Si utilizamos la opción -a el comando tratará de desmontar todas las unidades. Para desmontar una unidad debemos pasarle el archivo de dispositivo o el punto de montaje, pero no los dos, con uno es suficiente. Hay ocasiones donde pasar como argumento el punto de montaje es más específico.
[editar] Montando Unidades Windows
Es muy sencillo compartir archivos con Windows, ya que para ello simplemente debemos montar la unidad correspondiente, pero hay que tener algunas cositas en cuenta:
- Las viejas unidades FAT utilizaban nombres corto de archivos, los cuales estaban codificados bajo un código específico, el cual era llamado codepage, esto es importante si queremos visualizar bien estos nombres cortos.
- Las unidades FAT32 y NTFS guardan los nombres de archivo bajo Unicode, utilizando una codificación de 2 bytes, por lo cual el problema es mínimo, sin embargo debemos decirle a Linux qué codificación estamos utilizando nosotros para que pueda realizar la conversión de la codificación interna de NTFS y FAT32 a la codificación que utilizamos nosotros.
- Para utilizar los nombres largo de archivo bajo FAT32 debemos utilizar el sistema de archivos vfat.
- Debemos incluir soporte en el kernel de Linux para la codificación que usaremos.
- El kernel de Linux no tiene soporte para escribir en particiones NTFS ( si tiene, pero es muy primitivo ).
Para FAT32 debemos tener en cuenta las siguientes opciones a la hora de montar si queremos ver bien los nombres de archivo:
- codepage=valor: Especifica el código de página bajo el cual está nuestra unidad FAT ( para los nombres cortos 8.3 ).
- iocharset=valor: Especifica la codificación a la cual tiene que convertir los caracteres Unicode de los nombres largos.
- utf8: Indica que debe convertir los nombres largos a UTF-8, si bien se podría utilizar iocharset esto no se recomienda por alguna obscura razón.
Para NTFS debemos tener en cuenta las siguientes opciones:
- nls=valor: Especifica la codificacioń a la cual debe convertir los nombres de archivo de NTFS
Teniendo esto en cuenta supongamos que tenemos el dispositivo /dev/sda1 el cual es el disco C de nuestro Windows, además es un disco FAT32, entonces podemos montarlo con un comando similar a:
# mount -t vfat -o codepage=850,utf8 /dev/sda1 /mnt/DiscoC
o si usamos una codificación diferente a UTF-8 podemos hacer así:
# mount -t vfat -o codepage=850,iocharset=iso8859-15 /dev/sda1 /mnt/DiscoC
En el caso de NTFS sería así:
# mount -t ntfs -o nls=utf8 /dev/sda1 /mnt/C
O así:
# mount -t ntfs -o nls=iso8859-15 /dev/sda1 /mnt/C
[editar] Montando Unidades Windows en Red
Para montar unidades a través de la red interna debemos disponer de las utilidades Samba y además de soporte para el sistema de archivos smbfs (En versiones nuevas el protocolo es denominado cifs), ya sea como módulo o compilado en el kernel. Una vez tengamos todos estos requisitos cumplidos utilizar una unidad a través de la red es tan sencillo como montarla. Para esto debemos tener en cuenta las siguientes opciones:
- username=usuario: El nombre de usuario requerido para acceder a la unidad a través de la red, desde luego tiene que ser un usuario válido en la computadora con Windows que comparte la unidad.
- password=clave: La clave a utilizar para acceder al recurso compartido. Si no la especificamos nos la preguntará luego, lo cual es más seguro ya que no queda grabada en nuestro archivo ~/.bash_history.
Además hay que remarcar que ya no debemos especificar un nombre de dispositivo bajo /dev sino que debemos especificar un nombre de máquina o una IP, veamos un ejemplo:
# mount -t {smbfs cifs} -o username=miusuario,iocharset=utf8,codepage=850 //NOMBRE_COMPUTADORA/Disco_Compartido /mnt/DiscoWindows
luego nos preguntará la clave y listo. Como verán, las opciones de codificación siguen siendo válidas.
[editar] Permisos
Quizás nos preguntemos porque con algún usuario no podemos escribir o leer una partición, esto se debe a que el usuario no dispone de permisos para ello. Cuando nosotros montamos una partición se nos permite especificarle los permisos que usará, el usuario y el grupo al que pertencerá, sabiendo esto la mejor forma de organizar los permisos es la siguiente:
- Creamos un grupo para que los usuarios puedan acceder a los discos, por ejemplo el grupo disco ( /etc/group ).
- Utilizamos las opciones de montaje para utilizar este grupo y establecemos los permisos adecuados.
[editar] Creando el Grupo
La mayoría de las distribuciones ya incluyen un grupo para esto generalmente llamado disk, pero en caso de que nuestra distribución no lo incluya podemos agregar un grupo editando el archivo /etc/group agregando una línea al final como la siguiente:
disco:x:6:root,adm,pepe,juan
Desde luego debemos asegurarnos que el número de grupo esté disponible y que la lista de usuarios sea la correcta. De todas formas no es la mejor forma de hacerlo, ya que en otras versiones de Unix podría no funcionar ( por ej. BSD utiliza base de datos generadas a partir del archivo de texto plano ). En su lugar podemos utilizar el comando groupadd para crear el grupo y usermod para agregar nuestro usuario al grupo de la siguiente manera:
# groupadd -g 6 disco # usermod -aG disco root # usermod -aG disco adm # usermod -aG disco pepe # usermod -aG disco juan ...
[editar] Montando la Unidad
Una vez creado el grupo podemos utilizar las siguientes opciones de montaje para modificar los permisos de la partición:
- uid=valor: El número de usuario con el que montar la partición.
- gid=valor: El número de grupo con el que montar la partición.
- umask=valor: Establece el umask aplicado a directorios y archivos. En Octal.
- dmask=valor: Establece el umask aplicado a directorios. En Octal.
- fmask=valor: Establece el umask aplicado a archivos. En Octal.
Entonces montaremos la partición de modo que pertenezca al usuario root ( uid=0 ) y al grupo disco ( gid=6 ), además queremos que los permisos de los archivos sean rw-rw---- y los directorios rwxrwx---, entonces podemos utilizar el siguiente comando:
# mount -t vfat -o codepage=850,utf8,uid=0,gid=6,umask=007 /dev/sda1 /mnt/DiscoC
[editar] Bindings
Los bindings son una forma de montar un mismo dispositivo en varios lugares diferentes, para utilizar esta característica debemos utilizar a mount algo así:
# mount -o bind /punto_de_montaje_origen /punto_de_montaje_destino
Supongamos que tenemos un dispositivo montado en /mnt/cdrom y queremos además montarlo bajo /mnt/floppy, lo podemos lograr con el siguiente comando:
# mount -o bind /mnt/cdrom /mnt/floppy
Para desmontar cualquiera de ellos basta ejecutar umount pasándole como argumento el punto de montaje a desmontar, ej:
# umount /mnt/floppy
[editar] Loop
Los dispositivos loop nos permiten montar archivos como si fueran dispositivos, de modo que si tenemos una imagen de un cd-rom podemos montarla con mount a secas de la siguiente manera:
# mount -o loop /archivo_imagen /punto_de_montaje
Supongamos que tenemos la imagen de un DVD y queremos ver su contenido, podemos utilizar el comando de la siguiente manera:
# mount -o loop -t udf /dvd.iso /mnt/DVD
Para esto debemos tener el soporte para dispositivos loop compilado en el kernel o como módulo. En caso de tenerlo como módulo y si mount no lo carga automáticamente podemos utilizar el siguiente comando para hacerlo:
# modprobe loop
Hay veces sin embargo que queremos hacer cosas más sofisticadas que simplemente montar un dispositivo, como por ejemplo, podemos querer ver un DVD utilizando xine o mplayer sin montar el dispositivo, o podemos tener la imágen de un disco y necesitamos particionarlo, y para eso no hace falta montarlo. En estos casos se puede utilizar el comando losetup para establecer una correspondencia entre un dispositivo bajo /dev/loop/X y un archivo, de la siguiente manera:
# losetup /dev/loop/X /archivo
Supongamos que tenemos un DVD que queremos ver con xine, entonces basta con utilizar el comando para dejar el dispositivo preparado:
# losetup /dev/loop/0 /dvd.iso
Siempre y cuando sea el primer dispositivo loop, sino deberemos cambiar el número 0 por otro número. Una vez que terminemos podemos quitar la correspondencia de la siguiente manera:
# losetup -d /dev/loop/0
[editar] FUSE
Filesystem in Userspace nos permite utilizar programas que corren en espacio de usuario para montar sistemas de archivos. Se puede compilar en el kernel o como módulo y simplemente agrega una capa de abstracción entre el kernel y los programas de usuario de modo que sea más sencillo y seguro agregar sistemas de archivos completamente en espacio de usuario. Gracias a FUSE se han hecho programas que nos permiten montar nuestra cuenta de correo de GMAIL como un disco más, o incluso montar particiones NTFS con soporte completo de escritura, el conocido ntfs-3g.
Los sistemas de archivos FUSE se pueden montar llamando directamente al binario o mediante mount especificando el tipo de archivo.
[editar] NTFS-3G
Este sistema de archivos que utiliza FUSE como capa de abstracción nos permite utilizar nuestros dispositivos NTFS con todo su potencial. Algunas quizás se pregunten por qué decidieron utilizar FUSE, la respuesta es sencilla:
- Permite probar un driver fuera del kernel con todas las ventajas de estabilidad que representa.
- Permite utilizar la librería estándar de C y cualquier otra librería externa lo cual permite un desarrollo rápido del driver ya que se puede reutilizar muchísimo código
- Es mucho más fácil depurar código fuera del kernel.
La instalación de NTFS-3G desde los fuentes es sumamente sencilla, basta utilizar los siguientes comandos:
# ./configure # make # make install
Una vez instalado es muy fácil montar nuestros sistemas NTFS, como ya dijimos podemos utilizar el binario de forma directa o mediante el comando mount:
# ntfs-3g /dev/sda1 /mnt/DiscoC # mount -t ntfs-3g /dev/sda1 /mnt/DiscoC
Debemos tener en cuenta que para poder ver correctamente los nombres de archivo debemos utilizar la opción locale de la siguiente forma:
# mount -t ntfs-3g -o locale=es_AR.utf8 /dev/sda1 /mnt/DiscoC
Donde locale es justamente el que estamos utilizando. Podemos obtener una lista de locales disponible en nuestro sistema mediante el siguiente comando:
# locale -a
Para montar la partición automáticamente en el sistem basta ingresar una entrada en el fstab indicándole como tipo de archivo ntfs-3g y las opciones de montaje adecuadas.
[editar] Enlaces y recursos
- Página del manual de mount, smbmount, umount, fstab, fusermount
- NTFS-3G: http://www.ntfs-3g.org/
- NTFS-3G en Ubuntu: http://www.ubuntu-es.org/node/21061
- NTFS-3G en Fedora: http://www.mjmwired.net/resources/mjm-fedora-fc6.html#ntfs
- NTFS-3G en Gentoo: http://gentoo-wiki.com/HOWTO_NTFS_write_with_ntfs-3g
- NTFS-3G en Ubuntu: http://ubuntuforums.org/showthread.php?t=217009
