Per qualche motivo, quando creo un file di testo su OS X, è sempre almeno 4kB, a meno che non sia vuoto. Perchè è questo? Potrebbero esserci 4.000 byte di metadati a circa 1 byte di testo normale?
:P
Per qualche motivo, quando creo un file di testo su OS X, è sempre almeno 4kB, a meno che non sia vuoto. Perchè è questo? Potrebbero esserci 4.000 byte di metadati a circa 1 byte di testo normale?
:P
Risposte:
La dimensione del blocco del file system deve essere di 4 kB. Quando i dati vengono scritti in un file contenuto in un file system, il sistema operativo deve allocare blocchi di archiviazione per contenere i dati che verranno scritti nel file.
In genere, quando viene creato un file system, la memoria contenuta in quel file system viene segmentata in blocchi di dimensioni fisse. Questo articolo di Wikipedia spiega brevemente questo processo.
La dimensione di blocco sottostante del file system per questo file deve avere una dimensione di blocco di 4K byte. Questo file utilizza 1 blocco 4K e solo un byte all'interno di quel blocco contiene dati effettivi.
Tutti i file system hanno dimensioni di cluster o blocchi o la minima quantità di spazio su disco che può essere allocata per contenere un file. Anche se la dimensione effettiva del file è inferiore alla dimensione del cluster / blocco, consumerà comunque un cluster o 4K sul file system. La dimensione del cluster dipende dal file system e dalle opzioni del file system.
Se contiene zero byte, come sottolineato da Gilles , usa zero blocchi / cluster ma un inode su file system * nix tipici, che risponde meglio al caveat, "a meno che non sia vuoto".
Un piccolo esperimento per aiutare a illustrare questo:
Innanzitutto, vediamo quali sono le dimensioni effettive del blocco della mia partizione root ext4 (LVM):
[root@fedora17 blocksize]# dumpe2fs /dev/mapper/vg_fedora17-lv_root | grep -i "block size"
dumpe2fs 1.42.3 (14-May-2012)
Block size: 4096
È 4096 (4 KiB), come previsto. Ora creiamo tre file: il primo è zero byte, il secondo è solo un byte e il terzo è 4 KiB (la dimensione del blocco):
[root@fedora17 blocksize]# touch 0_bytes.bin
[root@fedora17 blocksize]# dd if=/dev/zero of=1_byte.bin bs=1 count=1
[root@fedora17 blocksize]# dd if=/dev/zero of=4096_bytes.bin bs=1 count=4096
Ora, abbiamo ls
la directory. Usiamo l' -s
opzione per vedere la dimensione allocata (la colonna più a sinistra), in numero di "blocchi" da 1024 byte.
(Non sappiamo che la dimensione del blocco reale è 4096 - potremmo specificare --block-size
ma che ridimensiona tutto di quel valore e vogliamo vedere anche la dimensione del file effettiva in byte) .
[root@fedora17 blocksize]# ls -ls
total 8
0 -rw-r--r--. 1 root root 0 Jan 21 23:56 0_bytes.bin
4 -rw-r--r--. 1 root root 1 Jan 21 23:38 1_byte.bin
4 -rw-r--r--. 1 root root 4096 Jan 21 23:38 4096_bytes.bin
Qui si possono notare due cose:
I file sparsi sono file con grandi blocchi di zeri. Poiché i dati sono noti per essere tutti pari a zero, non ha senso archiviarli sul disco. In questo modo, la dimensione apparente di un file può effettivamente essere maggiore della dimensione su disco.
Si noti che alcuni file system consentono di archiviare i contenuti di file molto piccoli nell'inode stesso. Vedere E 'possibile memorizzare i dati direttamente all'interno di un inode su un filesystem Unix / Linux? .