Как заполнить жесткий диск в Linux

Как заполнить жесткий диск в Linux

Я тестирую часть кода и хочу заполнить жесткий диск данными. Я обнаружил, что это ddможет создавать огромные файлы в одно мгновение, но dfне подходит. Вот что я попробовал:

dd if=/dev/zero of=filename bs=1 count=1 seek=$((10*1024*1024*1024))

ls -lhпоказывает файл 10G. Однако df -hпоказывает, что раздел не сжался. Так что мне нужно сделать, чтобы dfраспознать, что данные теперь взяты? Я надеюсь на что-то быстрое, что я закодирую в юнит-тесте.

решение1

Проблема этого seek=<big number>трюка в том, что файловая система (обычно) умна: если часть файла никогда не записывалась (и, следовательно, заполнена нулями), она не утруждает себя выделением для нее места — так что, как вы видели, у вас может быть файл размером 10 ГБ, который не занимает места (это называется «разреженный файл» и может быть очень полезным в некоторых случаях, например, в определенных реализациях баз данных).

Вы можете принудительно выделить пространство (например):

dd if=/dev/zero of=filename bs=$((1024*1024)) count=$((10*1024))

что займет гораздо больше времени, но фактически заполнит диск. Я рекомендую сделать размер блока намного больше единицы, потому что это определит, сколько системных вызовов ddсделает процесс — чем меньше размер блока, тем больше системных вызовов, и, следовательно, тем медленнее он будет работать. (Хотя за пределами 1 МБ или около того это, вероятно, не будет иметь большого значения и может даже замедлить работу...)

решение2

В качестве другого варианта вы можете использовать yes вместе с одной строкой, и это примерно в 10 раз быстрее, чем запуск dd if=/dev/urandom of=largefile. Вот так

yes abcdefghijklmnopqrstuvwxyz0123456789 > largefile

решение3

Вы создали так называемый «разреженный файл» — файл, который, поскольку большая его часть пуста (т. е. читается как \0), не занимает места на диске, кроме того, что фактически записано (1 Б после 10 ГБ пробела).

Я не верю, что можно создавать огромные файлы, мгновенно занимающие реальное дисковое пространство — занятие физического пространства означает, что файловой системе придется выделять блоки на диске для вашего файла.

Думаю, вы застряли со старомодным «dd if=/dev/zero of=filename bs=100M count=100», который ограничен скоростью последовательной записи вашего диска.

решение4

Прекратите использовать seekи используйте очень большой bsи/или count. Как это вы делаетеразреженный файл, и очевидно, что вам не следует этого делать.

Связанный контент