%20%E2%80%93%20welche%20Bereiche%20der%20Festplatte%20werden%20%C3%BCberschrieben%3F.png)
Ich habe versehentlich mkfs.ntfs -Q /dev/sda
(anstatt /dev/sda6
) auf einer externen 2-TB-Festplatte ausgeführt. Glücklicherweise gibt es am Anfang eine 1-GB-Partition, die nicht genutzt wird, und am Ende auch jede Menge Platz:
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
Ist /dev/sda2
sicher? Oder schreibt mkfs.ntfs Metadaten in die Mitte des Zielspeichers, in diesem Fall schätze ichbeliebigDatei könnte ohne Warnung beschädigt werden?
Antwort1
Ist
/dev/sda2
sicher?
Im Allgemeinen: nein. Lesen Sie weiter, um zu erfahren, warum ich das denke.
Beispielprozedur
Meine 2TB-Festplatte hat eine Größe von 2000398934016 Bytes. Ziel ist es zu untersuchen, was mkfs.ntfs -Q
mit einem Gerät dieser Größe passieren würde.
Ich erstelle eine Sparse-Datei mit genau dieser Größe:
$ # the filesystem must support sparse files
$ truncate -s 2000398934016 fakesda
ls -ls
bestätigt, dass die gesamte Datei spärlich ist:
$ ls -ls fakesda
0 -rw-r--r-- 1 kamil kamil 2000398934016 Oct 31 18:48 fakesda
( 0
das sagt der erste). Aber auchsparsemap
(was später nützlich sein wird) bewirkt:
$ sparsemap fakesda
HOLE 2000398934016
Ich könnte tun mkfs.ntfs -FQ fakesda
, würde dann aber mkfs.ntfs
annehmen, dass die Sektorgröße 512 Byte beträgt. In diesem Beispiel nehmen wir an, dass meine Festplatte 4096 Byte als logische Sektorgröße verwendet. In diesem Fall denke ich, dass ich --sector-size
die Option von verwenden kann mkfs.ntfs
(siehe man 8 mkfs.ntfs
). Aber um sicherzugehen, was allein mkfs.ntfs -Q
mit meiner Festplatte passieren würde, entscheide ich mich, ein Loop-Gerät aus zu erstellen fakesda
:
$ sudo losetup -f --show --sector-size 4096 fakesda
/dev/loop0
sparsemap
sagt mir fakesda
noch ganz spärlich. Ich führe mkfs.ntfs -Q
auf dem Loop-Device aus:
$ sudo mkfs.ntfs -Q /dev/loop0
Ich zerstöre das Loop-Gerät und sync
nur für den Fall:
$ sudo losetup -d /dev/loop0
$ sync
Wie spärlich ist die Datei jetzt?
$ sparsemap fakesda
DATA 12288
HOLE 4096
DATA 110592
HOLE 250049753088
DATA 61460480
HOLE 750088122368
DATA 67125248
HOLE 1000132341760
DATA 4096
Lesen Sie weiter sparsemap -h
, um zu erfahren, wie Sie dies interpretieren
Die Datei wird als eine Folge von Daten und Lücken interpretiert. Bei einer Datei mit 8192 Byte Daten, gefolgt von einer 4096 Byte großen Lücke, gefolgt von 8192 Byte Daten, wäre die Ausgabe von Sparsemap beispielsweise:
DATA 8192 HOLE 4096 DATA 8192
In meinem Ergebnis DATA
bezeichnet jede Zeile ein Fragment, das von betroffen ist mkfs.ntfs
.ich kann sehenmkfs.ntfs
tutSchreiben Sie etwas in die Mitte des Zielfeldes.
Zum Schluss entferne ich die Datei mit rm fakesda
.
Ihr konkreter Fall
Sie können Ihre eigenen Tests durchführen, indem Sie die genaue Größe (und Sektorgröße) Ihrer Festplatte und die von mkfs.ntfs
Ihnen verwendete verwenden. Auf diese Weise können Sie die betroffenen Fragmente wahrscheinlich genau identifizieren und feststellen, zu welchen Partitionen (welchen alten Dateisystemen) sie gehören. Die Zuordnung der Fragmente zu bestimmten Dateien oder Metadaten in Ihren alten Dateisystemen ist möglicherweise nicht einfach und stellt ein anderes Problem dar.
Die Partitionstabelle, die Sie gepostet haben, sagt mir, dass die Sektorgröße in Ihrem Fall 512 Byte beträgt. Ich denke, Sie können es verwenden, mkfs.ntfs -FQ fakesda
ohne damit herumzuspielen losetup
. In meinem Beispiel wird absichtlich eine andere Sektorgröße verwendet, damit die Antwort allgemeiner ist.
Zweifeln
Wenn mkfs.ntfs -Q
Nullen in einen Teil der Datei geschrieben werden, mit der es arbeitet, und wenn es intelligent genug ist, dies durch Sparsifizierung der Datei zu erreichen, dann wird mein Verfahren dies nicht erkennen. Ehrlich gesagt weiß ich nicht, ob das Tool dies tut. Wenn ja, dann brauchen Sie etwas mehr als mein Verfahren, um Folgendes zu findenalledie betroffenen Fragmente.
Diese Unvollkommenheit des Verfahrens ändert nichts an der Schlussfolgerung: Das Dateisystem in Ihrem Computer /dev/sda2
wurde möglicherweise teilweise überschrieben.
Ich stelle fest mkfs.ntfs
, ohne -Q
tatsächlich Nullen zu schreibenohnedie Datei zu spärlich zu machen; tatsächlich wird die ganze Datei entsparsam gemacht. Ich habe das mit Dateien getestet, die viel kleiner als 2 TB sind, aber trotzdem. Ich kann nurverdächtig mkfs.ntfs -Q
ist ähnlich und verdünnt die Datei nie.
Anmerkungen
Mein Testbett: Debian GNU/Linux 10.
Meine
mkfs.ntfs -V
Druckemkntfs v2017.3.23AR.3 (libntfs-3g)
.Ich installierte
sparsemap
vonsudo apt-get install python3-pip sudo pip3 install sparseutils