LINUX.ORG.RU

Файл произвольного размера


0

0

надо его создать. помимо dd есть варианты? в хр и следующих есть fsutil или как то так, которая создает его мгновенно в отличие от dd. аналог существует в гнутой природе?

★★★★★

> в хр и следующих есть fsutil или как то так, которая создает его мгновенно в отличие от dd

Ну-ну. Файлы с дырами и Linux быстро создает.

tailgunner ★★★★★ ()
$ time dd if=/dev/zero of=bigfile seek=1000000 bs=1M count=1
1+0 records in
1+0 records out
1048576 bytes (1.0 MB) copied, 0.00618934 s, 169 MB/s

real    0m0.012s
user    0m0.000s
sys     0m0.012s

$ ls -lh bigfile 
-rw-r--r-- 1 user group 977G 2010-04-30 bigfile
sdio ★★★★★ ()
off_t anysize = (размер);
char c = 0;
int fd = open("myfile", O_CREAT|O_RDWR);
lseek(fd, anysize-1, SEEK_SET);
write(fd, &c, 1);
close(fd);

Вот вам «моментальное» создание файла произвольного размера, только если размер будет очень большим (гигабайт, терабайт...), то время создания такого файла увеличится, т.к. нужно будет заполнить таблицы адресов будущих блоков. Да, на диске такой файл будет занимать только 1 байт + место для адресных блоков.

(Добавлю, что если вы хотите получить файл > 2Гб, нужно либо пользоваться 64-битной системой, либо явно указать, что у вас 64-битный off_t).

Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от sdio

Только надо сказать, что файл состоит в основном из дыры :)

tailgunner ★★★★★ ()
Ответ на: комментарий от wfrr

>зойчем? для считывания данных в неограниченных объемах есть /dev/zero

Как зойчем? Можно же сделать архив рар с варезом и туда положить этот файл, для веса.

Zhbert ★★★★★ ()
Ответ на: комментарий от Zhbert

>Как зойчем? Можно же сделать архив рар с варезом и туда положить этот файл, для веса.

Тогда как минимум /dev/urandom, иначе рар поужимат нолики-то :)

nnz ★★★★ ()
Ответ на: комментарий от nnz

Тогда как минимум /dev/urandom, иначе рар поужимат нолики-то :)

Неправильно как-то мыслите: в «архив с варезом» надо выкладывать недавно мелькавший на ЛОРе архив с простенькими вирусами + sms-блокировщик :)

Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от Eddy_Em

>Неправильно как-то мыслите: в «архив с варезом» надо выкладывать недавно мелькавший на ЛОРе архив с простенькими вирусами + sms-блокировщик :)

Точно! Спасибо за идею. Запомню на будущее :)

nnz ★★★★ ()
Ответ на: комментарий от Eddy_Em

> т.к. нужно будет заполнить таблицы адресов будущих блоков.

хм. откуда тогда избыточная фрагментация берётся при таком методе? (один lseek в конец, а затем запись в произвольные места файла, как в торрент-клиентах)

Adjkru ★★★★★ ()
Ответ на: комментарий от Adjkru

Затем, что при записи свежескаченных блоков место на диске для физического хранения будет выделяться произвольно кусками, по мере поступления данных, а не последовательно, все и сразу.

whoami ()
Ответ на: комментарий от whoami

И как же это объясняет «т.к. нужно будет заполнить таблицы адресов будущих блоков.» ? По-моему как раз опровергает :)

Adjkru ★★★★★ ()
Ответ на: комментарий от Adjkru

Если фс поддерживает sparse-файлы, то ничего не будет заполнено. У себя в таблице она отметит «по смещению XXX в иноде YYY оставить sparse-область размером ZZZ», и никаких выделений блоков/экстентов.

Выделение блоков или экстентов пойдет уже при записи реальных данных в эту самую sparse-область.

whoami ()
Ответ на: комментарий от Adjkru

И как же это объясняет «т.к. нужно будет заполнить таблицы адресов будущих блоков.» ?

Если у вас файл имеет размер, скажем, 1Тб, то стандартной таблицы адресов блоков не хватает, и создаются дополнительные таблицы. Не верите - попробуйте сделать lseek на 1Тб и записать 1байт в такой файл. Увидите, что занимать на диске он будет не 1 и даже не 512 байт, а несколько мегабайт.

Eddy_Em ☆☆☆☆☆ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.