Documentos de Académico
Documentos de Profesional
Documentos de Cultura
1. Aspectos Básicos
Los archivos son un mecanismo de abstracción, proporcionan una manera de almacenar
información en el disco y después leerla. Los tipos de archivos pueden agruparse en tres grandes
tipos:
El acceso a los archivos puede ser secuencial o aleatorio. En el acceso secuencial, para acceder
al n-ésimo bloque del archivo es necesario atravesar previamente por los n-1 bloques de datos.
En cambio, en un archivo que permite el acceso aleatorio a través de un cálculo es posible llegar
a la posición deseada.
Otro aspecto a tener en cuenta es que los archivos tienen asociados atributos que los
caracterizan tales como nombre, tamaño, contraseña, banderas que indican estados (por
ejemplo, si está oculto), el creador, el propietario, los permisos requeridos, entre otros. En la
Figura 1 se muestra una porción de la salida del comando ls -l /var/log lo cual permite listar los
archivos en el directorio /var/log junto con información de algunos de los atributos asociados a
cada archivo. La primera columna proporciona información de permisos para: 1) el usuario
dueño del archivo, 2) los usuarios pertenecientes al grupo que pueden acceder al archivo y 3)
para cualquier otro usuario. La segunda columna indica el dueño del archivo, la tercera muestra
el nombre del grupo que tiene permiso para operar sobre el archivo, la cuarta columna indica el
tamaño del archivo, la quinta, sexta y séptima columna especifican el mes, día y hora de creación
o de la última modificación del archivo y finalmente la última columna indica el nombre del
archivo. El comando ls -la nos permite listar los archivos ocultos existentes en el directorio.
Las operaciones básicas sobre archivos son: la creación, la eliminación, la apertura, el cierre de
un archivo, escribir sobre un archivo, agregar información al final, obtener atributos del archivo,
establecer atributos, renombrar.
P á g i n a 1 | 15
Los archivos a su vez son almacenados en directorios para facilitar su localización. Para poder
localizar el archivo es necesario indicar su ubicación a través de un nombre de ruta. En general
se utilizan dos métodos generales para proporcionar los nombres de rutas:
Las operaciones que pueden realizarse sobre directorios son, por ejemplo: crear directorios,
eliminar directorios, abrir, cerrar, leer un directorio, renombrar, ligar directorios y desligar. La
vinculación (ligado) es una técnica que permite a un archivo aparecer en más de un directorio.
Esta llamada al sistema especifica un archivo existente y el nombre de una ruta, creando un
vínculo desde el archivo existente hasta el nombre especificado por la ruta. Este tipo de enlace
se conoce como enlace duro porque incrementa el contador en el nodo-i del archivo (para llevar
la cuenta del número de entradas en el directorio que contiene el archivo).
Una variante sobre la idea de vincular archivos es el vínculo simbólico (liga simbólica). En vez de
tener dos nombres que apunten a la misma estructura de datos interna que representan un
archivo, se puede crear un nombre que apunte a un pequeño archivo que nombre a otro.
Cuando se utiliza el primer archivo, por ejemplo, abierto, el sistema de archivos sigue la ruta y
busca el nombre al final. Después empieza el proceso de búsqueda otra vez, utilizando el nuevo
nombre.
En Linux para crear enlaces se utiliza el comando ln. Por defecto con este comando se crean
enlaces duros o físicos. Para crear un enlace simbólico debe pasarse el parámetro -s. Por
ejemplo, para crear un enlace simbólico en el directorio home del usuario alumno al archivo
/var/log/syslog se ejecuta el siguiente comando:
ln -s /var/log/syslog /home/alumno/archivo-de-errores.
A continuación, podría venir información acerca de los bloques libres en el sistema de archivos,
por ejemplo, en la forma de un mapa de bits o una lista de apuntadores. Ésta podría ir seguida
de los nodos-i, un arreglo de estructuras de datos, uno por archivo, que indica todo acerca del
archivo. Después de eso podría venir el directorio raíz, que contiene la parte superior del árbol
del sistema de archivos. Por último, el resto del disco contiene todos los otros directorios y
archivos.
En un sistema Linux existe solamente una estructura de directorios sin importar de cuántos
dispositivos de almacenamiento físico se dispongan. Para para poder utilizar estos dispositivos
físicos, es necesario asociarlos a cada uno con un directorio del sistema. Este directorio recibe
el nombre de punto de montaje.
En cualquier sistema Linux el espacio utilizado por ciertos directorios (/home y /var, por nombrar
dos ejemplos) puede llegar a aumentar o variar constantemente. El crear una partición dedicada
para cada uno de ellos presenta dos ventajas al menos:
1. Limitar el espacio que pueden ocupar sus contenidos (de manera que su crecimiento no
perjudique el de otros directorios)
2. Impedir que una partición llena afecte críticamente el funcionamiento de todo el
sistema.
En cuanto a los sistemas de archivos, los más utilizados hoy en día son ext4 y xfs.
P á g i n a 3 | 15
• Tamaño máximo de archivos: 16 TiB
• Cantidad máxima de subdirectorios: 64.000
• Journaling: permite la recuperación de archivos que estaban siendo escritos en el
momento de un fallo del sistema. Si bien esta característica no elimina totalmente las
posibilidades de encontrar archivos corruptos, sí contribuye a la confiabilidad del
sistema de archivos y a la rapidez del chequeo de los mismos.
• Permite aumentar o disminuir el tamaño del sistema de archivos.
En Linux, la herramienta tradicional para administrar particiones basadas en MBR (presente por
defecto en computadoras fabricadas hasta 2009 aproximadamente) es fdisk, mientras que
desde 2010 en adelante (particiones basadas en GPT) se comenzó a utilizar también otra utilidad
llamada gdisk. Todas las operaciones relacionadas con la creación de particiones, sistemas de
archivos, y montaje de dispositivos deben ser realizadas por root o con un usuario con permisos
de superusuario.
El estándar GPT permite crear hasta 128 particiones primarias en un mismo disco, y permite
alcanzar tamaños de particiones no soportados por MBR (el cual soporta hasta 2 TB y hasta 4
particiones primarias – si se necesitan más particiones se puede reemplazar una de las primarias
por una extendida que pueda dividirse en múltiples particiones lógicas).
Para crear una partición con fdisk, utilizamos el comando del mismo nombre seguido por el
identificador de dispositivo en cuestión. Por ejemplo, para /dev/sdb:
fdisk /dev/sdb
En la pantalla siguiente se puede presionar la tecla m para ver el menú de ayuda como se
muestra en la Figura 3.
P á g i n a 4 | 15
Figura 3. Interface presentada por la aplicación fdisk.
Las operaciones más usuales que se pueden llevar a cabo a partir de este momento son las
siguientes:
• Al crear una nueva partición, se tiene que confirmar si se desea que sea una partición
primaria o una extendida. Si no hay creada ninguna partición todavía, se debería elegir
primaria. Para el comienzo de la partición es conveniente aceptar el valor ofrecido por
defecto por fdisk presionando Enter. Para la finalización de la misma es conveniente
especificar el tamaño deseado de la misma utilizando el signo + seguido de un número
y de la nomenclatura M, o G (por MB y GB, respectivamente).
• La primera partición de /dev/sdb recibirá el identificador /dev/sdb1, la segunda
/dev/sdb2, y así sucesivamente. Por defecto, al crear una nueva partición, se le asignará
el tipo Linux (83). Si se desea cambiarlo, se puede listar los tipos disponibles con L, elegir
el adecuado, y luego asignarlo con la opción t.
• Si en el dispositivo seleccionado existe más de una partición y se desea borrar una de
ellas, se tiene que especificar el número de la misma (a partir del orden en el que
aparecen al mostrar la tabla de particiones).
• Antes de confirmar cualquier cambio realizado, es importante revisar la tabla de
particiones, ya que una vez que se guarden los cambios y se salga del menú de fdisk es
P á g i n a 5 | 15
probable que los mismos sean irreversibles (lo cual es particularmente crítico si se ha
modificado una partición que contenía datos).
Una vez que se dispone de una nueva partición, es hora de crear un sistema de archivos sobre
la misma a fin de poder utilizarla. La utilidad por excelencia para realizar esta tarea es mkfs (entre
sus variantes podemos destacar mkfs.ext4 y mkfs.xfs para sistemas de archivos ext4 y xfs
respectivamente).
Entre las diversas opciones que se disponen en fdisk, -L en particular es de gran utilidad para
asignarle una etiqueta al sistema de archivos, mediante la cual se puede identificarlo más
fácilmente a la hora de montarlo y disponerlo finalmente para su uso. Para crear un sistema de
archivos del tipo ext4 en /dev/sdb1 y asignarle la etiqueta ALUMNO (el límite es de 16
caracteres) se utiliza el siguiente comando:
El archivo /etc/fstab contiene información sobre los sistemas de archivos que deben montarse
al inicio del sistema. Cada línea en el archivo posee los siguientes 6 campos:
Dicho esto, se puede montar /dev/sdb1 en /mnt/pruebas (este directorio debe existir) mediante
cualquiera de las tres maneras siguientes, agregando la línea correspondiente a /etc/fstab:
P á g i n a 7 | 15
se debe desmontar el sistema de archivos (si el mismo se encuentra montado) y utilizar el
comando fsck.
Suponga que se desea chequear el sistema de archivos en /dev/sdb1. Luego de desmontarlo
con umount /dev/sdb1, se ejecutará el siguiente comando:
fsck /dev/sdb1
Si se encontraran errores, se puede presionar la letra y para confirmar la reparación o n
para omitirla. Alternativamente se puede cancelar la operación con Ctrl + C y luego ejecutar
fsck con la opción -y (para confirmar las reparaciones automáticamente). Por otro lado, se
podría simular la reparación (a fin de ver qué es lo que haría) en vez de ejecutarla, utilizando
la opción -n de esta manera:
fsck -n /dev/sdb1
1.5. Archivado y compresión
En Linux, el archivado y compresión se realiza utilizando el comando tar (archivado) en
conjunto con gzip, bzip2, o xz (compresión). La posibilidad de disponer de un solo archivo
comprimido (a menudo llamado tarball) que contenga muchos otros (incluyendo
directorios) da la posibilidad de distribuirlo fácilmente mediante correo electrónico o
transferirlo a través de una red, con la ventaja adicional de que su tamaño es menor que la
suma de sus contenidos.
Para comprimir y empaquetar archivo1.txt, archivo2.txt, y archivo3.txt con gzip y tar en un
archivo de nombre tarcongzip.tar.gz dentro del subdirectorio resultados debemos hacer lo
siguiente:
tar -czvf resultados/tarcongzip.tar.gz archivo1.txt archivo2.txt archivo3.txt
Con tar y bzip2:
tar -cjvf resultados/tarconbzip2.tar.bz2 archivo1.txt archivo2.txt archivo3.txt
Finalmente, con tar y xz:
tar -cJvf resultados/tarconxz.tar.xz archivo1.txt archivo2.txt archivo3.txt
A continuación, se descomprimirá tarcongzip.tar.gz, tarconbzip2.tar.bz2, y tarconxz.tar.xz
en resultados/1, resultados/2, y resultados/3. La opción -C (mayúscula) permite indicar un
directorio destino para los archivos descomprimidos antes de realizar la operación
propiamente dicha:
tar -xzvf resultados/tarcongzip.tar.gz -C resultados/1
tar -xjvf resultados/tarconbzip2.tar.bz2 -C resultados/2
tar -xJvf resultados/tarconxz.tar.xz -C resultados/3
Algunos puntos importantes a tener en cuenta en todos los casos:
• La opción -c indica que se está creando un tarball, mientras que -x indica que se lo
está descomprimiendo.
• -v muestra la lista de archivos que fueron procesados.
• -f es la última opción y debe preceder al nombre del tarball a crear.
P á g i n a 8 | 15
• gzip es la herramienta más antigua de las tres y provee la menor compresión,
mientras que xz es la más nueva y presenta una mayor compresión, pero a costa de
un mayor uso de recursos del sistema al momento de comprimir. Finalmente, bzip2
es una especie de promedio entre las otras dos.
P á g i n a 9 | 15
Figura 5. Esquema de un RAID 1
2.3. RAID 1+0
También llamado RAID 10, este nivel de RAID es una especie de “combinación” de los dos
anteriores: consiste en un RAID 0 (stripe) de dos arreglos RAID 1 (mirror).
P á g i n a 10 | 15
2.4.2. RAID 1
El comando para crear un RAID 1 es esencialmente idéntico al del ejemplo anterior. La
única diferencia radica en el valor de la opción --level:
mdadm --create --verbose /dev/md0 --level=1 --raid-devices=2 /dev/sdb1 /dev/sdc1
2.4.3. RAID 1+0
En este caso se deberían emplear los cuatro discos:
mdadm --create --verbose /dev/md0 --level=10 --raid-devices=4 /dev/sd[b-e]1
En el ejemplo anterior se puede observar que mdadm admite el uso de una expresión
regular para especificar los discos que se utilizarán sin necesidad de listarlos uno a uno.
2.4.4. Crear un sistema de archivos y montar el dispositivo
Luego de haber creado el RAID (sea del nivel que fuere), es momento de crear un sistema
de archivos sobre el mismo y de montarlo para poder utilizarlo. Sin embargo, antes de esto
se debe agregar el detalle del arreglo en el archivo de configuración
/etc/mdadm/mdadm.conf como primera medida para lograr persistencia. De otra forma, es
posible que cuando el sistema reinicie no lo reconozca con el nombre que se lo creó.
mdadm --detail --scan >> /etc/mdadm/mdadm.conf
Por ejemplo, sí se elige ext4 como sistema de archivos y /mnt/miraid como punto de
montaje, se ejecuta lo siguiente:
mkfs.ext4 /dev/md0
mount -t ext4 /dev/md0 /mnt/miraid
El último paso para lograr persistencia consiste agregar la línea necesaria en /etc/fstab y
actualizar el disco RAM inicial:
echo "/dev/md0 /mnt/miraid ext4 defaults 0 0" >> /etc/fstab
update-initramfs -u
2.5. Administración de RAID
En esta sección se explicará cómo monitorear el estado de creación del arreglo, cómo
agregar un disco extra al mismo (para tener listo en el caso de una falla), y cómo simular
una falla. Finalmente, se explicará cómo “reciclar” uno o más discos que hayan formado
parte de un arreglo previamente a fin de usarlos en otro.
Una vez que se ejecuta el comando para crear un arreglo, se puede monitorear el estado de
la creación mediante cualquiera de los siguientes comandos:
cat /proc/mdstat
mdadm --detail /dev/md0
P á g i n a 11 | 15
Figura 7. Ejemplo de la salida de los comandos cat /proc/mdstat y mdadm –detail
/dev/md0
Para simular una falla del disco /dev/sdc1, se utiliza el siguiente comando, prestando
atención a la opción --fail:
mdadm /dev/md0 --fail /dev/sdc1
Una vez que un disco falla se debe reemplazarlo. A continuación, se muestra los comandos
necesarios para agregar la partición /dev/sdg1 al arreglo:
mdadm /dev/md0 --add /dev/sdg1
mdadm --assemble /dev/md0
update-initramfs -u
Para reciclar un disco que fue usado en un arreglo se hace lo siguiente:
mdadm –misc --zero-superblock /dev/sdc1
dd if=/dev/zero of=/dev/sdc1 bs=1M llena al disco con ceros en bloques de 1M
update-initramfs -u
P á g i n a 12 | 15
3.1. Particionado tradicional vs. LVM
Las distribuciones más utilizadas realizan hoy en día la instalación sobre volúmenes lógicos
por defecto.
Para comprender este cambio, se debe recordar que al menos en MBR, hay una limitación
en el número de
particiones primarias por disco. En el caso de que necesitemos redimensionar una de ellas,
se requiere mucho cuidado. Si bien se puede achicar una partición para darle espacio a otra
que haya quedado pequeña, este procedimiento causa los siguientes inconvenientes:
• Dos (o más) discos rígidos o particiones sobre los que se crearán los volúmenes
físicos (PVs, de Physical Volume). Es importante aclarar que podemos crear cada
uno de ellos sobre el disco entero directamente o particionarlo primero. Si elegimos
la segunda opción, debemos indicar que la partición sea del tipo 8e (Linux LVM).
• Un grupo de volúmenes (VGs, de Volume Group) se crea a partir de uno o más
volúmenes físicos. Por simplicidad, podemos considerar a un grupo de volúmenes
como una unidad de almacenamiento (similar a un disco entero en el particionado
tradicional).
• En cada VG podemos crear varios volúmenes lógicos, los cuales pueden
considerarse como análogos de las particiones tradicionales.
P á g i n a 13 | 15
Para las siguientes secciones se considerará como disponibles los dispositivos /dev/sdb,
/dev/sdc y /dev/sdd.
3.3. Creación de volúmenes lógicos
Para crear volúmenes físicos sobre los discos disponibles, se debe hacer lo siguiente:
pvcreate /dev/sdb
pvcreate /dev/sdc
pvcreate /dev/sdd
Para mostrar los atributos o ver información sobre un volumen físico se puede utilizar los
comandos pvdisplay y pvs, respectivamente, seguidos de la ruta del PV (pvdisplay /dev/sdb
o pvs /dev/sdb, por ejemplo). Si se omite esta última se mostrará la lista de todos los
volúmenes físicos que existen en el sistema.
Ahora es momento de crear el grupo de volúmenes (en este ejemplo se lo llamará vgcurso).
Solamente se utilizará /dev/sdb y /dev/sdc por ahora para mostrar más adelante lo fácil
que es extender un VG agregando un dispositivo adicional (/dev/sdd). Luego se utilizará
vgs y vgdisplay para ver los detalles del grupo de volúmenes que se procedió a crear.
vgcreate vgcurso /dev/sdb /dev/sdc
Para crear un primer LV de tamaño de 600 MB llamado lvadmin sobre vgcurso, se debe
hacer lo siguiente:
lvcreate -n lvadmin -L 600M vgcurso (si se omite -n lvadmin, el nombre del LV será asignado
automáticamente por lvcreate)
En este punto ya se puede crear un sistema de archivos sobre lvadmin y montarlo en algún
directorio creado previamente para tal fin. Se utilizará /mnt/cursoadmin y se utilizará la
ruta completa al dispositivo:
mkfs.ext4 /dev/vgcurso/lvadmin
mount /dev/vgcurso/lvadmin /mnt/cursoadmin
P á g i n a 14 | 15
Antes de proseguir, habría que asegurarse de que el dispositivo fue correctamente montado
utilizando cualquiera de los siguientes comandos:
mount | grep lvadmin
df -h /mnt/cursoadmin
3.4. Operaciones
Para agregar un PV a un VG, se utilizará el comando vgextend seguido del nombre del VG y
finalmente del PV:
vgextend vgcurso /dev/sdd
Para achicar un LV existente, se debe prestar especial cuidado ya que, si se reduce el tamaño
por debajo del espacio utilizado actualmente, se perderá datos irreversiblemente. Habiendo
tenido eso en cuenta, se puede disminuir el tamaño de lvadmin a 450 MB:
lvresize --resizefs --size 450M vgcurso/lvadmin
La opción --resizefs redimensiona el volumen lógico y el sistema de archivos asociado en un
solo paso. Como el dispositivo está montado actualmente pedirá confirmación para
desmontarlo a fin de proceder con la acción que se le indicó.
Si no se hubiera creado previamente un sistema de archivos se podría utilizar
simplemente el siguiente comando para modificar el tamaño de lvadmin.
lvreduce -L 450M vgcurso/lvadmin
A continuación, se creará un segundo LV -al cual se llamará lvredes- y se le asignará todo el
espacio disponible en vgcurso. El comando a emplear es casi idéntico al que se utilizó en el
post anterior, pero el argumento 100%FREE le indicará a lvcreate que utilice todo el espacio
disponible para el nuevo volúmen lógico.
lvcreate -n lvredes -l 100%FREE vgcurso
Otros comandos útiles son pvremove, vgremove, y lvremove (seguidas de la ruta al PV, VG,
y LV, respectivamente) se utilizan para quitar el dispositivo de la estructura de LVM. Como
es de esperarse, esto NO elimina el dispositivo subyacente – solamente remueve la etiqueta
que lo identifica como volumen físico, grupo de volúmenes, o volumen lógico.
vgrename y lvrename (seguidas del VG y de la combinación VG/LV actuales,
respectivamente) permiten renombrar grupos de volúmenes y volúmenes lógicos. Por
ejemplo, para renombrar vgcurso como vgcarreralinux y lvadmin como lvadministrador
debemos hacer
vgrename vgcurso vgcarreralinux
lvrename vgcarreralinux lvadmin lvadministrador
P á g i n a 15 | 15