SDB:Fundamentos sobre particiones, sistemas de archivos y puntos de montaje
Probado en openSUSE | Artículos recomendados | Artículos relacionados | |||
|
Contenido
Introducción
Cuando se procede a instalar openSUSE o cuando se añaden o eliminan de un disco otros sistemas operativos existentes, es frecuente que la gente o los manuales a los que acudamos empiecen a hablar usando términos como montar o desmontar, y sobre sistemas de archivos y particiones. Algunos usuarios tienen una ligera idea de a lo que se refieren estos términos. En sistemas operativos del entorno Unix/Linux, este desconocimiento significa que la discusión de problemas de estos temas está llena de malentendidos.
Otros usuarios tienen un conocimiento basado en la familiaridad con otros sistemas operativos, lo que incrementa la posibilidad de confusión.
Este SDB espera ser un primer punto de partida para seguir leyendo otros artículos o fuentes y aprender unos conceptos básicos de uso muy frecuente.
Todos los ejemplos que se muestran a continuación fueron hechos por el superusuario (root). |
Disco
En este documento la palabra disco es usada de manera genérica para todo aquello que es visto por el sistema como una unidad de disco, tanto si se trata de un dispositivo de memoria flash que se ve como un disco, una unidad óptica (CD o DVD), o un "verdadero" disco duro e incluso una combinación de varios dispositivos.
Los discos, por lo general, son suministrados ya preformateados por el fabricante. Esto significa que las pistas dañadas se señalizan y se utilizan otras que las reemplazan. Esto se realiza mediante la interfaz de control del firmware. Este tipo de formateo también es conocido como formateo de bajo nivel.
Disco (Particiones)
Los sistemas Unix siempre han tenido la posibilidad de montar un subsistema de almacenamiento de varias particiones. Estas particiones pueden estar repartidas en varios dispositivos físicos, o pueden ser varias particiones en un mismo dispositivo físico. Cada disco debe tener al menos una partición, pero a menudo hay más. Nos limitaremos aquí al particionado tal y como se hace en los discos duros en un entorno de un PC.
Al principio, cuando los discos tenían muy poco espacio, se tenía la idea de que cuatro particiones serían suficientes para todo el uso posible que se le fuera a dar al disco duro (con el tiempo se ha evolucionado y aquella idea ha quedado obsoleta, pudiendo necesitar más de esas cuatro particiones posibles). Los datos sobre el particionado están escritos en la tabla de particiones. Se encuentra en un lugar especial en el disco y el BIOS accede a ella para consultarla.
Cuando se hizo muy evidente que cuatro particiones no iban a ser suficientes, se encontró e implementó una solución compatible con las versiones anteriores: hacer una de las cuatro particiones, una partición especial, que puede contener varias particiones. Las BIOS más recientes (todas en la actualidad) conocen este nuevo tipo de particiones y pueden utilizarlas. Así pues, tenemos tres tipos de particiones:
- Particiones primarias: estas son las antiguas cuatro particiones primigenias, puede haber hasta 4 (numeradas con los números 1, 2, 3, 4).
- Partición extendida: (de hecho también es una partición primaria), sólo puede haber una, tiene normalmente el número más alto después de la creada como partición primaria (3 ó 4) y debe contener todo el espacio restante del disco (de lo contrario el espacio queda desperdiciado).
- Particiones secundarias: que se crean dentro de la partición extendida, su numeración es siempre 5 o superior (el máximo es discutible, pero suele ser suficiente para la mayoría de la gente).
Algunas personas están desconcertadas por la existencia de la partición extendida, que no parece ser de ninguna utilidad y ocupa una gran cantidad de espacio en disco y que el espacio parece que también pertenecen a otras particiones útil. La partición extendida actúa como un contenedor para las particiones secundarias, y el espacio que se muestra corresponde tanto a la partición extendida como a las particiones secundarias que contiene.
Veamos un ejemplo de un disco con particiones de los tres tipos:
Geecko_root:/ # fdisk -l Disk /dev/sda: 200.0 GB, 200049647616 bytes 255 heads, 63 sectors/track, 24321 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Disk identifier: 0x1c841c84 Device Boot Start End Blocks Id System /dev/sda1 1 574 4604008+ c W95 FAT32 (LBA) Partition 1 does not end on cylinder boundary. /dev/sda2 * 575 8967 67416772+ 7 HPFS/NTFS /dev/sda3 8968 24321 123331005 f W95 Ext'd (LBA) /dev/sda5 8968 9229 2104483+ 82 Linux swap / Solaris /dev/sda6 9230 11840 20972826 83 Linux /dev/sda7 11841 24321 100253601 83 Linux Geecko_root:/ #
- Partición 1: es una partición de restauración creada por el fabricante.
- Partición 2: contiene un sistema Windows XP (El sistema la llama como unidad
C:
). - Partición 3: Es la partición extendida y ocupa hasta el final del disco dura. Y contiene estas tres particiones.
- Partición 5: es la partición
swap
de openSUSE. - Partición 6: es la partición
root
de openSUSE. - Partición 7: es la partición
/home
de openSUSE.
Nomenclatura de las particiones
En la tabla de particiones, estas son simplemente numeradas como hemos visto en el ejemplo anterior.
Cabe aquí destacar una advertencia sobre GRUB. GRUB tiene su propio esquema de numeración y lo más importante es saber que GRUB inicia todos los discos y particiones contándolos empezando desde 0 y no desde 1.
Cuando el sistema Linux arranca, escanea el hardware y cuando encuentra los discos y particiones les da un nombre. Estos nombres se utilizan para ser encontrados como archivos de dispositivos especiales dentro del directorio /dev/
(que viene de devices o dispositivos). Los discos tienen nombres como hda
, hdb
, hdc
, ... para dispositivos IDE; o sda
, sdb
, sdc
, ... (actualmente se usa sdX tanto para dispositivos IDE, SATA y SCSI). Para dispositivos SCSI. Las particiones de hda
serán hda
1, hda2
, ... y las sda
serán sda1
, sda2
, ... respectivamente, donde el número es el número de partición.
¿Cuáles son los archivos de dispositivos especiales? Un tipo especial de archivos que están asociados con el hardware. La entrada/salida (E/S) mediante el hardware se hace leyendo o escribiendo en este archivo. Así se dice repetidamente y puede que lo hayas escuchado, que en Unix/linux todo es un archivo. Hay dos tipos de estos archivos: archivo especial de dispositivo de caracteres y archivo especial de dispositivo de bloques. Para los discos hacemos E/S de bloques. Por supuesto, esto es demasiado largo para pronunciar por lo que la mayoría la gente habla de los archivos de dispositivos. Normalmente se crean en el directorio /dev/
(hoy en día de forma dinámica por parte de udev). Veamos cómo se ve dentro de directorio /dev/
:
Geecko_root:/dev # ls -l sda* brw-rw---- 1 root disk 8, 0 ene 30 11:29 sda brw-rw---- 1 root disk 8, 1 ene 30 11:29 sda1 brw-rw---- 1 root disk 8, 2 ene 30 11:29 sda2 brw-rw---- 1 root disk 8, 5 ene 30 11:29 sda5 brw-rw---- 1 root disk 8, 6 ene 30 11:29 sda6
La mayoría de las cosas que ve le serán familiares. La b indica un archivo de dispositivo especial de bloques. A los usuarios normales no se les permite leer/escribir directamente desde/hacia el disco, de lo contrario toda seguridad sería inútil. El número 8 es el número que el kernel utiliza internamente para el controlador que trabaja con estos dispositivos y el 0 - 3 sirve para distinguirlos entre sí dentro de ese controlador.
Hasta hace poco, los /dev/sdbX
se utilizan para montar las particiones y cuando se escribía el comando mount
(que muestra lo que está montado), se verá cuales utiliza.
Geecko_root:/ # mount | grep /dev/sd /dev/sdb6 on / type reiserfs (rw,relatime,acl,user_xattr) /dev/sdb7 on /home type ext4 (rw,relatime,user_xattr,acl,barrier=1,data=ordered) /dev/sdb2 on /windows/C type fuseblk (rw,nosuid,nodev,noexec,relatime,user_id=0,group_id=0,default_permissions,allow_other,blksize=4096) Geecko_root:/ #
Esto se basa en el hecho de que en cada arranque del sistema se encuentra en los discos en la misma secuencia. Si esto no se produjese, sda
y sdb
podrían estar cambiadas y las particiones mal montadas (¡y provocar un lío enorme al usuario!). Esto puede ocurrir no sólo en el arranque, si no también cuando se conecta un disco a un sistema en funcionamiento al que se le dará el nombre 'siguiente' al último montado (por ejemplo, sdc
). Así, por ejemplo, al conectar un disco o memoria USB externa a un sistema, no se garantiza obtener el mismo punto de montaje en todo momento, lo cual es inconveniente.
Para eliminar esta confusión, sería necesario que haya un identificador único para el disco. Y lo hay. Más aún, mira en: /dev/disk/
. Existen varios directorios dentro de esa ruta, tal y como vemos en este ejemplo y como puedes ver en tu sistema:
Geecko_root:/ # ls -l /dev/disk total 0 drwxr-xr-x 2 root root 860 ene 30 11:29 by-id drwxr-xr-x 2 root root 120 ene 30 12:29 by-label drwxr-xr-x 2 root root 320 ene 30 11:29 by-path drwxr-xr-x 2 root root 200 ene 30 12:29 by-uuid Geecko_root:/ #
Puedes mirar dentro de esos directorios. Cada uno de ellos tiene algunas o todas las particiones, identificadas de una manera diferente. Y cada uno de estos archivos no es un archivo especial de dispositivo, sino un enlace a un archivo especial de dispositivos que hemos visto anteriormente. Cuando se mira en /etc/fstab
:
Geecko_root:/ # cat /etc/fstab /dev/disk/by-id/ata-ST31000528AS_9VP2SP2X-part5 swap swap defaults 0 0 /dev/disk/by-id/ata-ST31000528AS_9VP2SP2X-part6 / reiserfs acl,user_xattr 1 1 /dev/disk/by-id/ata-ST31000528AS_9VP2SP2X-part7 /home ext4 acl,user_xattr 1 2 /dev/disk/by-id/ata-ST31000528AS_9VP2SP2X-part2 /windows/C ntfs-3g users,gid=users,fmask=133,dmask=022,locale=es_ES.UTF-8 0 0 ...
Verás que openSUSE utiliza hoy en día los nombres de /dev/disk/by-id/
para ver que las particiones se montan de forma correcta:
Geecko_root:/ # ls -l /dev/disk/by-id ... lrwxrwxrwx 1 root root 9 ene 30 11:29 scsi-SATA_ST31000528AS_9VP2SP2X -> ../../sdb lrwxrwxrwx 1 root root 10 ene 30 11:29 scsi-SATA_ST31000528AS_9VP2SP2X-part1 -> ../../sdb1 lrwxrwxrwx 1 root root 10 ene 30 11:29 scsi-SATA_ST31000528AS_9VP2SP2X-part2 -> ../../sdb2 lrwxrwxrwx 1 root root 10 ene 30 11:29 scsi-SATA_ST31000528AS_9VP2SP2X-part5 -> ../../sdb5 lrwxrwxrwx 1 root root 10 ene 30 11:29 scsi-SATA_ST31000528AS_9VP2SP2X-part6 -> ../../sdb6 lrwxrwxrwx 1 root root 10 ene 30 11:29 scsi-SATA_ST31000528AS_9VP2SP2X-part7 -> ../../sdb7 ...
Organización del sistema de archivos
Ahora ya tenemos una o más particiones y queremos usarlas. Algunos programas, que hacen un uso intensivo de E/S de disco pueden utilizar particiones raw, pero sobre todo queremos poner los datos organizados en los directorios/archivos, o utilizarlo como intercambio swap. Para utilizarlo como sistema de ficheros (o swap) debemos crear un sistema de archivos en la partición. Muchas personas llaman a este proceso formateo, pero en Unix/Linux lo que se hace es crear o realizar un sistema de archivos y la herramienta para hacerlo desde la consola es mkfs
. No entraré en detalles aquí, pero lo que sucede en un sistema de archivos vacío (inodos, etc.) depende del tipo elegido. Un tipo de sistemas de archivo ReiserFS es diferente de un sistema de archivos ext3 o ext4. Se debe elegir, pero si no sabes mucho del tema, escoger los valores por defecto no es una mala opción.
Cabe destacar aquí que GNU/Linux no sólo puede acceder a los tipos de sistema de archivos que están diseñados específicamente para él (tales como ext3, ext4, etc.), sino también a tipos de sistemas que son utilizados por MS/DOS, Windows, etc. (tales como FAT y NTFS). Sin embargo, existen ciertas restricciones propias de estos sistemas de archivos que no son propios de GNU/Linux. FAT tiene restricciones en la longitud de los nombres de archivos. Tanto FAT como NTFS no tienen los bits específicos de permisos propios de sistemas operativos Unix/Linux, y esto significa que a veces se restringe el acceso a estos sistemas de archivos. Nada que no pueda solucionarse mediante los comandos adecuados (opciones de sistema de archivos en el momento del montaje).
Antes de empezar a usar las particiones, veremos en primer lugar una explicación sobre la terminología y conceptos utilizados en Unix/Linux sobre esta área.
Los sistemas Unix/Linux ven todo el espacio del disco como un árbol establecido de forma jerárquica partiendo todo desde la raíz (también llamada root y designada por este símbolo Un directorio es un tipo especial de archivo que contiene las descripciones de otros archivos. Todos los directorios son nodos dentro de ese árbol jerárquico en el que hemos dicho que se puede comparar la estructura de Unix/Linux. En otros sistemas operativos los usuarios se refieren a estos como carpetas, la verdad es que en Unix/Linux la palabra correcta es directorio. La raíz del árbol jerárquico, es también un directorio. Se le suele llamar directorio raíz o simplemente raíz o también es usual referirse a esta por su nombre en inglés root. Esta palabra no debemos confundirla con el usuario root o superusuario, que es el administrador del sistema. Cuando se utiliza por sí solo, el directorio raíz se escribe /mnt/ o /media/ . Se trata de un directorio. Cualquier directorio puede ser utilizado como un punto de montaje. Pero tenga cuidado, cuando un directorio ya contiene archivos, ¡el montaje de un sistema de archivos en él puede hacer que no se pueda acceder a estos archivos! Sólo después de desmontar se puede acceder de nuevo a los ficheros que se encontraran donde estaban, y siguen ocupando espacio en el disco.
|
Jerarquía de los sistemas de archivos
Existe en sistemas Linux una organización estándar para los sistemas de archivos (consultar el enlace "Estándar de jerarquía del sistema de archivos" del inicio de este SDB). Pero este estandar se puede ampliar y adaptar. De hecho las distintas distros de GNU/Linux (openSUSE, Debian, Fedora,...) respetan este estándar, pero introducen ciertas modificaciones propias de cada una.
Se realizan varios puntos de montaje, en esta jerarquía. En el nivel más alto de esta jerarquía puede haber (y debe haber) uno y sólo uno:
-
/
: es la raíz. Este punto se monta al principio de la secuencia de arranque del sistema como de sólo lectura, ya que de otra manera no habría herramientas disponibles ni siquiera para montar dispositivos. Más tarde este punto se "re-monta" como de lectura/escritura.
Un nivel por debajo de la Raíz nos encontramos lo siguiente:
-
/home
: A menudo separado en un punto de montaje diferente (otro disco u otra partición, lo que es muy recomendable) -
/tmp
-
/bin
-
/sbin
Más abajo nos encontramos con:
-
/mnt/
: Un buen lugar para un administrador de sistemas para montar dispositivos durante un proceso de mantenimiento, por ejemplo. -
/media/
: El sitio más habitual para montaje de los CD, DVD y dispositivos similares.
Y en niveles inferiores y de acuerdo a las necesidades de cada usuario, podemos encontrar:
-
/home/Películas/Documentales/archivo
(por ejemplo): Un espacio propio para un usuario en concreto.
Cabe resaltar que bajo /
será normal ver un directorio llamado /home
, que para un observador casual no notará la diferencia de si es una partición a parte montada en ese punto, o si es una subdivisión de la raíz /
.
Para que cualquier operación de montaje de un sistema de archivos tenga éxito, el árbol ya existente debe disponer el punto en el cual se montará la nueva subesctructura, lo que significa el éxito del montaje de un punto depende del orden en el que se haga. Es decir primero debe haber un punto montado, en que podremos montar otro.
Es posible fusionar dos conjuntos de sistemas de archivos que se encuentren en particiones diferentes, mediante el uso de un tipo especial de sistema de archivos (unionfs, aufs).
Herramienta de montaje y el archivo de configuración /etc/fstab
El propio acto de montaje/desmontaje de un punto lo hace el kernel. La herramienta que utiliza el administrador del sistema para interactuar con el kernel es el comando mount
. Lee el manual del comando para tener una información más detallada. Esta herramienta necesita básicamente cuatro cosas:
- Cual es el tipo de sistema de archivos que se va a montar (que se especifica mediante la opción -v)
- Opciones que influyen en el sistema de ficheros, que son diferentes para cada tipo de sistema de archivos (se especifica mediante la opción -o)
- Qué es lo que se va a montar.
- Dónde se va a montar (el directorio del punto de montaje)
Esto puede significar tener que teclear un montón de comandos cuando estés haciendo pruebas, así que /etc/fstab/
te puede ser muy útil. Cuando especificas todos esos parámetros dentro de /etc/fstab
, el comando mount
sólo necesita que se le especifique el punto de montaje o el archivo especial de dispositivo. Aquello que no se especifique con el comando, se encuentra en /etc/fstab
.
El uso principal que tiene fstab es para que el sistema al arrancar monte aquellas particiones que se van a necesitar.
Como se ha mencionado anteriormente, se debe seguir un orden a la hora de montar sistemas de archivos, así no se debe montar /home/Películas/Documentales/archivo
antes que /home/
ya que este último contiene al anterior.
Para desmontar solo se necesita el punto de montaje o el archivo especial de dispositivo.
De estático a dinámico
Todo lo anterior es acerca de dónde y cómo se realiza el proceso de montaje en el sistema de arranque (boot). Sin embargo, algunos dispositivos de almacenamiento de hoy en día tales como los CD o DVD y memorias USB se conectan y desconectan del sistema según las necesidades del usuario, en el papel de operador. Esta mención de operador no es un capricho. Linux es un sistema multi-usuario, y eso significa que puede haber varios usuarios conectados en cualquier momento. Así que cuando el operador' inserta un CD o una memoria USB ¿qué usuario es el que debe tener acceso?
Ahora, ¿qué pasa cuando un dispositivo se añade de forma dinámica al sistema (introduciendo la USB, o un CD en el lector) y quién tiene los privilegios de hacer qué? Lo primero debemos tener los archivos especiales de dispositivos. udev realiza este proceso de la misma forma y siguiendo los mismos procesos que sigue durante el arranque del sistema. El kernel avisa al demónio de udev llamado udevd cuando un nuevo hardware está disponible. Después de conectar la USB podrás encontrar nuevas entradas dentro del directorio /dev/disk/
. Por ejemplo, cuando la partición de tu USB está nombrada con una etiqueta, encontrarás dentro de ese directorio algo así: /dev/disk/by-label/
.
Conclusiones
Como se ha dicho, este artículo pretende ser un primer acercamiento para que se interese y lea un poco más sobre las herramientas que aquí se han mencionado, tales como fdisk
, mkfs
, mount
, etc. Puede profundizar su conocimiento sobre ellas leyendo los manuales disponibles en su sistema mediante el comando man <comando_a_buscar>
o en los enlaces que se han proporcionado.
Tambien desde YaST → Sistema → Particionador (que también puede encontrar en los enlaces) puede disponer de una útil interfaz gráfica para realizar ciertas operaciones, aunque es posible que tenga que volver a utilizar la línea de comandos porque necesite desmontar un sistema de archivos mientras trabaja con él. Es posible que necesite arrancar el sistema desde un CD/DVD de rescate para utilizar fdisk
u otros comandos. También existen herramientas de arranque con interfaz gráfica como GParted con la que se podrá realizar gran cantidad de ajustes y modificaciones de los sistemas de archivos.