Способ мгновенно заполнить / использовать много дискового пространства?

46

На виртуальной машине Linux я хотел бы проверить NAGIOS-мониторинг более глубоко, чем просто выключение виртуальной машины или отключение виртуальной сетевой карты; Я хотел бы проверить или «включить сигнализацию дискового пространства», занимая несколько% свободного пространства в течение короткого периода времени.

Я знаю, что я мог бы просто использовать

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

или что-то в этом роде ... но это требует времени и загружает систему и снова требует времени при удалении тестовых файлов с помощью команды rm.

Есть ли быстрый (почти мгновенный) способ заполнить раздел, который не загружает систему и занимает много времени? Я думаю о чем-то, что выделяет пространство, но не «заполняет» его.

Аксель Вернер
источник
извините, забыл упомянуть, что это файловая система >> ext3.
Аксель Вернер
Вам нужно обновить его до ext4 для поддержки fallocate.
Руи Ф Рибейро
1
Зомб
1
@jaska Сделай ответ. Это была самая первая идея, которую я получил, когда читал заголовок ...
Кроули
Почему ты не используешь /dev/full? (Предполагая, что это существует). Попробуйте echo 'test' > /dev/fullна Debian.
Исмаэль Мигель

Ответы:

64

Самый быстрый способ создать файл в системе Linux - использовать fallocate:

fallocate -l 50G file 

От мужчины:

Fallocate используется для манипулирования выделенным дисковым пространством для файла, чтобы освободить или предварительно выделить его.
Для файловых систем, которые поддерживают системный вызов fallocate, предварительное распределение выполняется быстро, выделяя блоки и помечая их как неинициализированные, не требуя ввода-вывода для блоков данных. Это гораздо быстрее, чем создавать файл, заполняя его нулями.
Поддерживается для XFS (начиная с Linux 2.6.38), ext4 (начиная с Linux 3.0), Btrfs (начиная с Linux 3.7) и tmpfs (начиная с Linux 3.5).

Руи Ф Рибейро
источник
1
Почему ты это делаешь sudo?
геррит
1
@gerrit Добавил эту точку в ответ.
Руи Ф. Рибейро
3
« fallocateнужны привилегии root» Не в моей системе (Linux Mint 17.3, Ubuntu, то есть Debian). (файловая система ext4)
TJ Crowder
1
+1 хотя ОП явно упомянул, что его файловая система - ext3.
Syneticon-DJ DJ
1
@RuiFRibeiro, спасибо! для sles11sp4 я смог создать файл, отформатировать его с помощью ext4, но не смог смонтировать его в режиме RW. позже я нашел сообщение ядра в / var / log / messages, в котором говорится, что ext4 поддерживается только для чтения. : /
Аксель Вернер
13

Другие альтернативы включают в себя:

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

Возможность проверки таких вещей, как запуск в зарезервированный процент root, если таковой имеется, также может быть полезной.

thrig
источник
Зарезервированный процент root обычно составляет 10%, если вы не настроите его - это приведет к слишком большой трате системы в больших разделах / современных дисках. При определении аварийных сигналов лучше уже учесть это.
Руи Ф Рибейро
+1 за первое. сто раз правда. какого черта я должен на самом деле создать что-то на диске компьютера? Что если что-то (например, coredump, пакетное задание, генерирующее большие временные файлы, ...) произойдет во время моего тестирования, и весь диск будет случайно съеден?
Fiisch
2
@ Фиш - Почему? Чтобы убедиться, что ваш порог оповещения правильный, и что вы не делаете что-то вроде случайной установки процента свободного места на узле вместо процента свободного места на диске (что я видел ранее). Если что-то выходит из строя из-за того, что вы заполнили диск до порога оповещения, то ваш порог оповещения слишком низок - весь смысл оповещения в том, что он должен предупредить вас, прежде чем что-то начнет ломаться.
Джонни
Кот, хорошая мысль. Но нет решения для меня. Я не контролирую конфигурацию виртуальной машины (не могу изменить разделы или виртуальные диски), а также не могу контролировать сервер NAGIOS.
Аксель Вернер
2
@AxelWerner Можете ли вы смонтировать файл в виде петли как "поддельная" часть? Это все еще позволит вам проверить, не оказывая серьезного влияния на что-либо. Отформатируйте его с помощью одной из поддерживаемых файловых систем, и вы также можете поиграть с Fallocate.
Тонни
9
  1. fallocate -l 50G big_file

  2. truncate -s 50G big_file

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

Поскольку эти три способа могут быстро заполнить раздел.

Если вам нравится использовать dd , обычно вы можете попробовать его с seek . Просто установите 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приведенный выше пример вполне может выделить разреженный файл. В этом случае размер файла составляет 50 ГБ, на самом деле он использует только блок (или даже не), поэтому диск не переполняется. YMMV.
MAP
2
Я проверил ваше предложение на моей файловой системе ext3. это не сработало, как ожидалось. truncate и dd создали файл большого размера, но «df -h» не распознал его. по-прежнему показывает то же свободное место на жестком диске.
Аксель Вернер
0

Вы также можете воспользоваться инструментом стресс-нг, который поддерживается во многих системах на базе Linux:

stress-ng --fallocate 4 --fallocate-bytes 70% --timeout 1m --metrics --verify --times
theosophe74
источник