Formato NTFS (mkfs): ¿qué áreas del disco se sobrescriben?

Formato NTFS (mkfs): ¿qué áreas del disco se sobrescriben?

Accidentalmente ejecuté mkfs.ntfs -Q /dev/sda(en lugar de /dev/sda6) en un disco duro externo de 2 Tb. Afortunadamente, hay una partición de 1G no utilizada al principio y también mucho espacio al final:

Device     Boot      Start        End    Sectors  Size Id Type
/dev/sda1             2048    2099199    2097152    1G  b W95 FAT32
/dev/sda2  *       2099200 3739256831 3737157632  1.8T  7 HPFS/NTFS/exFAT
/dev/sda4       3739256832 3907029166  167772335   80G  5 Extended
/dev/sda5       3739258880 3751841791   12582912    6G 83 Linux
/dev/sda6       3751843840 3907029166  155185327   74G  7 HPFS/NTFS/exFAT

¿Es /dev/sda2seguro? ¿O mkfs.ntfs escribe metadatos en el medio del espacio de destino, en cuyo caso supongocualquier¿El archivo podría estar dañado sin siquiera una advertencia?

Respuesta1

¿Es /dev/sda2seguro?

En general: no. Sigue leyendo para saber por qué pienso eso.


Procedimiento de ejemplo

Mi disco duro de 2 TB tiene un tamaño de 2000398934016 bytes. El objetivo es investigar qué mkfs.ntfs -Qle haría a un dispositivo de este tamaño.

Creo un archivo disperso de este tamaño exacto:

$ # the filesystem must support sparse files
$ truncate -s 2000398934016 fakesda

ls -lsconfirma que todo el archivo es escaso:

$ ls -ls fakesda
0 -rw-r--r-- 1 kamil kamil 2000398934016 Oct 31 18:48 fakesda

(el primero 0dice esto). Pero tambiénsparsemap(que será útil más adelante) hace:

$ sparsemap fakesda
HOLE 2000398934016

Podría hacerlo mkfs.ntfs -FQ fakesda, pero luego mkfs.ntfsasumiría que el tamaño del sector es de 512 bytes. En este ejemplo, supongamos que mi disco utiliza 4096 bytes como tamaño de sector lógico. En tal caso, creo que puedo usar --sector-sizela opción de mkfs.ntfs(ver man 8 mkfs.ntfs). Pero para estar seguro de qué mkfs.ntfs -Qle haría sole a mi disco, decido crear un dispositivo de bucle a partir de fakesda:

$ sudo losetup -f --show --sector-size 4096 fakesda
/dev/loop0

sparsemapme dice fakesdaque todavía es completamente escaso. Corro mkfs.ntfs -Qen el dispositivo de bucle:

$ sudo mkfs.ntfs -Q /dev/loop0

Destruyo el dispositivo de bucle y syncpor si acaso:

$ sudo losetup -d /dev/loop0
$ sync

¿Qué tan escaso es el archivo ahora?

$ sparsemap fakesda
DATA 12288
HOLE 4096
DATA 110592
HOLE 250049753088
DATA 61460480
HOLE 750088122368
DATA 67125248
HOLE 1000132341760
DATA 4096

Vea sparsemap -hpara aprender a interpretar esto.

El archivo se interpreta como una secuencia de datos y agujeros; por ejemplo, dado un archivo con 8192 bytes de datos seguido de un agujero de 4096 bytes seguido de 8192 bytes de datos, la salida de sparsemap sería:

DATA 8192
HOLE 4096
DATA 8192

En mi resultado, cada DATAlínea denota un fragmento afectado por mkfs.ntfs.Puedo vermkfs.ntfs haceEscribe algo en el medio del espacio objetivo.

Finalmente elimino el archivo con rm fakesda.


Tu caso concreto

Puedes hacer tus propias pruebas usando el tamaño exacto (y el tamaño del sector) de tu disco y el mismo que mkfs.ntfsusaste. De esta manera probablemente podrá identificar los fragmentos afectados con precisión y saber a qué particiones (a qué sistemas de archivos antiguos) pertenecen. Mapear los fragmentos a archivos o metadatos particulares en sus sistemas de archivos antiguos puede no ser fácil y es un tema diferente.

La tabla de particiones que publicaste me dice que el tamaño del sector es de 512 bytes en tu caso. Creo que puedes usarlo mkfs.ntfs -FQ fakesdasin jugar losetup. Mi ejemplo utiliza deliberadamente diferentes tamaños de sector, de esta manera la respuesta es más general.


Duda

Si mkfs.ntfs -Qescribe ceros en alguna parte del archivo en el que opera, y si es lo suficientemente inteligente como para lograrlo dispersando el archivo, entonces mi procedimiento no detectará esto. Francamente, no sé si la herramienta lo hace. Si es así, entonces necesitas algo más que mi procedimiento para encontrartodolos fragmentos afectados.

Esta imperfección del procedimiento no cambia la conclusión: /dev/sda2es posible que el sistema de archivos de su sistema de archivos se haya sobrescrito parcialmente.

Tomo nota mkfs.ntfssin -Qescribir ceros.sindispersar el archivo; de hecho, desparsifica todo el expediente. Probé esto con archivos mucho más pequeños que 2 TB, pero aún así. yo solo puedosospechar mkfs.ntfs -Qes similar y nunca dispersa el archivo.


Notas

  • Mi banco de pruebas: Debian GNU/Linux 10.

  • Mis mkfs.ntfs -Vhuellas mkntfs v2017.3.23AR.3 (libntfs-3g).

  • lo instalé sparsemappor

    sudo apt-get install python3-pip
    sudo pip3 install sparseutils
    

información relacionada