Erstellen einer beliebig großen "gefälschten" Datei

16

Ich möchte eine spezielle Datei ähnlich /dev/nulloder erstellen /dev/random, in der die Datei nicht vorhanden ist, aber Sie können sie trotzdem lesen, mit der Ausnahme, dass ich tatsächlich eine Obergrenze für die scheinbare Größe der Datei festlegen könnte.

Um es anders auszudrücken, ich möchte eine spezielle Datei erstellen, in der (vorausgesetzt, ich setze die Obergrenze auf 500 GB), wenn ich die Datei "cat", alle 500 GB der Datei ausgegeben und dann gestoppt werden. Es muss sich wie eine 500-GB-Datei verhalten, ohne den Speicherplatz zu belegen. Der Inhalt dieser Datei ist nicht wichtig, es könnte sein , alle \0ist wie /dev/null, oder nur eine kleine Schnur geschickt wird und über oder was auch immer.

Ist das etwas, was machbar ist? Das einzige, was ich aus der Ferne finden konnte, sind Manpages, über die gesprochen wurde mknod, aber diese waren nicht sehr hilfreich.

Mittelmäßiger Gopher
quelle

Antworten:

17

Sie können auf bestimmten Dateisystemen eine Sparse-Datei erstellen , die anscheinend eine bestimmte Größe hat, jedoch nicht so viel Speicherplatz auf der Festplatte belegt .

$ dd if=/dev/null of=sparse bs=1024 count=1 seek=524288000
0+0 records in
0+0 records out
0 bytes (0 B) copied, 2.4444e-05 s, 0.0 kB/s
$ ls -l sparse 
-rw-rw-r--. 1 ignacio ignacio 536870912000 May  9 22:25 sparse
$ du -h sparse
0   sparse
Ignacio Vazquez-Abrams
quelle
Das funktioniert einwandfrei. Im besten Fall habe ich auf eine Lösung gehofft, bei der ich tatsächlich die Ausgabe skripten konnte (zum Beispiel, für jede Suchposition, die Sie sich die Daten ansehen, würde es einen Hash dieser Position geben oder so etwas in diese Richtung), aber das war ziemlich verkehrt Dort. Das funktioniert jetzt definitiv, danke!
Mittelmäßiger Gopher
1
@MediocreGopher, mit FUSE könnten Sie sicherlich so etwas tun .
cjm
1

Abgesehen von der bereits erwähnten portablen dd / seek-basierten Lösung haben einige Unixe spezielle Befehle:

Zumindest unter Solaris , MacOS / X und Irix :

mkfile -n 500m sparseFile

Unter HP-UX Prealloc , unter AIX lmktemp. und viele Linux-Distributionen haben abgeschnitten

jlliagre
quelle
1

Wenn Sie nicht in der Datei suchen müssen, können Sie eine Named Pipe verwenden:

mkfifo my_special_file
yes | head -n 100 > my_special_file&
cat my_special_file

Natürlich können Sie jeden anderen Befehl verwenden, einschließlich eines komplexen Skripts, um Daten in der Pipe zu generieren.

jfg956
quelle
0

Nun, mit dd können Sie eine Blockgröße und eine Anzahl angeben und dadurch die Größe wie folgt begrenzen:

dd if=/dev/urandom count=5 bs=1024 > nullfile

Wenn Sie daraus lesen möchten, leiten Sie es einfach weiter:

dd if=/dev/urandom count=5 bs=1024 | yourReadingProcess 

Früher gab es bei jeder Linux-Installation einige Netzwerk-Tools, portmap, inet.d und so, und in inet.d, wo immer einige Dienste angegeben waren, wurde einer von ihnen beschrieben / chargen genannt, wenn ich mich richtig erinnere.

(... eine Minute später ...)

Ja. In / etc / services finden Sie

chargen         19/tcp          ttytst source
chargen         19/udp          ttytst source

Ich denke, es ist ein Dienst, um etwas zu testen, und der Zeichen - vielleicht zufällig - über das Netzwerk sendet. Ich finde /etc/xinet.d/chargen nur auf meinem PC. Es gibt mehr Infos:

# default: off
# description: An xinetd internal service which generate characters.  The
# xinetd internal service which continuously generates characters until the
# connection is dropped.  The characters look something like this:
# !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefg
# This is the tcp version.

Ich weiß jedoch nicht, wie ich es für Ihren Zweck verwenden soll.

Benutzer unbekannt
quelle