(MIA) Proyecto1
(MIA) Proyecto1
(MIA) Proyecto1
FACULTAD DE INGENIERÍA
ESCUELA DE CIENCIAS Y SISTEMAS
MANEJO E IMPLEMENTACIÓN DE ARCHIVOS A-, A+
Ing. Oscar Paz Campos Aux. Luis Vargas
Ing. Alvaro Díaz Aux. Luis Pablo Hernández
Objetivos
● Aprender a administrar archivos y escribir estructuras en Go
● Comprender el sistema de archivos LWH
● Aplicar el formateo rápido y completo en una partición
● Crear una aplicación de comandos
● Aplicar la teoría de particiones
● Utilizar GraphViz para mostrar reportes
● Restringir y administrar el acceso a los archivos y carpetas en LWH por medio de usuarios
● Administrar los usuarios y permisos por medio de grupos
Comandos
Si se utiliza un parámetro que no está especificado en este documento, debe mostrar un mensaje
de error. Se utilizarán espacios en blanco para separar cada parámetro. Los parámetros pueden
venir en cualquier orden.
Si un comando necesita más de una línea se utilizará \* al final de la línea para indicar que continúa
en la siguiente línea. También se podrán ejecutar archivos de scripts con estos comandos a
través del comando exec, que se describe más adelante. Se podrá comentar cada comando Los
comentarios de estos scripts empezarán con #, dichos comandos son únicamente de línea. Estos
comandos se explicarán en detalle a continuación.
Exec
El programa podrá ejecutar scripts con el comando exec. Debe mostrar el contenido de la línea
que está leyendo y su resultado. También debe mostrar los comentarios del script.
Ejemplo:
#ejecuta el script
exec –path->/home/Desktop/calificacion.mia
Pause
Este comando será solo la palabra “pause” no tiene atributos al ingresar este comando se pondrá
en pausa solicitando que apache cualquier tecla para continuar. Este comando NO detiene la
ejecución de un archivo solo queda a la espera de presionar una tecla para continuar su ejecución.
Administración de disco
Para la administración del disco se contará con una serie de comandos con los cuales se podrán
modificar cualquier característica lógica del sistema del disco, con estos comandos se realizará la
creación de archivos que simularán ser un disco duro, en dicho archivo se podrá dar formato con el
sistema de archivos. Estos comandos están disponibles desde que se inicia el programa. Estos
comandos son:
MKDISK
Este comando creará un archivo binario que simulará un disco duro, estos archivos binarios
tendrán la extensión dsk y su contenido al inicio será \0. Deberá ocupar físicamente el tamaño
indicado por los parámetros, (no importa que el sistema operativo no muestre el tamaño exacto).
Recibirá el name del archivo que simulará el disco duro y tendrá los siguientes parámetros:
Ejemplo1: /home/user/documents/
Ejemplos:
Ejemplos:
#Eliminar Disco_4.dsk
rmDisk -path->"/home/mis discos/Disco_4.dsk"
FDISK
Este comando administra las particiones en el archivo que representa al disco duro. Se utilizará el
primer ajuste para buscar espacio dentro del disco y crear la partición.
IMPORTANTE: Este primer ajuste solo es para buscar espacio para crear la partición, es diferente
del ajuste que utilizará cada partición para crear los archivos que se utilizará más adelante en el
proyecto.
Ejemplo1: /home/user/documents/
Ejemplos2: “/home/user/documents/juan gonzalez/Mis
Discos/”
-TYPE Opcional Indicará que tipo de partición se creará. Ya que es
opcional, se tomará como primaria en caso de que no se
indique. Podrá tener los siguientes valores:
P: en este caso se creará una partición primaria.
E: en este caso se creará una partición extendida.
L: Con este valor se creará una partición lógica.
Ejemplos:
#Crear una Particion primaria llamada Particion1 de 72kb
#Con el peor ajuste y con asignacion Indexada en el Disco1.dsk
Fdisk -sizE->72 -path->/home/Disco1.dsk -name->Particion1
#Crea una partición extendida dentro de Disco2 de 56 kb
#Tiene el peor ajuste y asignación Enlazada
fdisk -TyPE->E -path->/home/Disco2.dsk -Unit->K \*
-name->Particion2 -sizE->56
#Crea una partición lógica con el mejor ajuste, llamada Particion3,y
#de 1 Mb en el Disco3 y asignación contigua
fdisk -sizE->1 -tipo->L -unit->M -fit->BF \*
-path->/mis discos/Disco3.dsk -name->Particion3
#Intenta crear una partición extendida dentro de Disco2 de 200 kb
#Debería mostrar error ya que ya existe una partición extendida
#dentro de Disco2
fdisk -tipo->E -path->/home/Disco2.dsk -name->Part3 \*
-Unit->K -sizE->200
#Elimina de forma rápida una partición llamada Particion1
fdisk -delete->fast -name->"Particion1" -path->"/home/Disco1.dsk"
#Elimina de forma completa una partición llamada Particion1
fdisk -name->"Particion1" -delete->full -path->"/home/Disco1.dsk"
#Agrega 1 Mb a la partición Particion4 del Disco4.dsk
#Se debe validar que haya espacio libre después de la partición
fdisk -add->1 -unit->M -path->"/home/mis discos/Disco4.dsk" \*
-name->"Particion 4"
MOUNT
Este comando montará una partición del disco en el sistema. Cada partición se identificará
por un id que tendrá la siguiente estructura: VD - LETRA - NUMERO. Por ejemplo: vda1, vda2, vdb1,
vdc1… La letra será la misma para particiones en el mismo disco y el número diferente para
particiones en el mismo disco.
Ejemplo:
UNMOUNT
Desmonta una partición del sistema. Se utilizará el id que se le asignó a la partición al momento
de cargarla.
Se debe poder desmontar por listado de particiones. Recibirá los siguientes parámetros.
Ejemplos:
Estructuras Discos
Los discos serán archivos binarios que tendrán información del MBR, y espacio con particiones o
bien, espacio sin utilizar. La siguiente figura es un ejemplo de los bloques en un disco con
particiones en el que ya se ha eliminado una partición:
Master Boot Record
Cuando se crea una partición debe utilizarse el primer ajuste para crearla. En la figura anterior
debería utilizarse el primer bloque libre para crear una nueva partición. El MBR tendrá los
siguientes campos:
Para crear el archivo del disco se recomienda utilizar un char[1024] como buffer para crear el
archivo, si se utiliza un char[1] normalmente se tarda demasiado al momento de crear
el archivo.
SISTEMA DE ARCHIVOS LWH
MKFS
Este comando realiza un formateo completo de la partición, se dará formato con LWH. También creará un
archivo en la raíz llamado users.txt que tendrá los usuarios y contraseñas del sistema de archivos.
La estructura de este archivo se explicará más adelante.
Ejemplos:
#Realiza un formateo rápido con LWH de la "Particion 1" del
#Disco1.dsk
mkfs -id->vdb1
1, G, root \n
1, U, root , root , 20200000\n
Este archivo se podrá modificar con comandos que se explicarán más
adelante.
LOGIN:
Este comando se utiliza para iniciar sesión en el sistema. Se buscará el usuario únicamente en el archivo
users.txt de la partición a la que se hace referencia. No se puede iniciar otra sesión sin haber hecho un
logout antes, debe mostrar un mensaje de error indicando que debe cerrar sesión antes.
Ejemplos:
#Se loguea en el sistema como usuario root
login &usr->root &pwd->201020576 &id->vda1
LOGOUT:
Este comando se utiliza para cerrar sesión. Debe haber una sesión activa anteriormente para poder
utilizarlo, si no, debe mostrar un mensaje de error. Este comando no recibe parámetros.
Ejemplo:
#Termina la sesión del usuario
Logout
Todos los siguientes comandos que se explicarán de aquí en adelante, necesitan que exista una sesión en el
sistema. Si no, debe mostrar un mensaje de error indicando que necesita iniciar sesión.
mkgrp
Este comando creará un grupo para los usuarios de la partición y se guardará en el archivo users.txt de la
partición, este comando solo lo puede utilizar el usuario root. Si otro usuario lo intenta ejecutar, deberá
mostrar un mensaje de error, si el grupo a ingresar ya existe deberá mostrar un mensaje de error. Recibirá
los siguientes parámetros:
Ejemplo:
#Crea el grupo usuarios en la partición vda1 mkgrp -id->vda1 -nombre->"usuarios"
#Debe mostrar mensaje de error ya que el grupo ya existe mkgrp -id->vda1 -nombre->"usuarios"
rmgrp
Este comando eliminará un grupo para los usuarios de la partición. Solo lo puede utilizar el usuario root, si
lo utiliza alguien más debe mostrar un error. Recibirá los siguientes parámetros:
Ejemplo:
#Elimina el grupo de usuarios en la partición vda1
rmgrp -id->vda1 -nombre->"usuarios"
#Debe mostrar mensaje de error ya que el grupo no existe porque ya fue eliminado
rmgrp -id->vda1 -nombre->"usuarios"
mkusr
Este comando crea un usuario en la partición. Solo lo puede ejecutar el usuario root, si lo utiliza otro
usuario deberá mostrar un error. Recibirá los siguientes parámetros:
Ejemplo:
#Crea el grupo usuarios en la partición vda1
Mkusr -id->vda1 -nombre->"user1" –grp->usuarios –pwd->usuario
rmusr
Este comando elimina un usuario en la partición. Solo lo puede ejecutar el usuario root, si lo utiliza otro
usuario deberá mostrar un error. Recibirá los siguientes parámetros:
Ejemplo:
#Elimina el usuario user1 de la partición
rmusr -id->vda1 -usr->user
Chmod
Para una buena administración de sistemas no se puede olvidar la sección de seguridad del mismo, para
esto cambiará los permisos de uno o varios archivos o carpetas. Lo podrá utilizar el usuario root en todos
los archivos o carpetas y también lo podrán utilizar otros usuarios, pero solo sobre sus propios archivos.
Recibirá los siguientes parámetros:
mkfile
Este comando permitirá crear un archivo, el propietario será el usuario que actualmente ha iniciado sesión.
Tendrá los permisos 664. El usuario deberá tener el permiso de escritura en la carpeta padre, si no debe
mostrar un error. Tendrá los siguientes parámetros:
Ejemplos:
#Crea el archivo a.txt
#Si no existen las carpetas home user o docs se crean
#El tamaño del archivo es de 15 bytes
#El contenido sería: 012345678901234
mkFile -SIZE->15 -id->vdb1 -PatH->"/home/user/docs/a.txt" -p
cat
Este comando permitirá mostrar el contenido del archivo en un archivo de texto, si el usuario
que actualmente está logueado tiene acceso al permiso de lectura. Tendrá los siguientes parámetros:
Ejemplos:
#Lee el archivo a.txt En la terminal debería mostrar el contenido, en #este ejemplo 01234567890123
Cat -file1->"/home/user/docs/a.txt" -Id->vdb1
#enlazara los archivos a.txt (datos archivo a) b.txt (01234567890123) #c.txt (0123) y debería mostrar el
contenido siguiente, cada archivo #va separado por salto de línea
# datos archivo a
# 01234567890123
# 0123
Cat -file1->"/home/a.txt" -Id->vdb1 -file2->"/home/b.txt" \ -file3->"/home/c.txt"
rm
Este comando permitirá eliminar un archivo o carpeta y todo su contenido, si el usuario que actualmente
está logueado tiene acceso al permiso de escritura sobre el archivo y en el caso de carpetas, eliminará todos
los archivos o subcarpetas en los que el usuario tenga permiso de escritura. Si no pudo eliminar un archivo
o subcarpeta dentro de la carpeta por permisos, no deberá eliminar la(s) carpetas padre. Tendrá
los
siguientes parámetros:
EDIT
Este comando permitirá editar el contenido de un archivo para que ocupe un tamaño
específico, o bien, para asignarle otro contenido. Funcionará si el usuario que actualmente
esta logueado tiene acceso al permiso de lectura y escritura sobre el archivo, si no debe
mostrar error. Tendrá los siguientes parámetros:
(*) Se deberá ingresar por lo menos uno de los dos parámetros (size o cont). Si no hay ninguno de los dos,
debe mostrar un mensaje de error.
Ejemplos:
#Modifica el archivo a.txt
#El tamaño del archivo es de 22 bytes
#El contenido sería: abcdefghijklmnopqrstu
Edit -SIZE->22 -id->vdb1 -PatH->"/home/user/docs/a.txt”
#Modifica el archivo b.txt
#El contenido del archivo será el mismo que el archivo c.txt
#que se encuentra en el disco duro de la computadora.
edit -id->vda1 -path->"/home/user/docs/b.txt" -cont ->"/home/Documents/c.txt"
#Modifica nuevamente el archivo b.txt
edit -id->vda1 -path->"/home/user/docs/b.txt" -cont ->"/home/Documents/d.txt"
Ren
Este comando permitirá cambiar el nombre de un archivo o carpeta, si el usuario actualmente logueado
tiene permiso de escritura sobre el archivo o carpeta. Tendrá los siguientes parámetros:
Parámetro Categoría Descripción
-id Obligatorio Especifica el id de la partición en la que se renombrará el
archivo o carpeta. Si no existe debe mostrar error.
-path Obligatorio Este parámetro será la ruta del archivo o carpeta al
que se le cambiará el nombre. Deberá encerrarse
entre comillas. Si no existe el archivo o carpeta o no
tiene permisos de escritura sobre la carpeta o
archivo, debe mostrarse un mensaje de error.
-name Obligatorio Especificará el nuevo nombre del archivo, debe
verificar que no exista un archivo con el mismo
nombre, de ser así debe mostrar un mensaje de error.
Deberá encerrarse entre comillas.
Ejemplos:
#Cambia el nombre del archivo a.txt a b1.txt
ren -PatH->"/home/user/docs/a.txt" -Id->vdb1 -nombre->"b1.txt"
#Debera mostrar error ya que el archivo b1.txt ya existe
ren -PatH->"/home/user/docs/c.txt" -Id->vdb1 -nombre->"b1.txt"
Mkdir
Este comando es similar a mkfile, pero no crea archivos, sino carpetas. El propietario será el usuario
que actualmente ha iniciado sesión. Tendrá los permisos 664. El usuario deberá tener el permiso de
escritura en la carpeta padre, si no debe mostrar un error. Tendrá los siguientes parámetros:
Ejemplos:
#Crea la carpeta usac
#Si no existen las carpetas home user o docs se crean
Mkdir -P -id->vda1 -path->"/home/user/docs/usac"
Ejemplos:
#/
#|_home #664
# |_user #664
# | |_documents #664
# | |_a.txt #664
# | |_b.txt #224
# |_images #664
#Copia documents a images
cp -id->vda2 -Path->"/home/user/documents" -dest->"/home/images"
mv
Este comando moverá un archivo o carpeta y todo su contenido hacia otro destino. Si el origen y destino
están dentro de la misma partición, solo cambiará las referencias, para que ya no tenga el padre origen sino,
el padre destino, y que los padres de la carpeta o archivo ya no tengan como hijo a la carpeta o archivo que
se movió. Solo se deberán verificar los permisos de escritura sobre la carpeta o archivo origen.
Si el origen y destino están en una partición diferente, funcionará como copiar y después eliminar.
El usuario deberá tener el permiso de escritura en la carpeta padre destino, si no debe mostrar un error.
Ejemplo:
#/
#|_home #664
# |_user #664
# | |_documents #664
# | |_a.txt #664
# | |_b.txt #224
# |_images #664
find
Este comando permitirá realizar una búsqueda por el nombre del archivo o carpeta. Permitirá los
siguientes caracteres especiales:
Carácter Descripción
? Un solo carácter
* Uno o más
El resultado debe mostrarse en forma de árbol, mostrando todos los archivos encontrados. find *
mostrará toda la estructura del sistema de archivos a partir de la carpeta indicada ya que no hay filtro.
Ejemplos:
find -id->vda1 -path->"/" -nombre->*
#Arbol actual
#/
#|_home #664
# |_user #664
# | |_a.txt #664
# | |_b.txt #420
# |_images #664
# |_a.jpg #664
# |_abcd.jpg #664
#Busca los archivos que tengan una letra como nombre
#y cualquier extensión
find -id->vda1 -path->"/home" -nombre->"?.*"
Chown
Cambiará el propietario de uno o varios archivos o carpetas. Lo podrá utilizar el usuario root en todos los
archivos o carpetas y también lo podrán utilizar otros usuarios, pero solo sobre sus propios archivos.
Recibirá los siguientes parámetros:
Chgrp
Cambiará el grupo al que pertenece el usuario. Únicamente lo podrá utilizar el usuario root.
Recibirá los siguientes parámetros:
Parámetro Categoría Descripción
-usr Obligatorio Especifica el nombre del usuario al que se le
cambiará de
grupo. Si no existe debe mostrar un error.
-grp Obligatorio Contendrá el nombre del nuevo grupo al que
pertenece
El usuario. Si no existe o está eliminado debe
mostrar un
error.
Ejemplos:
#Cambia el grupo del user2
chgrp -usr->user2 -grp->grupo1
Es un sistema de archivo denominado híbrido ya que tiene una estructura y funcionamiento tomado de los
sistemas de archivos Windows y GNU/Linux. Que permitirán el manejo de diferentes operaciones sobre
archivos y directorios, formas de acceso a archivos, y un log o bitácora para la recuperación de la
información del sistema. Utilizando como un disco duro virtual un Archivo Binario.
A continuación se explicarán las estructuras del sistema de archivos LWH: Se deberán implementar las
estructuras como se especifican a continuación. La estructura en bloques es la siguiente:
1. SUPER BOOT
1 = Ocupado
0 = Libre
1.2 ÁRBOL VIRTUAL DE DIRECTORIO
Simula un árbol virtual que permitirá el manejo de directorios la estructura es la siguiente
Una estructura en el árbol de directorio tiene los siguientes datos. (avd = árbol virtual de
directorio).
1 = Ocupado
0 = Libre
2.2 DETALLE DE DIRECTORIO
Contiene las estructuras para el manejo de archivos de directorio, donde los archivos
son manejados por la tabla de i-nodos.
Una estructura en el detalle de directorio tiene los siguientes datos. (dd = detalle de directorio).
Este detalle de directorio podrá manejar un máximo de 5 archivos.
Una estructura de i-nodo tiene los siguientes datos (i = i-nodo). La estructura de inodo puede
apuntar como máximo a 4 bloques de datos si el archivo es mayor o crece más que eso se usará el
i_ap_indirecto para apuntar a otro i-nodo.
1 = Ocupado
0 = Libre
Una estructura de un bloque de datos (bd = bloque de dato) es la siguiente que podrá almacenar
como máximo 25 caracteres.
5. LOG (BITÁCORA)
La bitácora maneja todas las transacciones que realiza el sistema de archivos (respaldo para
recuperación), la cual tiene maneja la siguiente información.
La recuperación del sistema se hará por medio de boot con él log. Para esto la
aplicación debe de tener las siguientes opciones:
Simulate System loss
Este formatea los siguientes bloques de datos para simular un fallo en el disco (una partición en
especifica), una inconsistencia o pérdida de información. Se deberán limpiar los siguientes bloques
con el carácter /0.
1. Super boot
2. Bloque de bitmap de árbol virtual de directorio
3. Bloque de árbol virtual de directorio
4. Bloque de bitmap de detalle de directorio
5. Bloque de detalle de directorio
6. Bloque de bitmap de tabla de i-nodo
7. Bloque de tabla de i-nodo
8. Bloque de bitmap de bloque de datos
9. Bloque de datos.
Este Recuperará los siguientes bloques de datos para simular una recuperación en el disco (una
partición en especifica), una inconsistencia o pérdida de información solucionada. Se deberán
recuperar los siguientes bloques con la información que se encuentra en el Journaling y en el SB
copy.
Para verificar los cambios se deben mostrar los reportes siguientes después de simular la
perdida y por segunda vez al recuperar el sistema.
1. bitmap de árbol virtual de directorio
2. bitmap de Bloques
3. Inodos
4. Bloque de datos
5. Tree_complete
6. Tree_directorio
2.REPORTES
Se deberán generar los reportes con el comando rep. Este comando no necesita tener una sesión activa. Se
generarán en graphviz. Se puede utilizar html dentro de los reportes si el estudiante lo considera necesario.
Deberá mostrarlos de forma similar a los ejemplos mostrados.
IMPORTANTE: Esta parte es obligatoria para tener derecho a la calificación de los aspectos que muestre el
reporte. Si falta alguno de los reportes no se calificará. Por ejemplo si no hace reporte de inodos, no tendrá
derecho a la calificación de todos los aspectos relativos a los inodos, ya que no se puede comprobar
que el estudiante haya implementado dicha funcionalidad.
Rep
Recibirá el nombre del reporte que se desea y lo generará con graphviz en una carpeta existente.
Ejemplos
rep -id=vda2 -path="/home/user/reports/reporte 2.pdf" -nombre=bm_arbdir –ruta="/home/mis documentos"
bm_detdir
bm_inode
bm_block
Bitacora
Se debe escribir en un archivo de texto toda la información que esta almacenada en la
bitácora, el formato SUGERIDO:
Directorio
Para verificar si la estructura lógica del sistema es la correcta, se debe de realizar una gráfica en
Graphviz mostrando todos los directorios y subdirectorios mostrando su orden jerárquico similar
a la siguiente:
5.3 REPORTE GRAFICO DE UN ARCHIVO Tree_File
Se debe se debe de realizar una gráfica en Graphviz mostrando la ubicación de un archivo
(carpeta/s) y su contenido (carácter/es). Se debe de elegir el archivo deseado por medio de un
menú desde consola y la gráfica debe contener una estructura similar a la
siguiente:[arreglo](Solo incluir el nombre del Archivo y sus Bloques de Informacion Asociados)
Tree_complete
Se debe mostrar un árbol completo con todas las carpetas que se encuentran en el
sistema de archivos, y los archivos que pertenecen a todo el sistema, en las carpetas
correspondientes.
5.5 REPORTE GRÁFICO DE LOS ARCHIVOS DE UN DIRECTORIO
Tree_directorio
Disk
Este reporte mostrará la estructura de las particiones (mostrar nombre de la partición y el tipo)
y el mbr del disco.
LS
Este reporte mostrará la información de los archivos y carpetas con permisos, fecha de
modificación, tipo, fecha de creación, reporte realizado con Consola
Sb
Muestra toda la información del superbloque en una tabla
Limitaciones:
Para calcular el Tamaño total del sistema y Numero de Estructuras deben utilizar la siguiente Formula:
(27+TamArbolVirtual+TamDetalleDirectorio+(5*TamInodo+(20*TamBloque)+Bitacora))
En Base Al Numero de Estructuras deben de realizar todas las actividades relacionadas con el
manejo del Sistema de Archivos.(Se Explicara en los Laboratorios con mejor Detalle)
ESPECIFICACIONES
- El lenguaje a utilizar es Go
- El sistema operativo a utilizar es cualquier distribución de GNU/Linux (instalación física, solo se
calificará la práctica sobre una distribución de GNU/Linux).
- El manual técnico deberá incluir una especificación de lo que realiza cada método de la
aplicación y debe coincidir con el código del proyecto entregado (esto es solo parte del
contenido).
- Manual de usuario.
- El proyecto se realizará de forma individual.
- Los Reportes Gráficos son OBLIGATORIOS para poder tener derecho a calificación, ya que
es el único medio para verificar el funcionamiento del sistema de archivos LWH.
- Si no ejecuta con comando exec NO SE CALIFICARÁ
- Se verificarán copias de código, cualquier copia del Proyecto será sancionada con la pérdida
automática del Laboratorio y la sanción correspondiente por parte de la Escuela de Sistemas.
ENTREGA Y CALIFICACION
- Fecha de entrega de Proyecto: 13 de septiembre de 2020.
- Entregable: Link del repositorio de github, RAR/ZIP del proyecto con el formato
- [MIA]Proyecto1_<carnet>, manual de usuario, manual técnico.
Se requiere que tengan como mínimo lo siguiente para poder realizar la calificación:
-Comandos(Exec)
-Reportes
-Particiones (primarias, extendidas)
-Mount y Unmount
-Crear carpetas y archivos
-Pausa
-Perdida y Recuperacion