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.