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 9 월 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

스파 스 파일, 파일 메타 데이터, symlink 사례에 대해 조금 배웠지 만 그중 어느 것도 8 바이트로 0 바이트 파일 크기를 유발하지 않습니다. 어떤 파일 시스템 설치는 최소 블록 크기 등 거기에 어떤 파일?

그는 자신의 시스템이 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출력은 두 개의 항목이있는 디렉토리가 있음을 나타냅니다, 그리고는 stat abc.dat그 역시 디렉토리를 나타냅니다. 아니면 출력을 편집 했습니까?
Kusalananda

@Kusalananda 죄송합니다, 나는 중국어에서 번역하고 디렉토리 번역을 그리워합니다.
과일

@ Kusalananda ls -ls abc2.dat, 그는 나 에게이 2 줄을 보여주었습니다. 그리고 세 번째 출력은 올바른 출력을 보여줍니다.
과일

내가 생각할 수있는 유일한 것은 확장 속성 블록입니다. 그는 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 가치? 꽤 큽니다.
hobbs

6

파일의 속성을 inode 자체에 넣을 수있는 것보다 더 확장 한 경우 블록이있는 크기가 0 인 파일을 얻을 수 있습니다.

$ 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 page 에 따르면 크기가 ext2 / 3 / 4의 블록 크기로 제한되고 블록 크기는 시스템 페이지 크기로 제한되는 방식으로 8kB를 얻는 방법을 볼 수 없습니다. 따라서 x86에서 4kB입니다. 또한 SELinux를 실행하지 않는 한 새로 작성된 파일에는 확장 된 속성이 없어야하지만이 경우 ls -l권한 비트 끝에 점을 표시하여 SELinux 태그가 있음을 표시해야합니다.


나는 질문을 업데이트했는데, 그는 단지 나에게 단지 내가 예상 ecryptfs하지 않은 ext4것을 보여줍니다 .
과일
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.