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

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

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

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

24
задан 20.12.2010, 17:50

6 ответов

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

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

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

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

26
ответ дан 07.12.2019, 09:41

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

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

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

7
ответ дан 07.12.2019, 09:41

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

3
ответ дан 07.12.2019, 09:41

Если Вы хотите буквально заполнить жесткий диск, сделайте это:

dd if=/dev/zero of=zeros bs=1M

Можно дополнительно указать количество, если Вы захотите ограничить размер, но если Вы опустите количество, то это будет просто работать, пока Вы не будете вне дискового пространства.

dd if=/dev/zero of=zeros bs=1M count=10240

Как psmears упомянутый, Вы получите лучшую производительность при установке размера блока на 1 МБ (bs=1M) вместо 1 B (bs=1). Это будет все еще требовать времени, но если Вы хотите проверить прогресс своей команды, открыть отдельную консоль и выполнить эти команды:

ps aux | grep dd

Используйте PID dd в этой команде (замените PID PID dd):

kill -USR1 PID

Затем пойдите посмотреть на свой dd терминал. Конечно, это имеет ограниченное применение, когда Вы просто пытаетесь заполнить диск (Вы могли просто использовать df или du для проверки свободного пространства на диске или размера файла, соответственно). Однако существуют другие времена, когда удобно заставить dd произвести свой прогресс.

Дополнительный кредит: одно практическое применение для обнуления свободного пространства состоит в том, что, позже, можно затем удалить "нулевые" файлы и dd весь раздел (или диск при обнулении всех разделов) в файл образа диска (скажите, диск-backup.dd), затем сожмите файл. Свободное пространство теперь очень сжимаемо, таким образом, Ваше сжатое изображение dd будет намного меньшим, чем исходное блочное устройство, содержание которого оно содержит.

Интриги: на молнии большой нулевой файл и электронная почта это всем Вашим друзьям. Скажите им, что это - что-то, действительно охлаждаются.

3
ответ дан 07.12.2019, 09:41

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

yes abcdefghijklmnopqrstuvwxyz0123456789 > largefile
20
ответ дан 07.12.2019, 09:41

Вы создаете нередкий файл на 1 ТБ со следующей командой:

dd if=/dev/zero of=bigfile1 bs=10000000000 count=512

Это было полезно в тестировании, что происходит, когда квоты перехитряют, или файловая система заполняется.

df -h показывает свободное место, становящееся меньшим.

2
ответ дан 07.12.2019, 09:41

Теги

Похожие вопросы