Jemand fragt mich auf einer anderen Site nach dieser Frage, dh eine Datei mit dem Namen "abc.dat" hat eine Dateigröße von 0, aber 8 Blöcke, und dies ist die Ausgabe, die ich von ihm fordere (einige Texte wurden vom Chinesischen ins Englische übersetzt):
$ 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 Sep 18 19:11 abc.dat #sorry, dies könnte die zusätzliche falsche Ausgabe sein, die er hinzugefügt hat
$ 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
Ich habe etwas über spärliche Dateien, Dateimetadaten und Symlink-Fälle gelernt, aber keiner dieser Fälle verursacht eine Dateigröße von 0 Byte mit 8 Blöcken. Gibt es Dateisystem-Setups wie die Mindestblockgröße für JEDE Datei?
Er sagte mir, dass seine Systeme Ubuntu 16.04 und ext4 sind.
[AKTUALISIEREN]
$ df -Th /home/rokeabbey
/home/rokeabbey/.Private ecryptfs 138G 39G 92G 30% /home/rokeabbey
[UPDATE] Ich kann mit ecryptfs reproduzieren
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
undabc2.dat
Verzeichnisse? Diels -ls abc2.dat
Ausgabe zeigt an, dass es sich um ein Verzeichnis mit zwei Einträgen handelt, und diestat abc.dat
zeigt an, dass auch dies ein Verzeichnis ist. Oder haben Sie die Ausgabe bearbeitet?ls -ls abc2.dat
, er hat mir diese 2 Zeilen gezeigt, am wahrscheinlichsten hat er die falsche Ausgabe eingefügt. Und die 3. Ausgabe zeigt die richtige Ausgabe.Antworten:
Dies geschieht, wenn das Dateisystem verschlüsselt ist. Der FS muss zusätzliche Metadaten für die Datei speichern, auch wenn diese leer ist.
Da ich zufällig eine Maschine mit einem Vanilla Ecryptfs-Mount (Ubuntu 12.04-LTS) zur Hand habe, kann ich bestätigen, dass eine leere Datei 8 Blöcke erhält:
quelle
Sie können eine Datei mit der Größe Null mit Blöcken erhalten, wenn Sie erweiterte Attribute für die Datei haben, mehr als das, was in den Inode selbst passen kann:
Aber ich kann nicht sehen, wie Sie auf diese Weise 8 kB erhalten würden, da laut
xattr
Manpage die Größe auf die Blockgröße in ext2 / 3/4 begrenzt ist und die Blockgröße durch die Größe der Systemseite begrenzt ist , also 4 kB auf x86. Außerdem sollte eine neu erstellte Datei keine erweiterten Attribute haben, es sei denn, Sie führen SELinux aus. In diesem Fallls -l
sollte jedoch der Punkt am Ende der Berechtigungsbits angezeigt werden, um das Vorhandensein eines SELinux-Tags anzuzeigen.quelle
ecryptfs
und nichtext4
ich habe erwartet, ist es verwandt?