2009-07-06 9 views
5

¿Cuál es la lógica detrás de la desfragmentación de disco y la comprobación de disco en Windows? ¿Puedo hacerlo usando la codificación C#?Lógica en Desfragmantación de disco y comprobación de disco

+2

La desfragmentación de disco es un tema complejo y específico del sistema de archivos subyacente del dispositivo que está desfragmentando. ¿Qué estás tratando de lograr exactamente? – scwagner

+3

¿Por qué harías una desfragmentación de disco en C# si no conoces el concepto? –

+0

Estoy haciendo una aplicación basada en el sistema. Quiero implementar un Desfragmentador de disco y un Comprobador de disco en él. – Sauron

Respuesta

7

Para completarlo, aquí hay una API de C# envoltorio para la desfragmentación:

http://blogs.msdn.com/jeffrey_wall/archive/2004/09/13/229137.aspx

desfragmentación con estas API está (se supone que) muy seguro hoy en día. No debería poder dañar el sistema de archivos aunque lo desee.

Los programas de desfragmentación comercial utilizan las mismas API.

+2

La diferencia es que las empresas comerciales conocen los sistemas de archivos, y OP aún no podía definir la desfragmentación. Me gustaría que él sepa qué es un gatillo antes de darle un arma. –

3

Mire Defragmenting Files en msdn para posibles ayudantes de API.

Debe pensar detenidamente sobre el uso de C# para esta tarea, ya que puede introducir algunos gastos indirectos no deseados para la recopilación en Win32 nativo.

3

Si no conoce la lógica de la desfragmentación, y si no escribió el sistema de archivos usted mismo para que no pueda verificar errores de forma autorizada, ¿por qué no simplemente iniciar nuevos procesos ejecutando 'defrag' y 'chkdsk ¿?

1

A pesar de su importancia, el sistema de archivos no es más que una estructura de datos que mapea los nombres de archivos en listas de bloques de discos. Y realiza un seguimiento de la metainformación, como la longitud real del archivo y los archivos especiales que mantienen listas de archivos (por ejemplo, directorios). Un comprobador de discos verifica que la estructura de datos sea consistente. Es decir, cada bloque de disco debe estar libre para su asignación a un archivo o pertenecer a un único archivo. También puede verificar ciertos casos en los que un conjunto de bloques de discos parece ser un archivo que debería estar en un directorio, pero no por alguna razón.

La desfragmentación consiste en examinar las listas de bloques de discos asignados a cada archivo. Los archivos generalmente se cargarán más rápido si usan un conjunto contiguo de bloques en lugar de uno disperso por todo el disco. Y, en general, todo el sistema de archivos funcionará mejor si todos los bloques de discos en uso se limitan a un único rango congruente del disco. Por lo tanto, el truco es mover bloques de disco de manera segura para lograr este fin sin destruir el sistema de archivos.

La principal dificultad aquí es ejecutar estas aplicaciones mientras se está utilizando un disco. Es posible, pero uno tiene que ser muy, muy, muy cuidadoso para no cometer algún tipo de error obvio o extremadamente sutil y destruir la mayoría o la totalidad de los archivos. Es más fácil trabajar en un sistema de archivos fuera de línea.

La otra dificultad es lidiar con las complejidades del sistema de archivos. Por ejemplo, sería mucho mejor construir algo que admita FAT32 en lugar de NTFS porque el primero es un sistema de archivos mucho más simple.

Siempre y cuando tenga acceso de bloque de bajo nivel y una forma sensata de resolver los problemas de concurrencia (mejor manejado trabajando en el sistema de archivos cuando no esté en uso) puede hacerlo en C#, perl o en cualquier idioma te gusta.

BUT BE very CAREFUL. Las primeras versiones del programa destruirán sistemas de archivos completos. Las versiones posteriores lo harán, pero solo en circunstancias poco claras. Y los usuarios se enojan mucho y se ponen en litigio si destruyes sus datos.

+0

Gracias Philips, Esto puede darme una solución. – Sauron

+1

Existen API de Windows para la desfragmentación que son completamente seguras y funcionan en el sistema de archivos NTFS. – andreialecu

3

Mark Russinovich escribió un artículo Inside Windows NT Disk Defragmentation hace un tiempo que da detalles en profundidad. Si realmente quiere hacer esto, le aconsejo que use las instalaciones integradas para la desfragmentación. Más aún, en sistemas operativos recientes, nunca he visto la necesidad de que un usuario se preocupe por la desfragmentación; se realizará de forma automática según un cronograma y la gente de NTFS en MS es definitivamente más inteligente en esas cosas que usted (lo siento, pero lo hacen desde hace un tiempo, no es así).

+0

Este artículo es de mucha ayuda. – Sauron