Come è possibile assegnare 8 blocchi ma dimensione del file 0?


9

Qualcuno mi ha posto in questo sito su questa domanda, cioè un file chiamato "abc.dat" ha 0 dimensioni del file ma 8 blocchi, e questo è l'output che gli chiedo di darmi (Alcuni testi sono stati tradotti dal cinese all'inglese):

$ cp abc.dat abc2.dat; ls -ls abc2.dat #try to copy, it still 8 blocks but 0 byte
8 -rw-rw-r--  1 rokeabbey rokeabbey      0 Feb  27 19:39 abc2.dat 

8 -rw-rw-r-- 1 rokeabbey rokeabbey 0 set 18 19:11 abc.dat #sorry, questa potrebbe essere l'output extra sbagliato che ha aggiunto

$ stat abc.dat
  File: 'abc.dat'
  Size: 0           Blocks: 16          IO Block: 4096   regular empty file
Device: 32h/50d      Inode: 3715853    Links: 1
Access: (0664/-rw-rw-r--)  Uid:( 1000/rokeabbey)   Gid:( 1000/rokeabbey)
Access: 2018-02-26 21:13:57.640639992 +0800
Modify: 2017-09-18 19:11:42.221533011 +0800
Change: 2017-09-18 19:11:42.221533011 +0800
 Birth: -

$ touch abc3.dat ; ls -sl | grep abc #try to create new empty file, it still 8 blocks by default
8 -rw-rw-r--  1 rokeabbey rokeabbey      0 Feb  27 19:39 abc2.dat
8 -rw-rw-r--  1 rokeabbey rokeabbey      0 Feb  27 19:40 abc3.dat
8 -rw-rw-r--  1 rokeabbey rokeabbey      0 Sep  18 19:11 abc.dat

Ho imparato un po 'di file sparsi, metadati di file, casi di link simbolici, ma nessuno di questi casi causerà dimensioni di file a 0 byte con 8 blocchi. Esiste un'impostazione di filesystem come la dimensione minima del blocco per QUALSIASI file?

Mi ha detto che i suoi sistemi sono Ubuntu 16.04 ed ext4.

[AGGIORNARE]

$ df -Th /home/rokeabbey
/home/rokeabbey/.Private ecryptfs  138G   39G   92G   30% /home/rokeabbey

[AGGIORNAMENTO] Posso riprodurlo con ecryptfs

xb@dnxb:/tmp/test$ sudo mkdir /opt/data
xb@dnxb:/tmp/test$ sudo apt-get install ecryptfs-utils
...
xb@dnxb:/tmp/test$ sudo mount -t ecryptfs /opt/data /opt/data
Passphrase: 
...
Selection [aes]: 1
...
Selection [16]: 1
Enable plaintext passthrough (y/n) [n]: y
Enable filename encryption (y/n) [n]: y
...
Would you like to proceed with the mount (yes/no)? : yes
...
in order to avoid this warning in the future (yes/no)? : no 
Not adding sig to user sig cache file; continuing with mount.
Mounted eCryptfs
xb@dnxb:/tmp/test$ l /opt/data
total 8.0K
52953089 drwxr-xr-x 9 root root ? 4.0K Feb  27 23:16 ../
56369402 drwxr-xr-x 2 root root ? 4.0K Feb  27 23:16 ./
xb@dnxb:/tmp/test$ sudo touch /opt/data/testing
xb@dnxb:/tmp/test$ less /opt/data/testing      
xb@dnxb:/tmp/test$ sudo umount /opt/data
xb@dnxb:/tmp/test$ ls -ls /opt/data
total 8
8 -rw-r--r-- 1 root root 8192 Feb  27 23:42 ECRYPTFS_FNEK_ENCRYPTED.FWbECDhE0C37e-Skw2B2pnQpP9gB.b3yDfkVU5wk7WhvMreg8yVnuEaMME--
xb@dnxb:/tmp/test$ less /opt/data/ECRYPTFS_FNEK_ENCRYPTED.FWbECDhE0C37e-Skw2B2pnQpP9gB.b3yDfkVU5wk7WhvMreg8yVnuEaMME-- 
"/opt/data/ECRYPTFS_FNEK_ENCRYPTED.FWbECDhE0C37e-Skw2B2pnQpP9gB.b3yDfkVU5wk7WhvMreg8yVnuEaMME--" may be a binary file.  See it anyway? 
xb@dnxb:/tmp/test$ sudo mount -t ecryptfs /opt/data /opt/data
Passphrase: 
Select cipher: 
...
Selection [aes]: 1   
...
Selection [16]: 1
Enable plaintext passthrough (y/n) [n]: y
Enable filename encryption (y/n) [n]: y
...
Would you like to proceed with the mount (yes/no)? : yes
...
in order to avoid this warning in the future (yes/no)? : no 
Not adding sig to user sig cache file; continuing with mount.
Mounted eCryptfs
xb@dnxb:/tmp/test$ ls -ls /opt/data
total 8
8 -rw-r--r-- 1 root root 0 Feb  27 23:42 testing
xb@dnxb:/tmp/test$

Non ho capito bene. È abc.date abc2.datdirectory? L' ls -ls abc2.datoutput indica che si tratta di una directory con due voci e stat abc.datindica che anche quella è una directory. O hai modificato l'output?
Kusalananda

@Kusalananda Siamo spiacenti, ho tradotto dal cinese e ho perso la traduzione della directory.
林果 皞

@Kusalananda ls -ls abc2.dat, mi ha fatto vedere queste 2 righe, molto simile ha incollato l'output sbagliato. E la terza uscita ha mostrato l'uscita corretta.
林果 皞

L'unica cosa che mi viene in mente è il blocco degli attributi estesi. Sta usando SELinux?
psusi,

Risposte:


16

Questo succede se il file system è crittografato; FS deve archiviare metadati extra per il file, anche se è vuoto.

Mentre mi capita di avere una macchina a portata di mano con un mount ecryptfs alla vaniglia (Ubuntu 12.04-LTS), posso confermare che un file vuoto otterrà 8 blocchi:

$ touch test
$ ls -ls test

8 -rw-rw-r-- 1 admin admin 0 feb 27 16:45 test

3
Vale 32kB? È abbastanza.
Hobbs,

6

Puoi ottenere un file di dimensioni zero con blocchi se hai degli attributi estesi sul file, più di quello che può stare nell'inode stesso:

$ touch abc
$ setfattr -n user.test -v xyz abc        # this doesn't do it
$ ls -s abc                               # since the data fits in the inode
0 abc
$ setfattr -n user.test -v "$(printf %100s " ")"  abc
$ ls -s abc
4 abc

Ma non riesco a vedere come otterrai 8 kB in questo modo, poiché secondo la xattrpagina man , la dimensione è limitata alla dimensione del blocco su ext2 / 3/4 e la dimensione del blocco è limitata dalla dimensione della pagina del sistema , quindi 4 kB su x86. Inoltre, un file appena creato non dovrebbe avere attributi estesi, a meno che tu non stia eseguendo SELinux, ma in tal caso, ls -ldovrebbe mostrare il punto alla fine dei bit di autorizzazione per indicare la presenza di un tag SELinux.


Ho aggiornato la domanda, me lo mostra ecryptfse non ext4me lo aspettavo, è correlato?
林果 皞
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.