Hace tiempo les había prometido publicar un trabajo que presentamos en la Universidad el año pasado en mi grupo de trabajo. Hoy revisando mis archivos antiguos lo encontré y aprovecho un break para publicarlo.
Trata de simular un Sistema de Archivos que trabaja de una forma parecida a FAT ( http://en.wikipedia.org/wiki/File_Allocation_Table ). Está codificado en Python.
El programa codificado en Python lo puedes descargar de aqui:

Lo interesante también es que usa un único archivo como “Disco Duro”, sobre el cuál está la estructura básica de un Sistema de Archivos:
1. FAT (File Allocation Table) (Tabla de Asignación de Archivos).- En esta zona se asigna los sectores necesarios para los archivos. Cada sector ocupado será marcado como usado o no usado.
2. Directorio (RootDir).- Aquí se almacena información básica como nombre de archivo, tamaño y sectores usados. De esta zona - con datos de sectores usados y tamaño - por cada entrada de cada archivo se calcula la ubicación del archivo en la zona de datos.
3. Zona de Datos.- Aquí es donde se encuentra la información.
El programa para ejecutarse necesita que instales el compilador Python que lo puedes bajar de la siguiente dirección:
http://www.python.org/ftp/python/2.6.2/python-2.6.2.msi
Al ejecutarse la primera vez, inicializa el DiscoDuro Virtual que es en realidad el archivo disco_virtual.bin, y solicita que se ingrese el tamaño que tendrán los sectores. Una vez elegido el tamaño de los sectores, procede a crear la FAT, el directorio Raiz y la zona de datos, formateándolos escribiendo “00″.
Luego una vez finalizado el formateo del Disco Duro Virtual, se puede insertar archivos, extraer, borrar, listar los archivos, ver el estado del disco.
Puedes insertar archivos de cualquier tipo: Ejecutables, documentos, imagenes, texto, ect y los podrás extraer luego y seguirán funcionando!, Jeje.
Para visualizar el Disco Duro Virtual recomiendo que uses un Editor Hexadecimal, uno de esos que andan sueltos por ahí.
Por cierto, como les comenté arriba, no es algo definitivo, tiene algunas carencias que por falta de tiempo no las implementé, una de ellas es que no almacena los nombres de los archivos ni sus tamaños en formato Hexadecimal en el Directorio (Esto ahorraría espacio), no tiene función de verificación de duplicidad de archivos. Estas funciones se pueden agregar pero les dejo ese trabajo a quienes deseen profundizar sus conocimientos sobre Sistema de Archivos y Python.
El código fuente es libre y está comentado en su mayoría. Así que puedes analizarlo, probarlo y entenderlo. Respeta los créditos por favor.
Si decides piratearlo y luego decides engañar que tu lo hiciste es cuestión tuya, pero si tú te lo crees solo conseguirás engañarte a tí mismo.
Saludos,
Felipe
Referencias:
http://usuarios.lycos.es/irojasb/El_Disco_Duro.htm
http://en.wikipedia.org/wiki/File_Allocation_Table
http://www.ranish.com/part/primer.htm
http://www.beginningtoseethelight.org/fat16/