Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

fichier sparse

4 réponses
Avatar
le pierre
Bonjour,

Quelqu'un pourrait il m'expliquer l'interet ou l'obligation d'avoir
des fichiers "sparse".

Pourquoi y a t il des fichiers sparse ?

Peut on les d=E9-sparser ?

a quoi ca sert ?

Merci

4 réponses

Avatar
Stephane CHAZELAS
2009-03-4, 01:37(-08), le pierre:
Bonjour,

Quelqu'un pourrait il m'expliquer l'interet ou l'obligation d'avoir
des fichiers "sparse".

Pourquoi y a t il des fichiers sparse ?



C'est ce qui se passe quand on fait un lseek() au dela de la fin
d'un fichier ou que quelqu'un fait un truncate() d'un fichier
alors que tu l'as ouvert et que tu ecris dessus apres. En gros,
ca remplit de 0 sans allouer de blocks entre (a part le block au
milieu duquel tu te trouves et d'eventuels blocks
d'indirection). Apres, ca doit aussi dependre du type de file
system.

Peut on les dé-sparser ?



cat < file 1<> file

a quoi ca sert ?


[...]

A economiser de l'espace disque, a garantir que le lseek() ne
prenne pas trop de temps.

Exemples pour en creer un:

~$ echo | dd bs=1M seek > a
0+1 records in
0+1 records out
1 byte (1 B) copied, 0.000225417 s, 4.4 kB/s
~$ ls -l a
-rw-r--r-- 1 chazelas chazelas 10485761 2009-03-04 17:22 a
~$ du a
12 a

~$ exec 3> b
~$ seq 100000 >&3
~$ ls -l b
-rw-r--r-- 1 chazelas chazelas 588895 2009-03-04 17:40 b
~$ du b
580 b
~$ : > b
~$ echo >&3
~$ ls -l b
-rw-r--r-- 1 chazelas chazelas 588896 2009-03-04 17:40 b
~$ du b
8 b
~$ cat < b 1<> b
~$ ls -l b
-rw-r--r-- 1 chazelas chazelas 588896 2009-03-04 17:41 b
~$ du b
580 b

--
Stéphane
Avatar
lepierot
On 4 mar, 18:42, Stephane CHAZELAS wrote:
2009-03-4, 01:37(-08), le pierre:

> Bonjour,

> Quelqu'un pourrait il m'expliquer l'interet ou l'obligation d'avoir
> des fichiers "sparse".

> Pourquoi y a t il des fichiers sparse ?

C'est ce qui se passe quand on fait un lseek() au dela de la fin
d'un fichier ou que quelqu'un fait un truncate() d'un fichier
alors que tu l'as ouvert et que tu ecris dessus apres. En gros,
ca remplit de 0 sans allouer de blocks entre (a part le block au
milieu duquel tu te trouves et d'eventuels blocks
d'indirection). Apres, ca doit aussi dependre du type de file
system.

> Peut on les dé-sparser ?

cat < file 1<> file

> a quoi ca sert ?

[...]

A economiser de l'espace disque, a garantir que le lseek() ne
prenne pas trop de temps.

Exemples pour en creer un:

~$ echo | dd bs=1M seek > a
0+1 records in
0+1 records out
1 byte (1 B) copied, 0.000225417 s, 4.4 kB/s
~$ ls -l a
-rw-r--r-- 1 chazelas chazelas 10485761 2009-03-04 17:22 a
~$ du a
12      a

~$ exec 3> b
~$ seq 100000 >&3
~$ ls -l b
-rw-r--r-- 1 chazelas chazelas 588895 2009-03-04 17:40 b
~$ du b
580     b
~$ : > b
~$ echo >&3
~$ ls -l b
-rw-r--r-- 1 chazelas chazelas 588896 2009-03-04 17:40 b
~$ du b
8       b
~$ cat < b 1<> b
~$ ls -l b
-rw-r--r-- 1 chazelas chazelas 588896 2009-03-04 17:41 b
~$ du b
580     b

--
Stéphane



Tres bonne explications, comme toujours.
Merci
Avatar
lepierot
En fait j'aurais encore quelques questions :

Que fait exactement la commande :

cat < file 1<> file

je sais que cat affiche le contenu d'un fichier.
je connais la fonction du symbole < et d'ailleurs

"cat toto" est identique à "cat < toto" ?
apres le < , file 1 <> file !!!!!! la je ne comprends plus...


Ensuite, si ce n'est pas trop te demander, pourrais tu me decortiquer
la commande
echo | dd bs=1M seek > a

que veut dire la reponse de cette commande :
0+1 records in
0+1 records out

Qu'est sensé faire la commande
d'autre part pourquoi la commande

dd bs=1M seek
dd : 0511-064 Vous devez disposer du droit de lecture pour
accéder au fichier via l'option skip.
repond cela ?


sur mon AIX en ksh, la commande seek n'existe pas !!!

que fait echo >&3 ?

Merci
Avatar
Stephane CHAZELAS
2009-03-5, 04:02(-08), lepierot:


En fait j'aurais encore quelques questions :

Que fait exactement la commande :

cat < file 1<> file

je sais que cat affiche le contenu d'un fichier.
je connais la fonction du symbole < et d'ailleurs

"cat toto" est identique à "cat < toto" ?
apres le < , file 1 <> file !!!!!! la je ne comprends plus...



aka 1>: ouverture en ecriture (O_WRONLY|O_CREAT|O_TRUNC) et


assigne au fd 1
< aka 0<: ouverture en lecture (O_RDONLY) et assigne au fd 0
<> aka 0<>: ouverture en lecture+ecriture (O_RDWR|O_CREAT) et
assigne au fd 0
1<>: meme chose mais pour fd 1.

Ce qui nous interesse ici, ce n'est pas tant le RDWR, mais
l'absence do O_TRUNC.

Donc dans:

cat 0< file 1<> file

Le fd 0 pointe vers file ouvert en lecture et 1 vers file ouvert
en ecriture sans O_TRUNC. Cat sans arguments ecrit sur 1 ce
qu'il lit de 0, donc va overwriter file avec la meme chose, donc
write() var remplir les trous.

Ensuite, si ce n'est pas trop te demander, pourrais tu me decortiquer
la commande
echo | dd bs=1M seek > a



a ouvre a en WRONLY sure fd 1.


bs=1M: fonctionne avec des blocs de 1M.
seek, seek de 10 blocks (10M).

Apres le seek, dd ecrit sur 1 ce qu'il a lu de 0 par blocks.
En l'occurrence, son fd 0 est la sortie d'un pipe. A l'autre
bout du pipe, ya echo qui ecrit un charactere n.

que veut dire la reponse de cette commande :
0+1 records in
0+1 records out



1 bloc incomplet lu, 1 bloc incomplet ecrit.

Ils sont incomplets parce qu'il ne font pas 1M. En l'occurrence,
seulement un byte est lu.

Qu'est sensé faire la commande
d'autre part pourquoi la commande

dd bs=1M seek
dd : 0511-064 Vous devez disposer du droit de lecture pour
accéder au fichier via l'option skip.
repond cela ?



Aucune idee.

sur mon AIX en ksh, la commande seek n'existe pas !!!



Qui a parle de commande seek?

que fait echo >&3 ?



Ca ecrit n sur le fd 3.

--
Stéphane