Saya ingin membuat file besar ~ 10G diisi dengan nol dan nilai acak. Saya sudah mencoba menggunakan:
dd if=/dev/urandom of=10Gfile bs=5G count=10
Itu membuat file sekitar 2Gb dan keluar dengan status keluar '0'. Saya gagal mengerti mengapa?
Saya juga mencoba membuat file menggunakan:
head -c 10G </dev/urandom >myfile
Dibutuhkan sekitar 28-30 menit untuk membuatnya. Tapi saya ingin ini dibuat lebih cepat. Adakah yang punya solusi?
Saya juga ingin membuat beberapa file dengan pola acak yang sama (pseudo) untuk perbandingan. Adakah yang tahu cara untuk melakukan itu?
dd
karena ukuran blok. Anda mungkin ingin melihat posting ini stackoverflow.com/questions/6161823/... ia memiliki beberapa jawaban yang bagus bagaimana menghitung ukuran blok terbaik, serta beberapa skrip / program pengguna, dan saran lain yang digunakandd
.Jawaban:
Bagaimana dengan menggunakan fallocate, alat ini memungkinkan kita untuk melakukan pra-alokasi ruang untuk suatu file (jika filesystem mendukung fitur ini). Misalnya, mengalokasikan 5GB data ke file yang disebut 'contoh', seseorang dapat melakukannya:
Ini jauh lebih cepat daripada dd, dan akan mengalokasikan ruang dengan sangat cepat.
sumber
/dev/zero
?truncate
di masa lalu dan menemukan itu tidak secara fisik mengalokasikan file pada perangkat dan hanya membuat file besar yang sewenang-wenang sampai diakses, terlepas dari ruang yang tersedia. Apakah Anda yakin ini bukan masalahnyafallocate
? Saya akan memeriksanya tetapi saya menggunakan ponsel ...Anda dapat menggunakan
dd
untuk membuat file yang hanya terdiri dari nol. Contoh:Ini sangat cepat karena hanya satu byte yang benar-benar ditulis ke disk fisik. Namun, beberapa sistem file tidak mendukung ini.
Jika Anda ingin membuat file yang berisi konten pseudo-acak, jalankan:
Saya sarankan Anda menggunakan 10M sebagai ukuran buffer (
bs
). Ini karena 10M tidak terlalu besar, tetapi masih memberi Anda ukuran buffer yang baik. Ini seharusnya cukup cepat, tetapi selalu tergantung pada kecepatan disk dan daya pemrosesan Anda.sumber
Menggunakan dd, ini akan membuat file 10 GB diisi dengan data acak:
count
dalam megabita.Sumber: stackoverflow - Bagaimana cara membuat file dengan ukuran tertentu di Linux?
sumber
dd if=/dev/urandom of=10Gfile bs=500M count=20
, yang memberi saya 10237226010 byte hanya dalam waktu kurang dari 20 menit.Menjawab bagian pertama dari pertanyaan Anda:
Mencoba menulis buffer 5GB pada suatu waktu bukanlah ide yang baik karena kernel Anda mungkin tidak mendukungnya. Bagaimanapun, itu tidak akan memberi Anda manfaat kinerja. Menulis 1 jt sekaligus adalah maksimum yang baik.
sumber
Pertanyaan ini dibuka 5 tahun yang lalu. Saya hanya menemukan ini dan ingin menambahkan temuan saya.
Jika Anda hanya menggunakan
itu akan bekerja lebih cepat secara signifikan seperti yang dijelaskan oleh xiaodongjie. Tapi, Anda bisa membuatnya lebih cepat dengan menggunakan
eatmydata
likeApa yang
eatmydata
dilakukannya adalah menonaktifkan fsync membuat disk menulis lebih cepat.Anda dapat membaca lebih lanjut tentang hal ini di https://flamingspork.com/projects/libeatmydata/ .
sumber
dd
cukup cepat untuk memulai, dan itu disebut libEAT-MY-DATA karena suatu alasan.