Спосіб негайно заповнити / використати багато місця на диску?


45

У Linux VM я хотів би протестувати моніторинг NAGIOS глибше, ніж просто вимкнути VM або відключити віртуальний NIC; Я хотів би протестувати або «застосувати тривогу на диску на диску», зайнявши кілька відсотків вільного місця за короткий проміжок часу.

Я знаю, що я міг просто скористатися

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

або щось подібне ... але це вимагає часу і завантажує систему і вимагає знову часу, коли вилучаєте тестові файли за допомогою rm.

Чи існує швидкий (майже миттєвий) спосіб заповнити розділ, який не завантажує систему і займає багато часу? я думаю про щось, що виділяє простір, але не "заповнює" його.


Вибачте, забув згадати, що його файлова система >> ext3.
Аксель Вернер

Вам потрібно оновити його до ext4, щоб підтримувати помилки.
Rui F Ribeiro

1
Zip bomb завжди працює
galois

1
@jaska Зробіть це відповіддю. Це була найперша ідея, яку я отримав, читаючи заголовок ...
Кроулі

Чому ви не використовуєте /dev/full? (Якщо припустити, що він існує). Спробуйте echo 'test' > /dev/fullна Debian.
Ісмаїл Мігель

Відповіді:


63

Найшвидший спосіб створити файл у системі Linux fallocate:

fallocate -l 50G file 

Від людини:

fallocate використовується для маніпулювання виділеним дисковим простором для файлу, або для його розміщення, або для попереднього розміщення.
Для файлових систем, які підтримують виклик фаллокативної системи, попереднє розміщення здійснюється швидко, виділяючи блоки та позначаючи їх як неініціалізовані, не вимагаючи IO для блоків даних. Це набагато швидше, ніж створити файл, заповнивши його нулями.
Підтримується для XFS (з Linux 2.6.38), ext4 (з Linux 3.0), Btrfs (з Linux 3.7) і tmpfs (з Linux 3.5).


1
Чому ви це запускаєте sudo?
gerrit

1
@gerrit Додав цю точку відповіді.
Rui F Ribeiro

3
" fallocateпотребує кореневих привілеїв" Не в моїй системі (Linux Mint 17.3, нижче від Ubuntu, таким чином Debian). (файлова система ext4)
TJ Crowder

1
+1, хоча ОП прямо вказав, що його файлова система є ext3.
syneticon-dj

1
@RuiFRibeiro, дякую! для sles11sp4 ive вдалося створити файл, відформатувати його з ext4, але там, де не вдалося встановити його в режимі RW. пізніше я знайшов повідомлення ядра в / var / log / повідомленнях, які сказали, ext4 підтримується лише як лише для читання. : /
Аксель Вернер

13

Інші альтернативи включають:

  1. щоб змінити пороги тривоги на щось близьке або нижче поточного використання, або
  2. створити дуже невеликий тестовий розділ з обмеженими входами, розміром чи іншими атрибутами.

Можливість перевірити такі речі, як, наприклад, запуск у кореневому резерві, якщо вони є, також може бути корисною.


відсоток зарезервованого корінця зазвичай становить 10%, якщо ви його не налаштовуєте - це призводить до занадто великої трати системи на великих розділах / сучасних дисках. Визначаючи тривожні сигнали, краще вже врахувати це.
Rui F Ribeiro

+1 для першого. сто разів правдивий. чому чорт мусить насправді щось створити на машинному диску? що робити, якщо щось (наприклад, coredump, пакетна робота, що генерує великі тимчасові файли, ...) трапляється під час мого тестування, і весь диск випадково з'їдається?
Фійш

2
@Fisch - Чому? Щоб переконатися, що ваш поріг сповіщення правильний, і що ви не робите щось на кшталт випадкового встановлення вільного відсотка замість відсотка вільного місця на диску (що я бачив раніше) Якщо щось не вдається через те, що ви заповнили диск до порогу сповіщення, то ваш поріг сповіщення занадто низький - вся суть оповіщення полягає в тому, що він повинен попереджати вас до того, як все почне ламатись.
Джонні

Кіт, хороший пункт. Але рішення для мене немає. Я не маю контролю над конфігурацією VM (не можу змінювати розділи або віртуальні диски), а також не контролюю сервер NAGIOS.
Аксель Вернер

2
@AxelWerner Чи можете ви зафіксувати певний файл як "підроблений" розділ? Це все ж дозволить вам протестувати, не зачіпаючи нічого серйозного. Відформатуйте його в одній з підтримуваних файлових систем, і ви також можете пограти з помилкою.
Тонні

9
  1. fallocate -l 50G big_file

  2. truncate -s 50G big_file

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

Оскільки ці три способи можуть швидко заповнити розділ.

Якщо вам подобається використання дд , як правило , ви можете спробувати його з шукати . Просто встановіть seek=file_size_what_you_needі встановіть count=0. Це скаже системі, що є файл , і його розмір - це те, що ви встановили, але система фактично не створить його. І використовуючи цей спосіб, ви можете створити файл, який перевищує розмір розділу.


Наприклад, на розділі ext4 з меншою кількістю доступних 3G. Використовуйте dd для створення файлу 5T, який існує як метадані - практично не вимагаючи місця в блоці.

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

Вихід:

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

1
ви можете додати ще трохи інформації до своєї відповіді?
кіт

Я просто додаю більше роздумів до готового запитання для людей, які шукають те саме питання іншим способом. ігноруйте це, що якщо ви не є.
Се рад

Цей count=0метод досить цікавий, я додав приклад.
agc

7
Зауважте, що в ddнаведеному вище прикладі цілком можна виділити розріджений файл. У такому випадку розмір файлу становить 50G, він фактично використовує лише блок (або навіть не), і тому диск не заповнюється. YMMV.
КАРТА

2
Я протестував вашу пропозицію на моїй файловій системі ext3. не вийшло, як очікувалося. усікає і dd створив файл з великим розміром файлу, але "df -h" не розпізнав його. як і раніше показує той самий вільний hd простір.
Аксель Вернер

0

Ви також можете скористатися інструментом стрес-ng, який підтримується в широкій кількості систем на базі Linux:

stress-ng --fallocate 4 --fallocate-bytes 70% --timeout 1m --metrics --verify --times
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.