Як заповнити жорсткий диск в Linux


23

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

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

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


Вам більше пощастить, якщо ви запитаєте у serverfault.com

До речі, 10 * 1024 * 1024 * 1024 є таким же, як 10 * 2 ** 30, трохи простіше.
deltaray

Відповіді:


25

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

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

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

що займе набагато більше часу, але фактично заповнить диск. Я рекомендую зробити розмір блоку набагато вищим, ніж один, оскільки це визначатиме кількість викликів системи dd Процес робить - чим менше блокування, тим більше системних викликів, і тому повільніше він буде працювати. (Незважаючи на те, що перевищує 1 Мб або більше, він, ймовірно, не матиме великого значення і може навіть сповільнити речі ...)


Я зазвичай використовую bs = (незалежно від того, який розмір кешу на диску я пишу). Це спрацювало добре на сьогоднішній день, коли візуалізації розділів на великі жорсткі диски для подальшої зміни розміру. ЕТА: критичне слово HALF.
atroon

18

Як інший варіант для цього, ви можете використовувати так разом з одним рядком і його приблизно в 10 разів швидше, ніж запускати dd, якщо = / dev / urandom = largefile. Подобається це

yes abcdefghijklmnopqrstuvwxyz0123456789 > largefile

Це, на диво, приблизно так само швидко, як при використанні dd, якщо = / dev / zero = filename bs = 1M.
bhinesley

Синтаксис легко запам'ятати.
AWT

7

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

Я не вірю, що ви можете створити величезні файли, обмірковуючи фактичний простір на диску - забираючи фізичний простір, це означає, що файловій системі необхідно виділити дискові блоки у ваш файл.

Я думаю, що ви застрягли з oldfashioned "dd якщо = / dev / zero = filename bs = 100M count = 100", яка обмежена швидкістю запису вашого диска.


6

Якщо ви просто перевіряєте випадки з заповненими файловими системами, можливо, fallocate є достатньо хорошим. І швидше теж! напр.

fallocate -l 150G


2
Для цього потрібно вказати ім'я файлу: fallocate -l 150G foo. Проте +1 для згадування інструменту.
Kamil Maciorowski


3

Якщо ви хочете буквально заповнити жорсткий диск, виконайте такі дії:

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

За бажанням можна вказати count, якщо ви хочете обмежити розмір, але якщо ви пропустите підрахунок, він просто запуститься, поки не вистачить місця на диску.

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):

kill -USR1 PID

Потім перегляньте ваш термінал dd. Звичайно, це обмежене використання, коли ви просто намагаєтеся заповнити диск (ви можете просто використовувати df або du, щоб перевірити вільний простір на диску або розмір файлу, відповідно). Однак є й інші випадки, коли доцільно зробити так, щоб dd виводив свій прогрес.

Додатковий кредит: одне практичне використання для обнулення вільного простору полягає в тому, що після цього ви можете видалити "нульові" файли та dd весь розділ (або диск, якщо ви обнуляли всі розділи) до файлу образу диска (скажімо, , disk-backup.dd), а потім стиснути файл. Тепер вільний простір є дуже стисливим, тому стиснене зображення dd буде набагато меншим, ніж оригінальний блок, вміст якого він містить.

Shenanigans: застібайте великий файл нулів та надсилайте його всім друзям. Скажіть їм, що це щось дійсно здорово.


2

Ви створюєте нерозріджений 1 ТБ файл з такою командою:

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

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

df -h показує, що доступне місце зменшується.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.