%3A%20%C2%BFqu%C3%A9%20%C3%A1reas%20del%20disco%20se%20sobrescriben%3F.png)
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/sda2
seguro? ¿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/sda2
seguro?
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 -Q
le 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 -ls
confirma que todo el archivo es escaso:
$ ls -ls fakesda
0 -rw-r--r-- 1 kamil kamil 2000398934016 Oct 31 18:48 fakesda
(el primero 0
dice 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.ntfs
asumirí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-size
la opción de mkfs.ntfs
(ver man 8 mkfs.ntfs
). Pero para estar seguro de qué mkfs.ntfs -Q
le 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
sparsemap
me dice fakesda
que todavía es completamente escaso. Corro mkfs.ntfs -Q
en el dispositivo de bucle:
$ sudo mkfs.ntfs -Q /dev/loop0
Destruyo el dispositivo de bucle y sync
por 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 -h
para 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 DATA
lí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.ntfs
usaste. 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 fakesda
sin jugar losetup
. Mi ejemplo utiliza deliberadamente diferentes tamaños de sector, de esta manera la respuesta es más general.
Duda
Si mkfs.ntfs -Q
escribe 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/sda2
es posible que el sistema de archivos de su sistema de archivos se haya sobrescrito parcialmente.
Tomo nota mkfs.ntfs
sin -Q
escribir 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 -Q
es similar y nunca dispersa el archivo.
Notas
Mi banco de pruebas: Debian GNU/Linux 10.
Mis
mkfs.ntfs -V
huellasmkntfs v2017.3.23AR.3 (libntfs-3g)
.lo instalé
sparsemap
porsudo apt-get install python3-pip sudo pip3 install sparseutils