Alguien me pregunta en otro sitio sobre esta pregunta, es decir, un archivo llamado "abc.dat" tiene un tamaño de archivo de 0 pero 8 bloques, y esta es la salida que le pido que me dé (Algunos textos han sido traducidos del chino al inglés):
$ 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 18 de septiembre 19:11 abc.dat #sorry, este puede ser el resultado extra incorrecto que agregó
$ 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
Aprendí un poco sobre archivos dispersos, metadatos de archivos, casos de enlaces simbólicos, pero ninguno de esos casos causará un tamaño de archivo de 0 bytes con 8 bloques. ¿Hay alguna configuración de sistemas de archivos como el tamaño mínimo de bloque para CUALQUIER archivo?
Me dijo que sus sistemas son Ubuntu 16.04 y ext4.
[ACTUALIZAR]
$ df -Th /home/rokeabbey
/home/rokeabbey/.Private ecryptfs 138G 39G 92G 30% /home/rokeabbey
[ACTUALIZACIÓN] Puedo reproducir 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$
abc.dat
yabc2.dat
directorios? Lals -ls abc2.dat
salida indica que es un directorio con dos entradas, y elstat abc.dat
indica que también es un directorio. ¿O has editado la salida?ls -ls abc2.dat
, me mostró estas 2 líneas, muy probablemente pegó la salida incorrecta. Y la tercera salida sí muestra la salida correcta.Respuestas:
Esto sucede si el sistema de archivos está encriptado; El FS necesita almacenar metadatos adicionales para el archivo, incluso si está vacío.
Como tengo una máquina a mano con una montura ecryptfs de vainilla (Ubuntu 12.04-LTS), puedo confirmar que un archivo vacío obtendrá 8 bloques:
fuente
Puede obtener un archivo de tamaño cero con bloques si tiene atributos extendidos en el archivo, más de lo que cabe dentro del propio inodo:
Pero, no puedo ver cómo obtendrías 8 kB de esa manera, ya que de acuerdo con la
xattr
página del manual , el tamaño está limitado al tamaño del bloque en ext2 / 3/4, y el tamaño del bloque está limitado por el tamaño de la página del sistema , entonces 4 kB en x86. Además, un archivo recién creado no debe tener ningún atributo extendido, a menos que esté ejecutando SELinux, pero en ese caso,ls -l
debe mostrar el punto al final de los bits de permiso para indicar la presencia de una etiqueta SELinux.fuente
ecryptfs
y noext4
esperaba, ¿está relacionado?