PDA

Visualizza la versione completa : Creare un file vuoto di grandezza arbitraria


Rommel
29-03-2005, 18:20
ciao a tutti,
conoscete il modo per creare un file vuoto di grandezza arbitraria?

con touch nome_del_file lo creo e come lo rendo grande 680mb?

grazie per le eventuali risposte

Ikitt
29-03-2005, 18:25
Originariamente inviato da Rommel
ciao a tutti,
conoscete il modo per creare un file vuoto di grandezza arbitraria?
con touch nome_del_file lo creo e come lo rendo grande 680mb?
grazie per le eventuali risposte

dovrebbe funzionare:


dd if=/dev/zero of=/path/al/file bs=1k seek=$( expr 680 \* 1024 \* 1024 )

Rommel
29-03-2005, 18:32
funziona :unz:

grazie per l'aiuto :ciauz:

Rommel
29-03-2005, 19:44
no...non funziona.

mi sembra che hai involontariamente scoperto un bug di gnu/linux. risulta che il file 000.0 (il file che voglio rendere di 680Mb) sia grande 680Gb :oVVoVe:

cacao74
29-03-2005, 19:45
Originariamente inviato da Ikitt
dovrebbe funzionare:


dd if=/dev/zero of=/path/al/file bs=1k seek=$( expr 680 \* 1024 \* 1024 )

Su questo non sarei propriamente d'accordo anche se Rommel ha detto che funziona perfettamente.
Se non ho capito male, il comando dovrebbe iniziare a saltare (seek) 680M quindi scrivere il file di ingresso a blocchi di 1k. Io avrei aggiunto anche l'opzione count=1 altrimenti dovrebe scrivere fino ad esaurimento dello spazio sulla partizione. Naturalmente non vengo qui senza dati alla mano.


[sergio@winnie ~]$ time dd if=/dev/zero of=blankCD.iso bs=1k seek=1024
interruzione volontaria con [CTRL]-[C]
entrati 73397+0 record
usciti 73396+0 record
75157504 bytes transferred in 1,597279 seconds (47053463 bytes/sec)


real 0m1.599s
user 0m0.000s
sys 0m0.940s
[sergio@winnie ~]$ ls -lh blankCD.iso
-rw-r--r-- 1 sergio sergio 73M 2005-03-29 19:46 blankCD.iso
[sergio@winnie ~]$ rm blankCD.iso
[sergio@winnie ~]$ time dd if=/dev/zero of=blankCD.iso bs=1k seek=1024 count=1
entrati 1+0 record
usciti 1+0 record
1024 bytes transferred in 0,009862 seconds (103833 bytes/sec)

real 0m0.011s
user 0m0.010s
sys 0m0.000s
[sergio@winnie ~]$ ls -lh blankCD.iso
-rw-r--r-- 1 sergio sergio 1,1M 2005-03-29 19:47 blankCD.iso
[sergio@winnie ~]$


ciao

[EDIT]
come non detto... :D



originariamente inviato da Rommel:
no...non funziona.

mi sembra che hai involontariamente scoperto un bug di gnu/linux. risulta che il file 000.0 (il file che voglio rendere di 680Mb) sia grande 680Gb

Non si tratta di un bug. ---> man dd

Rommel
29-03-2005, 21:18
risolto con:
dd if=/dev/zero of=./000.0 seek=1024 count=1392640

grazie per il suggerimento :ciauz:

cacao74
30-03-2005, 00:37
Originariamente inviato da Rommel
risolto con:
dd if=/dev/zero of=./000.0 seek=1024 count=1392640

grazie per il suggerimento :ciauz:
Anche se per quello che chiedi tu pi 'elegante' scrivere semplicemente:
dd if=/dev/zero of=000.0 bs=1k count=$(expr 680 \* 1024)
come suggeriva il buon Ikitt dove sono sicuro abbia scritto, per una svista, seek in luogo di count.
Il parametro "seek" non ha rilevante importanza in questo caso.

ciao

Ikitt
30-03-2005, 09:31
Originariamente inviato da cacao74
Anche se per quello che chiedi tu pi 'elegante' scrivere semplicemente:
dd if=/dev/zero of=000.0 bs=1k count=$(expr 680 \* 1024)
come suggeriva il buon Ikitt dove sono sicuro abbia scritto, per una svista, seek in luogo di count.
Il parametro "seek" non ha rilevante importanza in questo caso.


C'e` stata una serie di sviste mescolate tra loro ;)
Quel che volevo fare sin da principio e` creare un file "sparso", cosa che si dovrebbe (stavolta ho provato, ma mi auto-concedo il beneficio del dubbio) fare cosi`:


dd if=/dev/zero of=test.img bs=1k count=1 seek=$(expr 680 \* 1024)


Un file sparso ha alcune interessanti caratteristiche:
- ha dimensione prefissata, ma non occupa blocchi su disco (in effetti e` sostanzialmente vuoto, a parte 1k di zeri in questo caso)
- si crea assai piu` velocemente di un file pieno, in quanto... vuoto ;)

esempio:


$ dd if=/dev/zero of=test.img bs=1k count=1 seek=$(expr 680 \* 1024)
1+0 records in
1+0 records out
1024 bytes transferred in 0.000144 seconds (7110873 bytes/sec)
$ ls -lh test.img
-rw-r--r-- 1 xromani xromani 681M Mar 30 09:26 test.img
$ df -h | grep tmp
tmpfs 502M 0 502M 0% /dev/shm
/dev/mapper/sysvg-lv_tmp
2.1G 33M 2.0G 2% /tmp


Il problema, almeno cosi` su due piedi, sta nel riempimento, nel senso che se si prova a copiarci dentro dati, la dimensione cambia in proporzione al contenuto effettivo. Ho un'idea del perche` accade questo, ma non saprei come evitarlo :\

cacao74
30-03-2005, 10:12
Interessante la questione di questi "sparse file". :)

In effetti il mio di utilizzare "dd" permetteva la creazione di un file, vuoto, la cui dimensione fisica corrisponde a quella logica. Il file effettivamente riempito di zeri:
dd if=/dev/zero of=000.0 bs=1k count=$(expr 680 \* 1024)

La creazione di uno "sparse file" invece permette di creare un file effettivamente "vuoto" la cui dimensione fisica non corrisponde alla dimensione logica del file:
dd if=/dev/zero of=test.img bs=1k count=1 seek=$(expr 680 \* 1024)

Infatti negll'esempio precedente andiamo a scrivere 1024 byte di dati dopo aver fatto un salto di 680MB. Logicamente il file ha dimensione logica di 680M+1k, mentre lo spazio realmente occupato di 1k.

Se si necessita di scrivere su un file vuoto "mantenendo" la dimensione logica iniziale, occorre a questo punto, "appendere" i dati, in quanto una scrittura diretta, "cancellerebbe" il salto di 680M.

Sono andato fin troppo oltre le mie competenze, ma credo che per capirlo fino in fondo occorre conoscere come il filesystem gestisce i file e ne archivia le caratteristiche.

ciao

n3uro
30-03-2005, 12:13
Scusate.. ma a che pu servire un file vuoto? :confused: :stordita:

Loading