Come riempire un disco rigido in Linux


24

Sto facendo dei test su un pezzo di codice e voglio riempire un disco rigido con i dati. Ho scoperto che ddpuò creare file enormi in un istante, ma dfnon è d'accordo. Ecco cosa ho provato:

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

ls -lhmostra un file 10G. Tuttavia, df -hmostra che la partizione non si è ridotta. Quindi cosa devo fare per dfriconoscere che i dati sono stati acquisiti? Spero in qualcosa di veloce che codifico in un test unitario.


Avrai più fortuna se chiedi a serverfault.com

A proposito, 10 * 1024 * 1024 * 1024 è uguale a 10 * 2 ** 30, un po 'più semplice.
deltaray,

Risposte:


26

Il problema con il seek=<big number>trucco è che il filesystem è (di solito) intelligente: se una parte di un file non è mai stata scritta (ed è quindi tutta a zero), non si preoccupa di allocare spazio per esso - quindi, come tu ' ho visto, puoi avere un file da 10 GB che non occupa spazio (questo è noto come "file sparse", e può essere molto utile in alcuni casi, ad esempio alcune implementazioni di database).

È possibile forzare lo spazio da allocare (ad esempio):

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

che richiederà molto più tempo, ma riempirà effettivamente il disco. Consiglio di aumentare la dimensione del blocco molto più di una, poiché ciò determinerà quante chiamate di sistema il ddprocesso rende: più piccola è la dimensione del blocco, più syscalls e quindi più lenta verrà eseguita. (Anche se oltre 1 MB o giù di lì probabilmente non farà molta differenza e potrebbe anche rallentare le cose ...)


Di solito uso bs = (qualunque sia la metà della dimensione della cache sull'unità che sto scrivendo). Questo ha funzionato bene fino ad oggi quando l'imaging delle partizioni su dischi rigidi più grandi per il ridimensionamento successivo. ETA: la parola critica HALF.
atroon,

20

Come altra opzione a ciò, puoi usare yes insieme a una singola stringa ed è circa 10 volte più veloce di dd if = / dev / urandom di = largefile. Come questo

yes abcdefghijklmnopqrstuvwxyz0123456789 > largefile

Questo è, sorprendentemente, veloce quanto usare dd if = / dev / zero di = nomefile bs = 1M.
bhinesley,

Anche la sintassi è facile da ricordare.
AWT

7

Hai creato quello che è noto come un "file sparse" - un file che, poiché è in gran parte vuoto (ovvero letto come \ 0), non occupa spazio sul disco oltre a ciò che è effettivamente scritto (1B, dopo 10 GB di gap).

Non credo che potresti creare file enormi, occupando spazio su disco effettivo in un istante - occupare spazio fisico significa che il filesystem deve allocare blocchi di disco sul tuo file.

Penso che tu sia bloccato con il vecchio stile "dd if = / dev / zero di = nomefile bs = 100M count = 100" che è limitato dalla velocità di scrittura sequenziale del tuo disco.


6

Se stai solo testando casi con file system riempiti, forse fallocate è abbastanza buono. E anche più veloce! per esempio

fallocate -l 150G


3
Questo ha bisogno di un nome di file da specificare: fallocate -l 150G foo. Tuttavia +1 per menzionare lo strumento.
Kamil Maciorowski il


3

Se si desidera riempire letteralmente il disco rigido, procedere come segue:

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

Se lo si desidera limitare le dimensioni, è possibile specificare facoltativamente il conteggio, ma se si omette il conteggio, verrà eseguito fino a quando non si sarà esaurito lo spazio su disco.

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

Come menzionato psmears, otterrai prestazioni migliori se imposti la dimensione del blocco su 1 MB (bs = 1M) invece di 1 B (bs = 1). Ci vorrà ancora del tempo, ma se vuoi controllare lo stato di avanzamento del tuo comando, apri una console separata ed esegui questi comandi:

ps aux | grep dd

Usa il PID di dd in questo comando (sostituisci PID con dd's PID):

kill -USR1 PID

Quindi vai a vedere il tuo terminale dd. Naturalmente, questo è di utilità limitata quando stai solo cercando di riempire l'unità (puoi semplicemente usare df o du per controllare rispettivamente lo spazio libero su disco o la dimensione del file). Tuttavia, ci sono altre volte in cui è utile fare in modo che dd produca i suoi progressi.

Credito extra: un uso pratico per azzerare lo spazio libero è che, in seguito, puoi quindi eliminare i file "zero" e dd l'intera partizione (o disco, se hai azzerato tutte le partizioni) in un file di immagine del disco (ad esempio , disk-backup.dd), quindi comprimere il file. Lo spazio libero è ora altamente comprimibile, quindi l'immagine dd compressa sarà molto più piccola del dispositivo a blocchi originale di cui contiene i contenuti.

Shenanigans: comprimere un file zeri di grandi dimensioni e inviarlo via e-mail a tutti i tuoi amici. Di 'loro che è qualcosa di veramente bello.


2

Si crea un file da 1 TB non sparse con il seguente comando:

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

Ciò è stato utile nel testare ciò che accade quando le quote vengono superate o si riempie un file system.

df -h mostra lo spazio disponibile che si riduce.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.