任意のサイズの「偽物」ファイルを作成する


16

/dev/nullまたは/dev/randomに似た特別なファイルを作成したいと思います。ファイルは実際には存在しませんが、ファイルの見かけのサイズに実際に上限を設定できることを除いて、すべて同じように読み取ることができます。

別の言い方をすれば、ファイルを「cat」すると500GBのファイルをすべて出力して停止する特別なファイルを作成します(上限を500GBに設定すると仮定します)。実際の500GBファイルと同じように動作する必要がありますが、スペースを取りません。このファイルの内容は重要ではありません。すべて\0ののようなもの/dev/nullでも、繰り返し送信される小さな文字列などでもかまいません。

これはできることですか?私が見つけることができたのは、リモートで閉じることができる唯一のものは、manページについて話しているだけですmknodが、それらはあまり役に立ちませんでした。

回答:


17

特定のファイルシステム上にスパースファイルを作成できます。これは特定のサイズに見えますが、実際にはディスク上のそれほど多くのスペースは使用しません。

$ 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

これは完全に機能します。出力が何であるかを実際にスクリプト化できるソリューションを望んでいました(データを見るすべてのシーク位置には、その位置のハッシュまたはそれらの行に沿った何かがあるでしょう)が、それはかなりアウトでしたそこ。これは今のところ間違いなく動作します、ありがとう!
平凡なゴーファー

1
@MediocreGopher、あなたは確かにFUSEでそのようなことをすることができます。
cjm


1

ファイルを検索する必要がない場合は、名前付きパイプを使用できます。

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

もちろん、複雑なスクリプトを含む他のコマンドを使用して、パイプ内のデータを生成できます。


0

さて、ddを使用すると、ブロックサイズとカウントを指定して、次のようにサイズを制限できます。

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

それから読みたい場合は、パイプしてください:

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

以前、私が作成したすべてのLinuxインストールには、いくつかのネットワークツール、portmap、inet.dなどが付属していました。inet.dでは、いくつかのサービスが常に指定されていました。

(... 1分後...)

はい。/ etc / servicesにあります

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

だから私はそれが何かをテストするサービスであり、ネットワーク上で文字を送信する-おそらくランダム-であると思う。PCでのみ/etc/xinet.d/chargenを見つけました。さらに情報があります:

# 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.

しかし、私はあなたの目的のためにそれを使用する方法を知りません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.