Cara untuk mengisi / menggunakan banyak ruang disk secara instan?

45

Pada VM Linux saya ingin MENGUJI pemantauan NAGIOS lebih dalam daripada hanya mematikan VM atau melepaskan NIC virtual; Saya ingin menguji atau "memberlakukan alarm ruang disk" melalui menempati beberapa% ruang kosong untuk waktu yang singkat.

Saya tahu bahwa saya bisa menggunakan a

dd if=/dev/zero of=/tmp/hd-fillup.zeros bs=1G count=50

atau sesuatu seperti itu ... tetapi ini membutuhkan waktu dan memuat sistem dan memerlukan waktu lagi saat menghapus file uji dengan rm.

Apakah ada cara cepat (hampir instan) untuk mengisi partisi yang tidak memuat sistem dan membutuhkan banyak waktu? Saya sedang memikirkan sesuatu yang mengalokasikan ruang, tetapi tidak "mengisinya".

Axel Werner
sumber
maaf, lupa menyebutkan bahwa itu sistem file >> ext3.
Axel Werner
Anda perlu memutakhirkannya ke ext4 untuk mendukung fallocate.
Rui F Ribeiro
1
Zip bomb selalu berhasil
galois
1
@ jaska Jadikan itu sebagai jawaban. Itu adalah ide pertama yang saya dapatkan ketika membaca judul ...
Crowley
Kenapa tidak kamu gunakan /dev/full? (Dengan asumsi itu ada). Coba echo 'test' > /dev/fulldi Debian.
Ismael Miguel

Jawaban:

63

Cara tercepat untuk membuat file di sistem Linux menggunakan fallocate:

fallocate -l 50G file 

Dari manusia:

fallocate digunakan untuk memanipulasi ruang disk yang dialokasikan untuk suatu file, baik untuk membatalkan alokasi atau melakukan pra-alokasi.
Untuk sistem file yang mendukung panggilan sistem fallocate, pra-alokasi dilakukan dengan cepat dengan mengalokasikan blok dan menandainya sebagai tidak diinisialisasi, tidak memerlukan IO ke blok data. Ini jauh lebih cepat daripada membuat file dengan mengisinya dengan nol.
Didukung untuk XFS (sejak Linux 2.6.38), ext4 (sejak Linux 3.0), Btrfs (sejak Linux 3.7) dan tmpfs (sejak Linux 3.5).

Rui F Ribeiro
sumber
1
Mengapa Anda menjalankannya sudo?
gerrit
1
@ Terjemahan Menambahkan poin itu ke jawabannya.
Rui F Ribeiro
3
" fallocateMembutuhkan root privilege" Tidak di sistem saya (Linux Mint 17.3, downstream Ubuntu, jadi Debian). (sistem file ext4)
TJ Crowder
1
+1 meskipun OP secara eksplisit menyebutkan bahwa sistem file-nya adalah ext3.
syneticon-dj
1
@RuiFRibeiro, terima kasih! untuk sles11sp4 ive sudah bisa membuat file, memformatnya dengan ext4, tetapi ketika tidak bisa me-mount dalam mode RW. kemudian saya menemukan pesan kernel di / var / log / messages yang mengatakan, ext4 hanya didukung sebagai read-only. : /
Axel Werner
13

Alternatif lain termasuk:

  1. untuk mengubah ambang alarm ke sesuatu yang dekat atau di bawah penggunaan saat ini, atau
  2. untuk membuat partisi uji yang sangat kecil dengan inode terbatas, ukuran, atau atribut lainnya.

Mampu menguji hal-hal seperti berlari ke persentase root, jika ada, mungkin juga berguna.

thrig
sumber
Persentase root reserved biasanya adalah 10% kecuali Anda men-tweak - itu berakhir pemborosan sistem terlalu besar di partisi besar / disk modern. Saat mendefinisikan alarm, Anda sebaiknya sudah memperhitungkannya.
Rui F Ribeiro
+1 untuk hal pertama. seratus kali benar. kenapa saya harus benar-benar membuat sesuatu pada disk mesin? bagaimana jika sesuatu (seperti coredump, pekerjaan batch menghasilkan file sementara besar, ...) terjadi pada saat pengujian saya dan seluruh disk secara tidak sengaja dimakan?
Fiisch
2
@Fisch - Kenapa? Untuk memastikan ambang tanda peringatan Anda benar dan bahwa Anda tidak melakukan sesuatu seperti tanpa sengaja mengatur persentase bebas inode alih-alih persentase ruang bebas disk (yang pernah saya lihat dilakukan sebelumnya). Jika ada sesuatu yang gagal karena Anda mengisi disk ke ambang peringatan, maka ambang peringatan Anda terlalu rendah - seluruh titik peringatan adalah bahwa itu seharusnya mengingatkan Anda sebelum segala sesuatu mulai rusak.
Johnny
Kucing, poin bagus. Tetapi tidak ada solusi untuk saya. Saya tidak memiliki kontrol atas konfigurasi VM (tidak dapat mengubah partisi atau disk virtual), juga tidak memiliki kontrol atas Server NAGIOS.
Axel Werner
2
@AxelWerner Bisakah Anda mengulang-mount file sebagai partisi "palsu"? Itu masih akan memungkinkan Anda untuk menguji tanpa secara serius mempengaruhi apa pun. Memformatnya dengan salah satu sistem file yang didukung dan dan Anda dapat bermain-main dengan fallocate juga.
Tonny
9
  1. fallocate -l 50G big_file

  2. truncate -s 50G big_file

  3. dd of=bigfile bs=1 seek=50G count=0

Karena ketiga cara tersebut dapat mengisi sebuah partisi dengan cepat.

Jika Anda suka menggunakan dd , biasanya Anda dapat mencobanya dengan seek . Hanya mengatur seek=file_size_what_you_needdan mengatur count=0. Itu akan memberi tahu sistem ada file , dan ukurannya adalah apa yang Anda tetapkan, tetapi sistem tidak akan membuatnya sebenarnya. Dan digunakan dengan cara ini, Anda dapat membuat file yang lebih besar dari ukuran partisi.


Contoh, pada partisi ext4 dengan kurang dari 3G tersedia. Gunakan dd untuk membuat file 5T yang ada sebagai metadata - hampir tidak memerlukan ruang blok.

df -h . ; dd of=biggerfile bs=1 seek=5000G count=0 ; ls -log biggerfile ; df -h .

Keluaran:

Filesystem      Size  Used Avail Use% Mounted on
/dev/sda9        42G   37G  2.8G  94% /home
0+0 records in
0+0 records out
0 bytes copied, 4.9296e-05 s, 0.0 kB/s
-rw-rw-r-- 1 5368709120000 Jun 29 13:13 biggerfile
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda9        42G   37G  2.8G  94% /home
Se ven
sumber
1
dapatkah Anda menambahkan lebih banyak informasi ke jawaban Anda?
kucing
Saya hanya menambahkan lebih banyak pemikiran dalam pertanyaan jadi untuk orang-orang yang mencari pertanyaan yang sama dengan cara lain. abaikan saja itu bagaimana jika Anda tidak.
Se ven
Ini count=0metode yang cukup menarik, saya telah menambahkan contoh.
agc
7
Perhatikan bahwa ddcontoh di atas mungkin mengalokasikan file jarang. Dalam hal ini ukuran file adalah 50G, sebenarnya hanya menggunakan blok (atau bahkan tidak) dan disk tidak penuh. YMMV.
PETA
2
Saya menguji saran Anda pada sistem file ext3 saya. itu tidak berfungsi seperti yang diharapkan. truncate dan dd memang membuat file dengan ukuran file besar, tetapi "df -h" tidak mengenalinya. masih menunjukkan ruang hd gratis yang sama.
Axel Werner
0

Anda juga dapat memanfaatkan alat bantu stres yang didukung pada sejumlah besar sistem berbasis Linux:

stress-ng --fallocate 4 --fallocate-bytes 70% --timeout 1m --metrics --verify --times
theosophe74
sumber