файла - создать файл определенного размера linux




Как создать файл с заданным размером в Linux? (9)

В OSX (и, похоже, Solaris) команда mkfile доступна:

mkfile 10g big_file

Это делает файл размером 10 ГБ с именем «big_file». Здесь нашел этот подход here.

Для тестирования я должен создать файл определенного размера (для проверки предела загрузки).

Что такое команда для создания файла определенного размера в Linux?


В некоторых из этих ответов вы используете /dev/zero для источника ваших данных. Если скорость загрузки тестовой сети, возможно, не самая лучшая идея, если ваше приложение делает какое-либо сжатие, файл, полный нулей, сжимает очень хорошо. Использование этой команды для генерации файла

 dd if=/dev/zero of=upload_test bs=10000 count=1

Я мог бы сжать upload_test до 200 байтов. Таким образом, вы можете поставить себя в ситуации, когда, по вашему мнению, вы загружаете файл 10 КБ, но на самом деле это будет намного меньше.

Я предлагаю использовать /dev/urandom вместо /dev/zero . Я вообще не мог сжимать вывод /dev/urandom .


Есть много ответов, но никто не объяснил, что еще можно сделать. Заглядывая в man-страницы для dd , можно лучше указать размер файла.

Это создаст /tmp/zero_big_data_file.bin, заполненный нулями, размер которого составляет 20 мегабайт:

    dd if=/dev/zero of=/tmp/zero_big_data_file.bin  bs=1M count=20

Это создаст файл /tmp/zero_1000bytes_data_file.bin, заполненный нулями, размер которого составляет 1000 байтов:

    dd if=/dev/zero of=/tmp/zero_1000bytes_data_file.bin  bs=1kB count=1

или

    dd if=/dev/zero of=/tmp/zero_1000bytes_data_file.bin  bs=1000 count=1
  • Во всех примерах, bs - размер блока, а count - количество блоков
  • БЛОКИ И БАЙТЫ могут сопровождаться следующими мультипликативными суффиксами: c = 1, w = 2, b = 512, kB = 1000, K = 1024, MB = 1000 * 1000, M = 1024 * 1024, xM = M GB = 1000 * 1000 * 1000, G = 1024 * 1024 * 1024 и т. Д. Для T, P, E, Z, Y.

Используйте эту команду:

dd if=$INPUT-FILE of=$OUTPUT-FILE bs=$BLOCK-SIZE count=$NUM-BLOCKS

Чтобы создать большой (пустой) файл, установите $INPUT-FILE=/dev/zero .
Общий размер файла будет $BLOCK-SIZE * $NUM-BLOCKS .
Новый файл будет $OUTPUT-FILE .


Пожалуйста, современное проще и быстрее. В Linux (выберите один)

truncate -s 10G foo
fallocate -l 5G bar

Нужно сказать, что truncate в файловой системе, поддерживающей разреженные файлы, создаст разреженный файл, а fallocate - нет. Редкий файл - это тот, где единицы распределения, составляющие файл, фактически не распределяются до использования. Метаданные для файла , однако, занимают некоторое значительное пространство, но, вероятно, нет, где около фактического размера файла. Вы должны проконсультироваться с ресурсами о разреженных файлах для получения дополнительной информации, поскольку для этого типа файлов есть преимущества и недостатки. В незащищенном файле его блоки (блоки распределения) распределяются заранее, что означает, что пространство зарезервировано, насколько файловая система видит его. Также fallocate и truncate не будут устанавливать содержимое файла на указанное значение, например dd , вместо этого содержимое файла, выделенного с помощью fallocate или truncate может быть любым значением мусора, которое существовало в выделенных единицах во время создания, и это поведение может или не может желательно. dd является самым медленным, поскольку он фактически записывает значение или фрагмент данных во весь поток файлов, как указано в его параметрах командной строки.

Такое поведение потенциально может быть различным - в зависимости от используемой файловой системы и соответствия этой файловой системы любому стандарту или спецификации. Поэтому рекомендуется проводить надлежащие исследования для обеспечения использования соответствующего метода.


Чтобы следить за постом Tom's , вы можете использовать dd для создания разреженных файлов:

dd if=/dev/zero of=the_file bs=1 count=0 seek=12345

Это создаст файл с «дыркой» в нем в большинстве unixes - данные на самом деле не будут записаны на диск или заняты каким-либо пространством, пока в него не будет записано что-то ноль, кроме нуля.


Я полагаю, что наиболее эффективный подход предполагает создание файла с использованием openO_CREAT и O_WRONLY , если вы не хотите читать из файла в той же программе) и установить размер с помощью ftruncate .


вы можете сделать:

[[email protected]:~]$ perl -e 'print "\0" x 100' > filename.ext

Если вы замените 100 на количество байтов, которые вы хотите записать.


dd if=/dev/zero of=upload_test bs=file_size count=1

Где file_size - размер вашего тестового файла в байтах





command-line