[gilug.org] Crear un fitxer per mida

Lluís Batlle i Rossell llbatlle aqsense com
2010-12-16 09:14:26 UTC


On 16/12/10 09:29, Narcis Garcia - GiLUG wrote:
> Hola, vull saber crear un fitxer reservant primer l'espai, i després
> escriure-hi el contingut. El suport de destinació és lent i el fitxer ha
> de ser gran, així que no vull enregistrar vàries vegades el mateix.
>
> Sé que puc fer això per a crear un fitxer de 1G
>
> dd if=/dev/zero of=elmeufitxer bs=1M count=1024
> però després hi hauria de tornar a escriure el Gigabyte sencer per a
> posar-hi el contingut. M'he trobat diverses vegades amb aquest problema
> sense resoldre.
>
> Algú sap com crear el fitxer només assignant l'espai, és a dir, sense
> haver-lo d'emplenar?

Com que segurament fas servir un sistema de fitxers que suporta forats, 
no hi ha altra manera de reservar l'espai que no sigui escrivint-lo.

"truncate" permet fer un fitxer amb forats de la mida que vulguis, però 
tot i que hi tindràs un fitxer ple de zeros de la mida que has dit, no 
reservarà l'espai a disc fins que hi posis dades a algun lloc. I només 
agafarà espai per les dades que hagis escrit, encara que siguin 
escampades. (la diferència de números entre "ls -l" (mida del fitxer) i 
"ls -s" (el que ocupa a disc).
En principi això dels forats és un avantatge, i no un inconvenient, i és 
per a estalviar espai de disc.

Amb la memòria de processos el linux va de manera semblant... 
"malloc(1000000)" no vol dir que reservis un 1MB de memòria, sino que 
només se'n reserven pàgines de veritat quan hi escrius.

Apa!

-- 
Lluís Batlle i Rossell
Software and Electronics Engineer
AQSENSE S.L.
C/ Pic de Peguera, 15
17003 Girona
Catalunya
Spain
Phone: +34 972 183 215
Fax: +34 972 487 487
http://www.aqsense.com/




Més informació sobre la llista de correu gilug