Untuk tujuan pengujian, saya harus membuat file dengan ukuran tertentu (untuk menguji batas unggahan).
Apa perintah untuk membuat file dengan ukuran tertentu di Linux?
Untuk tujuan pengujian, saya harus membuat file dengan ukuran tertentu (untuk menguji batas unggahan).
Apa perintah untuk membuat file dengan ukuran tertentu di Linux?
Jawaban:
dd if=/dev/zero of=upload_test bs=file_size count=1
Di mana file_size
ukuran file uji Anda dalam byte
dd
memiliki batas 2 ^ 32 untuk nilai-nilai, sehingga untuk membuat file lebih besar dari 4 GB, ada trik: dd if=/dev/zero of=test bs=1M count=<size in megabytes>
.
Tolong, modern lebih mudah, dan lebih cepat. Di Linux, (pilih satu)
truncate -s 10G foo
fallocate -l 5G bar
Ini perlu untuk dinyatakan bahwa truncate
pada sistem file mendukung file jarang akan membuat file jarang dan fallocate
tidak akan. Sebuah file jarang adalah salah satu di mana unit alokasi yang membentuk file tidak benar-benar dialokasikan sampai digunakan. Namun, meta-data untuk file tersebut akan memakan ruang yang cukup besar tetapi kemungkinan tidak ada di dekat ukuran sebenarnya file tersebut. Anda harus berkonsultasi dengan sumber daya tentang file jarang untuk informasi lebih lanjut karena ada kelebihan dan kekurangan untuk jenis file ini. File non-sparse memiliki blok (unit alokasi) yang dialokasikan sebelumnya yang berarti ruang disediakan sejauh sistem file melihatnya. Juga fallocate
tidak truncate
akan mengatur konten file ke nilai yang ditentukan seperti dd
, alih-alih isi file yang dialokasikan dengan fallocate
atau truncate
mungkin nilai sampah apa pun yang ada di unit yang dialokasikan selama pembuatan dan perilaku ini mungkin atau mungkin tidak diinginkan. Ini dd
adalah yang paling lambat karena itu benar-benar menulis nilai atau potongan data ke seluruh aliran file seperti yang ditentukan dengan opsi baris perintah itu.
Perilaku ini berpotensi berbeda - tergantung pada sistem file yang digunakan dan kesesuaian sistem file tersebut dengan standar atau spesifikasi apa pun. Oleh karena itu disarankan agar penelitian yang tepat dilakukan untuk memastikan bahwa metode yang tepat digunakan.
truncate
. Ini menghasilkan file berukuran nol menggunakan sintaks di atas. 'Halaman manual' untuk fallocate
mengatakan bahwa file yang dibuatnya penuh dengan kosong space
daripada data. Tampaknya itu tidak akan berguna untuk beberapa kasus yang diharapkan seperti "berapa lama waktu yang dibutuhkan untuk menyalin file 1G".
brew install coreutils
. Ini akan menambah g di depan perintah, sehingga Anda harus menjalankannya seperti ini: gtruncate -s 10G foo
. Semoga ini membantu!
NTFS
partisi.
Hanya untuk menindaklanjuti posting Tom , Anda dapat menggunakan dd untuk membuat file jarang juga:
dd if=/dev/zero of=the_file bs=1 count=0 seek=12345
Ini akan membuat file dengan "lubang" di dalamnya pada sebagian besar unix - data tidak akan benar-benar ditulis ke disk, atau mengambil ruang apa pun sampai sesuatu selain nol ditulis ke dalamnya.
count=0
, bs * seek
menjadi ukuran file
Pada OSX (dan Solaris, tampaknya), mkfile
perintah juga tersedia:
mkfile 10g big_file
Ini membuat file 10 GB bernama "big_file". Menemukan pendekatan ini di sini.
truncate
dan fallocate
tidak tersedia. dd
juga berfungsi seperti dijelaskan di atas meskipun m
untuk megabyte, tidak M
.
Gunakan perintah ini:
dd if = $ INPUT-FILE dari = $ OUTPUT-FILE bs = $ BLOCK-SIZE count = $ NUM-BLOCKS
Untuk membuat file besar (kosong), atur $INPUT-FILE=/dev/zero
.
Ukuran total file akan menjadi $BLOCK-SIZE * $NUM-BLOCKS
.
File baru akan dibuat $OUTPUT-FILE
.
Anda dapat melakukannya secara terprogram:
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
int main() {
int fd = creat("/tmp/foo.txt", 0644);
ftruncate(fd, SIZE_IN_BYTES);
close(fd);
return 0;
}
Pendekatan ini sangat berguna untuk kemudian mmap file ke dalam memori.
gunakan perintah berikut untuk memeriksa apakah file memiliki ukuran yang benar:
# du -B1 --apparent-size /tmp/foo.txt
Hati-hati:
# du /tmp/foo.txt
mungkin akan mencetak 0 karena dialokasikan sebagai file Jarang jika didukung oleh sistem file Anda.
lihat juga: man 2 open dan man 2 truncate
Beberapa jawaban ini telah Anda gunakan /dev/zero
untuk sumber data Anda. Jika kecepatan pengujian jaringan pengujian Anda, ini mungkin bukan ide terbaik jika aplikasi Anda melakukan kompresi apa pun, file yang penuh dengan nol kompres dengan sangat baik. Menggunakan perintah ini untuk menghasilkan file
dd if=/dev/zero of=upload_test bs=10000 count=1
Saya dapat memampatkan upload_test
hingga sekitar 200 byte. Jadi Anda bisa menempatkan diri Anda dalam situasi di mana Anda pikir Anda mengunggah file 10KB tetapi sebenarnya akan jauh lebih sedikit.
Apa yang saya sarankan adalah menggunakan /dev/urandom
bukan /dev/zero
. Saya tidak bisa memampatkan output /dev/urandom
sangat banyak sekali.
/dev/zero
, jadi /dev/urandom
bagus.
dd if=/dev/zero of=my_file.txt count=12345
Ada banyak jawaban, tetapi tidak ada yang menjelaskan dengan baik apa lagi yang bisa dilakukan. Melihat ke halaman manual untuk dd , dimungkinkan untuk lebih menentukan ukuran file.
Ini akan membuat /tmp/zero_big_data_file.bin diisi dengan nol, yang memiliki ukuran 20 megabyte:
dd if=/dev/zero of=/tmp/zero_big_data_file.bin bs=1M count=20
Ini akan membuat /tmp/zero_1000bytes_data_file.bin diisi dengan nol, yang memiliki ukuran 1000 byte:
dd if=/dev/zero of=/tmp/zero_1000bytes_data_file.bin bs=1kB count=1
atau
dd if=/dev/zero of=/tmp/zero_1000bytes_data_file.bin bs=1000 count=1
Sebagai perintah shell:
< /dev/zero head -c 1048576 > output
Gunakan fallocate
jika Anda tidak ingin menunggu disk.
Contoh:
fallocate -l 100G BigFile
Pemakaian:
Usage:
fallocate [options] <filename>
Preallocate space to, or deallocate space from a file.
Options:
-c, --collapse-range remove a range from the file
-d, --dig-holes detect zeroes and replace with holes
-i, --insert-range insert a hole at range, shifting existing data
-l, --length <num> length for range operations, in bytes
-n, --keep-size maintain the apparent size of the file
-o, --offset <num> offset for range operations, in bytes
-p, --punch-hole replace a range with a hole (implies -n)
-z, --zero-range zero and ensure allocation of a range
-x, --posix use posix_fallocate(3) instead of fallocate(2)
-v, --verbose verbose mode
-h, --help display this help
-V, --version display version