¿Qué hace realmente el comando "fsutil file createnew"?

¿Qué hace realmente el comando "fsutil file createnew"?

En la línea de comando del sistema operativo Windows, cuando necesito crear rápidamente un archivo de tamaño arbitrario, uso el comando:

fsutil file createnew <filename> <size_in_bytes>

Recientemente creé un archivo de 100 GB con esta herramienta nativa y me sorprendió que me tomó menos de 500 ms crear el archivo. Creé el archivo en un disco duro basado en un plato que previamente estaba lleno de datos.

Por curiosidad, abrí el archivo en un editor hexadecimal y parecía estar completamente vacío (es cierto que no inspeccioné manualmente los 100 GB). Esperaba que estuviera lleno con el contenido anterior del disco duro, dado que no hay forma de que simplemente escribiera 100 GB de datos en 500 ms.

¿Qué está fsutil file createnewhaciendo realmente? Y, dependiendo de lo que realmente haga, ¿se puede utilizar como una técnica de borrado rápido de baja seguridad (paso único)?

Respuesta1

Esperaba que estuviera lleno con el contenido anterior del disco duro,

Los sistemas operativos multiusuario generalmente no permiten que esto suceda, ya que sería una forma innecesariamente fácil de eludir las funciones de protección de archivos a nivel del sistema operativo y, al menos para Windows, esto es explícitamenteparte de su certificación de seguridad.

¿Qué hace realmente fsutil file createnew?

Hay al menos dos opciones, sospecho (pero no lo he comprobado) que fsutil usa la primera: depende del sistema operativo para realizar un seguimiento del "fin de los datos".

  • El sistema de archivos puede mantener dos punteros separados: el 'fin del archivo' y el 'fin de los datos válidos'. Así es explícitamente como funciona NTFS en Windows.

    Puedes llamarEstablecerEndOfFile()(correspondiente a Linuxftruncar()) para crear un archivo grande sin datos, y el espacio entre "fin de datos válidos" y "fin del archivo" devolverá automáticamente todos los bytes 0x00 cuando se lea.

    (Las cuentas privilegiadas pueden usar la llamada SetFileValidData() para forzar al sistema operativo a devolver datos que ya están en el disco, pero no es una operación comúnmente utilizada).

  • Si el sistema de archivos está basado en extensiones, entonces no realiza un seguimiento de los grupos de discos individuales, sino de rangos completos y contiguos de "inicio-fin" que componen el archivo. Esto permite creararchivos dispersos, en el que algunas extensiones simplemente se marcan como si no tuvieran ninguna asignación física (es decir, son "agujeros"); esas ubicaciones devolverán 0x00 cuando se lean (hasta que se escriba algo más allí, por supuesto).

    Generalmente, simplementebuscandomás allá del final del archivo y continuar con la escritura generará automáticamente un archivo disperso, si es posible.

fsutil tiene subcomandos para inspeccionar tanto el puntero de "datos válidos" como la lista de extensiones de un archivo.

Hay sistemas de archivos que no soportan estas técnicas (por ejemplo, FAT), en cuyo caso el sistema operativovoluntadEs necesario poner a cero explícitamente el área del disco correspondiente.

Y, dependiendo de lo que realmente haga, ¿se puede utilizar como una técnica de borrado rápido de baja seguridad (paso único)?

No, no en discos mecánicos.

información relacionada