Saya sedang melakukan pengujian sepotong kode dan saya ingin mengisi hard drive dengan data. Saya menemukan bahwa dd
dapat membuat file besar dalam sekejap, tetapi df
tidak setuju. Inilah yang saya coba:
dd if=/dev/zero of=filename bs=1 count=1 seek=$((10*1024*1024*1024))
ls -lh
menunjukkan file 10G. Namun, df -h
menunjukkan bahwa partisi tersebut tidak menyusut. Jadi apa yang harus saya lakukan untuk df
mengenali data yang sekarang diambil? Saya berharap sesuatu yang cepat yang saya kode dalam unit test.
linux
hard-drive
Pengguna1
sumber
sumber
Jawaban:
Masalah dengan
seek=<big number>
triknya adalah bahwa sistem file (biasanya) pintar: jika bagian dari file tidak pernah ditulis (dan karena itu semua nol), tidak perlu repot untuk mengalokasikan ruang untuk itu - jadi, seperti yang Anda pernah dilihat, Anda dapat memiliki file 10GB yang tidak memakan ruang (ini dikenal sebagai "file jarang", dan dapat sangat berguna dalam beberapa kasus, misalnya implementasi database tertentu).Anda dapat memaksa ruang yang akan dialokasikan dengan (misalnya):
yang akan memakan waktu lebih lama, tetapi sebenarnya akan mengisi disk. Saya sarankan untuk membuat ukuran blok jauh lebih tinggi dari satu, karena ini akan menentukan berapa banyak sistem yang
dd
membuat proses panggilan - semakin kecil ukuran blok , semakin banyak syscalls, dan oleh karena itu semakin lambat akan berjalan. (Meskipun melampaui 1MB atau lebih mungkin tidak akan membuat banyak perbedaan dan bahkan dapat memperlambat segalanya ...)sumber
Sebagai pilihan lain untuk ini, Anda dapat menggunakan yes bersama dengan string tunggal dan sekitar 10 kali lebih cepat daripada menjalankan dd jika = / dev / urandom dari = largefile. Seperti ini
sumber
Anda telah membuat apa yang dikenal sebagai "file jarang" - file yang, karena sebagian besar kosong (yaitu dibaca kembali sebagai \ 0), tidak mengambil ruang pada disk selain apa yang sebenarnya ditulis (1B, setelah 10GB kesenjangan).
Saya tidak percaya Anda bisa membuat file besar, mengambil ruang disk aktual dalam sekejap - mengambil ruang fisik berarti sistem file perlu mengalokasikan blok disk ke file Anda.
Saya pikir Anda terjebak dengan "mode lama dd = / dev / nol = nama file bs = 100M hitung = 100" yang dibatasi oleh kecepatan tulis berurutan drive Anda.
sumber
Jika Anda hanya menguji untuk kasus dengan sistem file yang diisi, mungkin fallocate cukup baik. Dan juga lebih cepat! misalnya
sumber
fallocate -l 150G foo
. Namun demikian +1 untuk menyebutkan alat.Hentikan penggunaan
seek
dan gunakan yang sangat besarbs
dan / ataucount
. Karena Anda membuat file yang jarang , dan jelas Anda tidak perlu melakukan itu.sumber
Jika Anda ingin benar-benar mengisi hard drive, lakukan ini:
Anda bisa menentukan jumlah jika Anda ingin membatasi ukuran, tetapi jika Anda menghilangkan jumlah, itu hanya akan berjalan sampai Anda kehabisan ruang disk.
Seperti yang disebutkan psmears, Anda akan mendapatkan kinerja yang lebih baik jika Anda mengatur ukuran blok menjadi 1 MB (bs = 1M) daripada 1 B (bs = 1). Ini masih membutuhkan waktu, tetapi jika Anda ingin memeriksa progres perintah Anda, buka konsol terpisah dan jalankan perintah ini:
Gunakan PID dd dalam perintah ini (ganti PID dengan PID dd):
Kemudian lihat terminal dd Anda. Tentu saja, ini adalah penggunaan terbatas ketika Anda hanya mencoba untuk mengisi drive (Anda bisa menggunakan df atau du untuk memeriksa ruang disk atau ukuran file, masing-masing). Namun, ada saat-saat lain ketika berguna untuk membuat output dd kemajuannya.
Kredit tambahan: satu penggunaan praktis untuk memberi nol ruang kosong adalah, setelah itu, Anda kemudian dapat menghapus file "nol" dan menemukan seluruh partisi (atau disk, jika Anda telah memusatkan semua partisi) ke file gambar disk (katakanlah , disk-backup.dd), lalu kompres file. Ruang kosong sekarang sangat dapat dikompresi, jadi gambar Anda yang terkompresi akan jauh lebih kecil daripada perangkat blok asli yang isinya.
Shenanigans: zip file nol besar dan kirim email ke semua teman Anda. Katakan pada mereka itu sesuatu yang sangat keren.
sumber
Anda membuat file 1 TB non-jarang dengan perintah berikut:
Ini berguna dalam menguji apa yang terjadi ketika kuota terlampaui, atau sistem file terisi.
df -h
menunjukkan ruang yang tersedia semakin kecil.sumber