Я тестирую часть кода и хочу заполнить жесткий диск данными. Я обнаружил, что dd
может сделать огромные файлы в одно мгновение, но df
не согласен. Вот что я попробовал:
dd if=/dev/zero of=filename bs=1 count=1 seek=$((10*1024*1024*1024))
ls -lh
показывает файл 10G. Тем не менее, df -h
показывает, что раздел не сократился. Итак, что мне нужно сделать, чтобы df
распознать, что данные взяты? Я надеюсь на что-то быстрое, что я кодирую в модульном тесте.
linux
hard-drive
User1
источник
источник
Ответы:
Проблема
seek=<big number>
заключается в том, что файловая система (обычно) умна: если часть файла никогда не записывалась (и, следовательно, все нули), она не удосужилась выделить для нее место - так что, как вы мы видели, что у вас может быть файл размером 10 ГБ, который не занимает места (это называется «разреженным файлом» и может быть очень полезен в некоторых случаях, например, при определенных реализациях базы данных).Вы можете принудительно распределить пространство с помощью (например):
что займет гораздо больше времени, но на самом деле заполнит диск. Я рекомендую сделать размер блока намного больше единицы, потому что это будет определять, сколько системных вызовов вызывает
dd
процесс - чем меньше размер блока, тем больше системных вызовов и, следовательно, тем медленнее он будет работать. (Хотя за пределами 1 МБ или около того, это, вероятно, не будет иметь большого значения и может даже замедлить процесс ...)источник
В качестве другого варианта этого вы можете использовать yes вместе с одной строкой, и это примерно в 10 раз быстрее, чем запускать dd, если = / dev / urandom of = largefile. Так
источник
Вы создали так называемый «разреженный файл» - файл, который, поскольку большая его часть пуста (т. Е. Читает обратно как \ 0), не занимает места на диске, кроме того, что фактически записано (1B, после 10 ГБ). разрыва).
Я не верю, что вы могли бы создавать огромные файлы, мгновенно занимая реальное дисковое пространство - занимая физическое пространство, значит, файловая система должна выделять блоки диска для вашего файла.
Я думаю, что вы застряли со старомодным «dd if = / dev / zero of = filename bs = 100M count = 100», которое ограничено скоростью последовательной записи вашего диска.
источник
Если вы просто тестируете случаи с заполненными файловыми системами, возможно, Fallocate достаточно хорош. И быстрее тоже! например
источник
fallocate -l 150G foo
. Тем не менее +1 за упоминание инструмента.Прекратите использование
seek
и используйте очень большойbs
и / илиcount
. Поскольку вы создаете разреженный файл , и, очевидно, вам не нужно этого делать.источник
Если вы хотите буквально заполнить жесткий диск, сделайте это:
Вы можете при желании указать количество, если вы хотите ограничить размер, но если вы опустите счет, он будет работать до тех пор, пока у вас не будет свободного места на диске.
Как упоминалось в psmears, вы получите лучшую производительность, если установите размер блока в 1 МБ (bs = 1M) вместо 1 B (bs = 1). Это все еще займет некоторое время, но если вы хотите проверить ход выполнения вашей команды, откройте отдельную консоль и выполните следующие команды:
Используйте PID dd в этой команде (замените PID на pid dd):
Тогда посмотрите на ваш терминал. Конечно, это ограниченное использование, когда вы просто пытаетесь заполнить диск (вы можете просто использовать df или du для проверки свободного места на диске или размера файла, соответственно). Однако бывают и другие случаи, когда удобно, чтобы dd выводил свой прогресс.
Дополнительный кредит: одно практическое использование для обнуления свободного места состоит в том, что после этого вы можете затем удалить «нулевые» файлы и добавить весь раздел (или диск, если вы обнулили все разделы) в файл образа диска (скажем, , disk-backup.dd), затем сожмите файл. Свободное пространство теперь очень сжимаемо, поэтому ваше сжатое dd-изображение будет намного меньше, чем оригинальное блочное устройство, содержимое которого оно содержит.
Shenanigans: заархивируйте большой файл с нулями и отправьте его по электронной почте всем своим друзьям. Скажи им, что это действительно круто.
источник
Вы создаете не разреженный файл объемом 1 ТБ с помощью следующей команды:
Это было полезно при тестировании того, что происходит, когда квоты превышены или файловая система заполнена.
df -h
показывает, что доступное пространство становится меньше.источник