Si consideri un file sparse con 1s scritto in una porzione del file.Come si recuperano i blocchi azzerati di un file sparse?
Desidero recuperare lo spazio effettivo sul disco per questi 1 in quanto non ho più bisogno di quella parte del file sparse. La parte del file che contiene questi 1 dovrebbe diventare un "buco" com'era prima che gli 1 fossero scritti da soli.
Per fare ciò, ho azzerato la regione a 0 secondi. Questo è non reclamare i blocchi su disco.
Come si effettua effettivamente il file sparse, bene, sparse di nuovo?
Questa domanda è simile a ma non esiste una risposta accettata per tale domanda.
Si consideri la seguente sequenza di eventi eseguito su un server Linux magazzino:
$ cat /tmp/test.c
#include <unistd.h>
#include <stdio.h>
#include <fcntl.h>
#include <string.h>
int main(int argc, char **argv) {
int fd;
char c[1024];
memset(c,argc==1,1024);
fd = open("test",O_CREAT|O_WRONLY,0777);
lseek(fd,10000,SEEK_SET);
write(fd,c,1024);
close(fd);
return 0;
}
$ gcc -o /tmp/test /tmp/test.c
$ /tmp/test
$ hexdump -C ./test
00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
00002710 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 |................|
*
00002b10
$ du -B1 test; du -B1 --apparent-size test
4096 test
11024 test
$ /tmp/test clear
$ hexdump -C ./test
00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
00002b10
$ du -B1 test; du -B1 --apparent-size test
4096 test
11024 test
# NO CHANGE IN SIZE.... HMM....
EDIT -
Permettetemi di qualificare ulteriormente che io non voglio riscrivere i file, copiare i file, ecc Se non è possibile liberare in qualche modo blocchi precedentemente assegnati in situ, così sia, ma mi piacerebbe determinare se tale è effettivamente possibile o meno. Sembra "no, non lo è" a questo punto. Suppongo che sto cercando sys_punchhole
per Linux (discussioni di cui mi sono appena imbattuto).
Da ciò che ho letto di file sparsi, il determinante chiave non è che il blocco sia riempito con 0, ma che non sia mai stato scritto. Hai qualche riferimento al contrario? – kdgregory
Parti di un file sparse mai scritte per non avere blocchi allocati. Ma la mia domanda è una volta che alloco uno o più blocchi, come posso liberarli? Non ho più bisogno di una parte del file sparse e voglio _dare indietro_ blocchi precedentemente assegnati. Ma non posso. Boo. – z8000
'cp --sparse = always' ... i file sparsi sono un hack basato sul modo in cui i sistemi gestiscono lo storage; non è mai una buona idea affidarsi a un hack. Se hai bisogno di strutture di dati sparse che probabilmente hanno pezzi andare e venire, ti consiglio di cercare una tale struttura o di scriverla tu stesso. – kdgregory