Nuevo 06/09/2006

1. En C se define el valor 0 para expresar falso, y cualquier valor distinto de 0 para verdadero.

En el código fdisk.c la variable OK está definida en 0. Esto puede parecer contradictorio, sin embargo esto ha sido decisión del programador que escribió fdisk.c. Modificar dicha variable podría resultar peligroso si no se analiza cada caso en que se usa. Por este motivo se insertó otra función llamada chk2_table() en lugar de chk_table() (que es la que normalmente se compara con OK) para el caso cuando el archivo que se pasa como argumento por la línea de comandos no sea un dispositivo sino un archivo regular.

Sin embargo la función chk2_table() se hizo que devolviera 1, en el spuesto de que OK valdría también 1. Este es el motivo por el que no deja de grabar. Para solucionar el problema simplemente modifiquen chk2_table()

     int chk2_table()
    {   return 0;
    }

Esto es suficiente.

Modificar OK o cualquier otra variable podría significar que funciona para mi archivo, pero no funcionaría para mi disquete o disco duro (real), por ejemplo. Los cambios que se hacen deben ser bien pensados, no solo por que funcionan para lo que deseo significa que mi programa esté correcto.

Observaciones 05/09/2006

1. Para copiar el archivo mbr a su disquete utilice el botón secundario (derecho) y en el menú contextual que aparece elija Guardar destino como, una vez grabado en el disquete verifique el tamaño, debe ser de 512 bytes.

2.  Cuando en Unix (Minix, Linux) se graba un archivo texto, el cambio de línea se graba con 2 caracteres. Mientras que en Windows (DOS,etc) se graba con un solo caracter. Entonces si usted graba en un disquete los archivos desde la página Web para recuperarlos desde Minix deberá emplear la utilidad mtools de la siguinete forma:

     $mtools mcopy -a a:vdisk.c  vdisk.c
     $mtools mcopy -a a:Makefile  Makefile
     $mtools mcopy -a a:fdisk.c  fdisk.c

Para grabarlo en el directorio de trabajo. Esto tambien es necesario cuando se quiere hacer el trayecto inverso, copiar un archivo de Minix a Wondows. Sin embargo el archivo mbr debe ser recuperado en Minix como archivo binario. es decir no debemos ponerle el -a:

          $mtools mcopy a:mbr  mbr

3. Para el comando
     
     $make fdisk

Las líneas que se imprimieron después (vea abajo, en esta misma página), es el resultado del comando. No se deben escribir.

4.En la línea  (en esta página)

   
"Y cuyo primer sector será el archivo mbr"  debería decir  
    "
Y cuyo primer sector será el contenido del archivo mbr"
                 
5. La primera pregunta de la tarea queda eliminada. De hecho con la modificación que usted debe hacer a fdisk.c será suficiente para hacer la primera parte. Una sugerencia es: incrementar una opción al programa (vea el help), x por ejemplo. Y una pregunta adicional al usuario debe permitir identificar el número de partición en que se encuentra la partición extendida. Fdisk debe verificar que esta partición sea extendida, avanzar hasta el sector donde inicia y mostrar la tabla, por supuesto, si no hay tabla, mostrará ceros. Pero nuevamente se debería poder volver a usar fdisk para crear particiones y de esta manera ir encadenando las unidades lógicas.

6. Se ha impreso tanto la página como los listados de los programas en la fotocopiadora.



Laboratorio 1

Antecedentes

El objetivo del presente laboratorio es manejar de manera "cruda" la tabla de particiones de un disco duro. Cuando decimos de manera "cruda" nos referimos al hecho de acceder a la información tal como está en el disco duro sin ninguna interfaz que la interprete. Llevar a cabo una practica de laboratorio de esta naturaleza necesitaría que cada alumno tuviera un disco en el cual pudiera practicar.

Disco virtual

Una alternativa es crear un disco virtual. Según el diccionario de la Real Academía Española el significado de virtual es: Que tiene existencia aparente y no real. Y es precisamente lo que pretendemos hacer, crearemos un archivo que simule nuestro disco duro. Claro está el disco simulado será muy pequeño, apenas 240 Mb, pero será lo suficiente para nuestra práctica de laboratorio.

Para poder llevar a cabo esta tarea necesitamos una tabla de particiones, que para este caso nosotros se la proporcionaremos en el siguiente archivo mbr. El programa vdisk.c es un pequeño código en Lenguaje C que genera un archivo llamado hd0, donde el tamaño debe especificarse al invocar el programa y cuyo primer sector es el archivo mbr. Para compilar este programa desde la línea de comandos debe escribir:

            $cc -o vdisk vdisk.c

Para ejecutarlo deberá indicarle el tamaño en sectores y el nombre del archivo que contiene la tabla de particiones.

            $./vdisk 415380 mbr

Donde 415380 indica el tamaño en sectores del disco virtual. Y cuyo primer sector será el archivo mbr. Está demás mencionar que tanto vdisk como mbr deben estar en el mismo directorio.

El programa particionador

Ahora necesitamos un programa que tome este archivo como si fuera un disco y que nos muestre la tabla de particiones contenida en ella, y como si fuera poco, que nos permita modificarla también.  Entre las utilidades de MINIX que maneja tabla de particiones se ncuentra el programa fdisk.c que tiene una interfaz sencilla, código pequeño y es bastante modular. A este programa se le ha hecho algunas pequeñas modificaciones para que pueda reconocer nuestro disco virtual (y cualquier otro, porsupuesto) como un disco físico. Este programa debe compilarlo con la utilidad make que necesita el siguiente archivo Makefile.

Entonces desde la línea de comando escriba:

            $make fdisk
            exec cc -i -D_MINIX  -D_POSIX_SOURCE  -o  fdisk  fdisk.c
            install  -S  4kw  fdisk

Para ejecutarlo debe invocarlo localmente e indicarle las cabezas y sectores que supuestamente posee el disco. En nuestro caso será:

     $./fdisk -h12 -s35  hd0

                          ----first----  -----last----  --------sectors-------
Num Sorted Act  Type     Cyl Head Sec   Cyl Head Sec    Base    Last    Size
 1     1    A   MINIX        0   1   1    194  11   35      35+  81899   81865-
 2     2        FAT-32     195   0   1    389  11   35   81900  163799   81900
 3     3        EXTENDED   390   0   1    988  11   35  163800  415379  251580
 4     4        None         0   0   0      0   0    0       0       0       0
     (Enter 'h' for help.  A null line will abort any operation) h

Si ingresamos h en la línea de comandos de fdisk, este nos mostrará todas las ordenes posibles que le podemos dar al programa. Tendrá una salida semejante a la siguiente:

Type a command letter, then a carriage return:
   + - explain any footnotes (+, -, #)
   a - toggle an active flag
   B - adjust a base sector
   c - change a partition
   l - load boot block (including partition table) from a file
   m - mark a partition as a MINIX partition
   n - mark a partition as a non-MINIX partition
   p - print raw partition table
   q - quit without making any changes
   S - adjust a size (by changing the last sector)
   s - save boot block (including partition table) on a file
   t - print known partition types
   v - verify partition table
   w - write changed partition table back to disk and exit

                          ----first----  -----last----  --------sectors-------
Num Sorted Act  Type     Cyl Head Sec   Cyl Head Sec    Base    Last    Size
 1     1    A   MINIX        0   1   1    194  11   35      35+  81899   81865-
 2     2        FAT-32     195   0   1    389  11   35   81900  163799   81900
 3     3        EXTENDED   390   0   1    988  11   35  163800  415379  251580
 4     4        None         0   0   0      0   0    0       0       0       0
(Enter 'h' for help.  A null line will abort any operation) h

Ahora usted podrá divertirse modificando las particiones de este disco virtual, y al mismo tiempo aprenderá a modificar las tablas de partición.

Tarea

1. Modifique el programa vdisk.c para que tabién se le pueda pasar como parametro, tablas de una partición estendida. Considere hasta tres unidades lógicas para la partición estendida.

2. Modifique el programa fdisk.c para que permita mostrar las tablas de las unidades lógicas de la partcición extendida. Esta tarea requiere de un análisi del programa, se le sugiere que siempre guarde el original para que pueda recuperarlo.