8ブロックが割り当てられていてもファイルサイズが0である可能性はありますか?


9

誰かがこの質問について他のサイトで私に尋ねます、すなわち、「abc.dat」という名前のファイルはファイルサイズが0で8ブロックです。これは私が彼に私に尋ねる出力です(一部のテキストは中国語から英語に翻訳されています):

$ 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#申し訳ありませんが、これは彼が追加した余分な間違った出力である可能性があります

$ 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

スパースファイル、ファイルメタデータ、シンボリックリンクのケースについて少し学びましたが、いずれのケースも8ブロックで0バイトのファイルサイズを引き起こしません。任意のファイルシステムのセットアップは、の最小ブロックサイズなどがありANYファイル?

彼のシステムはUbuntu 16.04とext4だと彼は私に言った。

[更新]

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

[更新] 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.databc2.datディレクトリ?ls -ls abc2.dat出力は、それが2つのエントリを持つディレクトリだことを示し、stat abc.datそれはあまりにもディレクトリであることを示しています。または、出力を編集しましたか?
クサラナンダ

@Kusalananda申し訳ありませんが、中国語から翻訳し、ディレクトリの翻訳がありません。
林果皞

@Kusalananda ls -ls abc2.dat、彼は私にこの2行を見せてくれました、おそらく彼は間違った出力を貼り付けました。そして、3番目の出力は正しい出力を示しています。
林果皞

私が考えることができる唯一のことは、拡張属性ブロックです。彼はSELinuxを使用していますか?
psusi

回答:


16

これは、ファイルシステムが暗号化されている場合に発生します。ファイルが空であっても、FSはファイルの追加メタデータを保存する必要があります。

バニラecryptfsマウント(Ubuntu 12.04-LTS)を備えた便利なマシンをたまたま持っているので、空のファイルが8ブロックを取得することを確認できます。

$ touch test
$ ls -ls test

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

3
32kB相当?それはかなりです。
ホッブズ

6

ファイルに拡張属性がある場合、ブロックが含まれるサイズがゼロのファイルを取得できます。これは、iノード自体の内部に収まるものを超えています。

$ 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

しかし、xattrmanページによると、サイズがext2 / 3/4のブロックサイズに制限されており、ブロックサイズがシステムページサイズによって制限されているため、その方法で8 KBを取得する方法がわかりませんなので、x86では4 kBです。また、SELinuxを実行している場合を除き、新しく作成したファイルには拡張属性を含めないでください。ただし、その場合ls -lは、パーミッションビットの最後にドットを表示して、SELinuxタグの存在を示す必要があります。


私は質問を更新しました、彼はそれを私に示しました、ecryptfsそしてext4私は期待していませんでした、それは関連していますか?
林果皞
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.