Создать файл определенного размера линукс

Quickly create a large file on a Linux system

How can I quickly create a large file on a Linux (Red Hat Linux) system? dd will do the job, but reading from /dev/zero and writing to the drive can take a long time when you need a file several hundreds of GBs in size for testing. If you need to do that repeatedly, the time really adds up. I don’t care about the contents of the file, I just want it to be created quickly. How can this be done? Using a sparse file won’t work for this. I need the file to be allocated disk space.

Ext4 has much better file allocation performance, since whole blocks of up to 100MB can be allocated at once.

People seem to be grossly ignoring the «sparse file won’t work with this», with their truncate and dd seeks below.

You should have defined what you meant by «for testing». Testing the writing speed of your hard disk? Testing what df will report? Testing an app that does something particular. The answer depends on what you want to test. Anyway I’m a bit late — I see now that it’s been years since your question 🙂

Just in case you are looking for a way to simulate a full partition, like I was, look no further than /dev/full

16 Answers 16

dd from the other answers is a good solution, but it is slow for this purpose. In Linux (and other POSIX systems), we have fallocate , which uses the desired space without having to actually writing to it, works with most modern disk based file systems, very fast:

fallocate -l 10G gentoo_root.img 

Is it possible that dd is internally using that already? If I do ‘dd if=/dev/zero of=zerofile bs=1G count=1’ on a 3.0.0 kernel, the write finishes in 2 seconds, with a write data rate of over 500 megabytes per second. That’s clearly impossible on a 2.5″ laptop harddrive.

This ( fallocate ) will also not work on a Linux ZFS filesystem — github.com/zfsonlinux/zfs/issues/326

In Debian GNU/Linux fallocate is part of the util-linux package. This tool was written by Karel Zak from RedHat and source code can be found here: kernel.org/pub/linux/utils/util-linux

This is a common question — especially in today’s environment of virtual environments. Unfortunately, the answer is not as straight-forward as one might assume.

dd is the obvious first choice, but dd is essentially a copy and that forces you to write every block of data (thus, initializing the file contents). And that initialization is what takes up so much I/O time. (Want to make it take even longer? Use /dev/random instead of /dev/zero! Then you’ll use CPU as well as I/O time!) In the end though, dd is a poor choice (though essentially the default used by the VM «create» GUIs). E.g:

dd if=/dev/zero of=./gentoo_root.img bs=4k iflag=fullblock,count_bytes count=10G 

truncate is another choice — and is likely the fastest. But that is because it creates a «sparse file». Essentially, a sparse file is a section of disk that has a lot of the same data, and the underlying filesystem «cheats» by not really storing all of the data, but just «pretending» that it’s all there. Thus, when you use truncate to create a 20 GB drive for your VM, the filesystem doesn’t actually allocate 20 GB, but it cheats and says that there are 20 GB of zeros there, even though as little as one track on the disk may actually (really) be in use. E.g.:

 truncate -s 10G gentoo_root.img 

fallocate is the final — and bestchoice for use with VM disk allocation, because it essentially «reserves» (or «allocates» all of the space you’re seeking, but it doesn’t bother to write anything. So, when you use fallocate to create a 20 GB virtual drive space, you really do get a 20 GB file (not a «sparse file», and you won’t have bothered to write anything to it — which means virtually anything could be in there — kind of like a brand new disk!) E.g.:

fallocate -l 10G gentoo_root.img 

Источник

Читайте также:  Linux samba and active directory

Как создать большой файл в Linux

Иногда вам может понадобиться создать большой файл в Linux в целях тестирования. Существует несколько способов сделать это. В этой статье мы рассмотрим, как создавать большие файлы в Linux. Вы можете использовать эти шаги для создания 100mb файла в Linux, или создания 1gb файла, или создания большого файла со случайными данными.

Как создать большой файл в Linux

Ниже описаны шаги по созданию большого файла в Linux. Допустим, вы хотите создать файл размером 100 Мб.

1. Использование dd

dd — самый распространенный способ создания больших файлов в Linux. Вот команда для создания файла data.img размером 100 Мб.

dd if=/dev/zero of=./data.img bs=1024 count=102400

Создание большого файла с использованием dd

Вот команда для создания файла размером 1 Гб.

dd if=/dev/zero of=./data.img bs=1024 count=1024000

Но dd — это программа копирования, которая записывает блок данных и поэтому требует много времени на операции ввода-вывода по мере увеличения размера файла. Это один из самых медленных методов создания больших файлов, который не рекомендуется использовать. Тем не менее, мы включили его сюда, поскольку это наиболее распространенный метод, используемый по умолчанию большинством системных администраторов.

2. Использование команды Truncate

Для создания больших файлов можно также использовать команду truncate. Это один из самых быстрых способов создания больших файлов. Truncate работает путем создания разреженного файла, то есть участка диска, который содержит идентичные данные, например, ноль. Он не хранит реальные данные и не выделяет место, а обманывает ОС, делая вид, что все данные есть. Реальное пространство выделяется только тогда, когда вы начинаете записывать данные в файл. Вот команда для создания файла размером 1 Гб с помощью команды truncate.

Читайте также:  Драйвера linux для wireless в link

Создание большого файла с использованием Truncate

3. Использование fallocate

fallocate — это лучший метод для создания больших файлов. Он резервирует или выделяет указанное дисковое пространство для вашего файла, фактически ничего не записывая в него. Таким образом, в этом случае вы получаете файл нужного объема, а не разреженный файл, как в случае с truncate. Вот команда для создания файла размером 1 Гб с помощью fallocate.

Создание большого файла с использованием fallocate

Вот и все. В этой статье мы узнали, как создавать большие файлы в Linux.

Источник

Как создать файл в Linux: 12 способов

Эти способы тестировались на дистрибутиве Ubuntu, но будут работать на любой системе Linux.

Создание пустого файла при помощи touch

Пояснение: Команда touch предназначена для того, чтобы поменять дату изменения файла на текущую. Однако ее также часто используют для создания файлов.

Создание сразу нескольких пустых файлов при помощи touch

touch file1.txt file2.txt file3.txt

Создание пустого файла при помощи echo

Пояснение: Команда echo предназначена для вывода на экран строки, которая в нее передается. Символ > перенаправляет вывод в файл. Соответственно мы перенаправили пустоту в файл.

Трюк для создания пустых файлов

Пояснение: символ > перенаправляет вывод, а мы ничего не выводим, просто перенаправляем пустоту в файл. Это самый короткий способ создать пустой файл.

Двоеточие в начале, чтобы случайно не записать вывод предыдущей команды в файл.

Создание файла с содержимым

Пояснение: Выводим строку 123 и перенаправляем этот вывод в файл. Файл будет содержать строку 123

Создание файла путем объединения других файлов с помощью cat

$ cat file1 file2 file3 > big_file

Пояснение: Команда cat выводит на экран содержимое на экран, однако мы перенаправляем этот вывод в файл. Соответственно мы создали файл big_file в котором находится содержимое из трех других файлов.

Создание файла с помощью любой команды и символа >

Мы можем создать файл, с помощью команд, которые выводят что-то на экран, записав этот вывод в файл. Например ps aux выводит информацию о текущих процессах в системе. Мы просто можно записать весь вывод этой команды в файл file.txt и потом его проанализировать.

Записываем в файл справку по команде man :

Записываем в файл календарь на 2021 год

Создание файла при помощи редактора nano

Этот редактор чуть более привычный простому пользователю, чем Vim, однако он должен быть установлен в вашей системе.

Иначе вы получите ошибку о несуществующей команде Command ‘nano’ not found .

Проверить установлен ли nano в вашей системе можно с помощью следующей команды:

Результатом будет информация об установленном редакторе:

GNU nano, version 2.9.3 (C) 1999-2011, 2013-2018 Free Software Foundation, Inc. (C) 2014-2018 the contributors to nano Email: nano@nano-editor.org Web: https://nano-editor.org/ Compiled options: --disable-libmagic --disable-wrapping-as-root --enable-utf8

Либо сообщение об ошибке: Command ‘nano’ not found

Создание файла при помощи текстового редактора Vim

Если вы никогда не работали с этим редактором, то этот способ вам не подойдет, т.к. без пары часов за документацией Vim не освоить.

На всякий случай скажу вам способ выйти из этого редактора, т.к. даже это совершенно не очевидно: нажмите Esc , затем : затем введите q! затем нажмите Enter — это способ выхода без сохранения. Для сохранения нужно набрать x! вместо q

Читайте также:  Скопировать файл во все подкаталоги linux

Создание файла определенного размера c помощью fallocate

Таким образом вы создали файл hello.txt размером 10 мегабайт.

Создание файла определенного размера с помощью dd

$ dd if=/dev/zero of=hello.txt bs=10M count=1

Создание файла-сокета c помощью команды mkfifo

После создания вам нужно установить на него права, чтобы нужные программы могли им пользоваться

Создание файла при помощи HEREDOC

$ cat file.txt > This text is > added by Here Document > EOF

Пояснение: мы сначала пишем cat file.txt причем вместо EOF может быть любая строка, которой нет в тексте, который мы собираемся написать. Затем когда мы завершили заполнение многострочного файла, просто переходим на следующую строку и вводим EOF. В итоге содержимое нашего файла будет:

This text is added by Here Document

Спасибо за внимание! Если вы знаете какой-нибудь интересный и полезный способ создания фалов — напишите его в комментариях.

Источник

How can I create a file with a specific size from a command line?

How can I create a file (e.g. using the touch command or another similar way), but with a specific size (e.g. 14 MB)? The use case is to test FTP with various file sizes. If we can create a file with a specific size, it will be useful to verify FTP transfer etc.

7 Answers 7

DESCRIPTION Shrink or extend the size of each FILE to the specified size [. ] -s, --size=SIZE set or adjust the file size by SIZE 

Note: truncate may not be available on your system, e.g. on Mac OS X it’s not installed by default (but you can easily install it, using macports for example). In these cases you may need to use dd or head instead.

Very nice indeed. The touch is not needed though, you can simply run truncate -s 14M filename it will create filename directly.

This seems to create a sparse file, whereas the below answer (that uses «dd») doesn’t. I don’t know if the difference is important to you, but I figured I’d point it out

EDIT: The simplest way is probably the truncate of Ashutosh Vishwa Bandhu’s answer, but as pointed out by @offby1 that creates sparse files which may not be what you want. The solutions below create normal, full files.

The following commands create a 14MB file called foo :

    fallocate (thanks to @Breakthrough who suggested it in the comments and vote up Ahmed Masud’s answer below which also mentions it.)

This command is particularly impressive since it is as fast as truncate (instantaneous) irrespective of the desired file size (unlike the other solutions which will be slow for large files) and yet creates normal files, not sparse ones :

$ truncate -s 14MB foo1.txt $ fallocate -l 14000000 foo2.txt $ ls -ls foo?.txt 0 -rw-r--r-- 1 terdon terdon 14000000 Jun 21 03:54 foo1.txt 13672 -rw-r--r-- 1 terdon terdon 14000000 Jun 21 03:55 foo2.txt 
dd if=/dev/urandom of=foo bs=14MB count=1 
head -c 14MB /dev/urandom > foo 
dd if=/dev/zero of=foo.txt bs=14MB count=1 

In all of the above examples, the file will be 14*1000*1000 if you want 14*1024*1024 , replace MB with M . For example:

dd if=/dev/urandom of=foo bs=14M count=1 head -c 14M /dev/zero > foo 

fallocate only deals in bytes, so you’d have to do (14*1024*1024=14680064)

Источник

Оцените статью
Adblock
detector