Wenn Sie die Fragmentierung sicherstellen , aber nicht verhindern möchten (Sie haben also nur teilweise Kontrolle darüber, was passiert) und sich nicht um die Besonderheiten der Fragmentierung kümmern, finden Sie hier eine schnelle und schmutzige Vorgehensweise.
So erstellen Sie eine n
Blockdatei in mindestens zwei Fragmenten:
- Öffnen Sie die Datei mit synchronen Schreibvorgängen und schreiben Sie m <n Blöcke.
- Öffnen Sie eine andere Datei. Fügen Sie es hinzu, bis höchstens n - m Blöcke auf der Festplatte frei sind. Machen Sie es nicht versehentlich spärlich!
- Schreiben Sie die verbleibenden n - m Blöcke in die erste Datei.
- Schließen und
unlink
die zweite Datei.
Sie können mehr Teile fragmentieren, indem Sie mehr Dateien verschachteln.
Dies setzt voraus, dass das Dateisystem für diese Art von Folter verfügbar ist, dh nicht in einer Umgebung mit mehreren Benutzern oder geschäftskritischen Bedingungen. Es wird auch davon ausgegangen, dass das Dateisystem keine reservierten Blöcke enthält oder dass die reservierten Blöcke für Ihre UID reserviert sind oder dass Sie root sind.
Es gibt keine direkte Möglichkeit, die Fragmentierung sicherzustellen, da Unix-Systeme eine Dateisystemabstraktion verwenden, sodass Sie niemals mit dem unformatierten Dateisystem sprechen.
Wenn Sie sicherstellen, dass die Fragmentierung auf Dateisystemebene erfolgt, erfahren Sie nichts darüber, was auf niedrigeren Ebenen geschieht. LVM, Software- und Hardware-RAID, Sektor-Remapping auf Hardware-Ebene und andere Abstraktionsschichten können Ihre Erwartungen (und Messungen) in Mitleidenschaft ziehen.
Ich habe noch kein universelles Dateisystem unter Linux kennengelernt, das den Schreibdurchsatz gegenüber zusammenhängenden Dateien opfern würde. Das heißt, jedes Dateisystem fragmentiert, wenn die Teile in einer nicht sequentiellen Reihenfolge geschrieben werden, insbesondere bei Dateien mit geringer Dichte.
Der einfache Weg: Führen Sie eine Datei über einen Torrent-Client aus - vorzugsweise etwas, das die Datei nicht vorab zuweist. BitTornado oder rtorrent passen zu dieser Rechnung. (Ersteres verfügt über konfigurierbare Zuordnungsmodi)
Der harte Weg: Teilen Sie die Quelldatei in Teile mit einer Größe von einigen KB auf und mischen Sie sie. Öffnen Sie die Zieldatei. Suchen Sie für jedes Stück die richtige Position und schreiben Sie es.
Hier ist ein Perl-Skript, das dies tut:
Sie können mit dem
filefrag
im e2fsprogs-Paket enthaltenen Befehl nach Fragmentierung suchen.Hier ist ein Beispiel dafür, was ein Torrent tut:
Folgendes habe ich mit meinem Skript (auf ext3) erhalten:
EDIT: Egal, es scheint doch nicht so gut zu funktionieren, außer bei größeren Dateien (mit Sicherheit 1,5 GB Dateifragmente).
Das VM-System speichert wahrscheinlich zwischen und verschiebt / ordnet zu kleine Schreibvorgänge. Aus diesem Grund können Torrent-Clients fragmentiert werden (da sie normalerweise nicht mit> 10 MB / s herunterladen), mein Skript jedoch nicht. Ich denke, es kann durch Verringern der VM-Schwellenwerte optimiert werden. Sehen
/proc/sys/vm/dirty_*
quelle