Створення довільно великого "підробленого" файлу


16

Я хотів би створити спеціальний файл, подібний до /dev/nullабо /dev/random, де файл насправді не існує, але ви з нього все одно можете прочитати, за винятком того, що я фактично можу встановити обмеження на видимий розмір файлу.

Інакше кажучи, я хочу створити спеціальний файл, де (якщо припустити, що я встановив ковпачок у 500 ГБ), коли я "котять" файл, він видасть усі 500 ГБ файлу, а потім зупиниться. Він повинен діяти так само, як і фактичний файл 500 Гб, але не займаючи місця. Вміст цього файлу не має значення, він може бути \0як- /dev/nullнебудь, або просто невеликою стрічкою, що надсилається знову і знову, або будь-що інше.

Це щось, що можна зробити? Єдине, що мені вдалося знайти близько 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

Поза переносним рішенням, заснованим на DD / search, вже згадувалося, що деякі Unixes мають спеціалізовані команди:

Принаймні на Solaris , MacOS / X та Irix :

mkfile -n 500m sparseFile

На HP-UX prealloc , на AIX lmktemp. і багато дистрибутивів Linux мають усічення


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, там, де завжди вказані деякі сервіси, один з них був описаний / названий chargen, якщо я правильно пам'ятаю.

(... через хвилину ...)

Так. В / і т.д. / послуги ви знайдете

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

Тож я здогадуюсь, що це сервіс для перевірки чогось, і який надсилає символи - можливо випадкові - по мережі. Я знаходжу лише /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.

Однак я не знаю, як це використовувати для своїх цілей.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.