เป็นไปได้อย่างไรที่ 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 ก.ย. 18 19:11 abc.dat #sorry นี่อาจเป็นผลลัพธ์ที่ผิดปกติที่เขาเพิ่ม

$ 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 แต่ไม่มีกรณีใดที่จะทำให้ขนาดไฟล์ 0 ไบต์มี 8 บล็อก มีการติดตั้งระบบไฟล์ใดบ้างเช่นขนาดบล็อกขั้นต่ำสำหรับไฟล์ใด ๆ

เขาบอกฉันว่าระบบของเขาคือ 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.datและabc2.datไดเรกทอรี? ls -ls abc2.datเอาท์พุทแสดงให้เห็นว่ามันเป็นไดเรกทอรีที่มีสองรายการที่และstat abc.datแสดงให้เห็นว่าที่มากเกินไปเป็นไดเรกทอรี หรือว่าคุณแก้ไขเอาท์พุท?
Kusalananda

@Kusalananda ขออภัยฉันแปลจากจีนและแปลไดเรกทอรีพลาด
ผลไม้

@ Kusalananda ls -ls abc2.datเขาแสดงให้ฉันเห็น 2 บรรทัดนี้ส่วนใหญ่ก็เหมือนกันว่าเขาวางผิดที่ และเอาต์พุตที่ 3 แสดงเอาต์พุตที่ถูกต้อง
ผลไม้

สิ่งเดียวที่ฉันคิดได้ก็คือบล็อกคุณสมบัติเพิ่มเติม เขาใช้ SELinux หรือไม่
psusi

คำตอบ:


16

สิ่งนี้จะเกิดขึ้นหากระบบไฟล์ถูกเข้ารหัส FS จำเป็นต้องจัดเก็บข้อมูลเมตาเพิ่มเติมสำหรับไฟล์แม้ว่าจะว่างเปล่าก็ตาม

เมื่อฉันมีเครื่องที่มีประโยชน์ด้วยการติดตั้ง vanilla 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

คุณสามารถรับไฟล์ขนาดศูนย์พร้อมบล็อกถ้าคุณมีคุณสมบัติเพิ่มเติมในไฟล์มากกว่าสิ่งที่สามารถใส่ในไอโหนดเอง:

$ 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

แต่ฉันไม่เห็นว่าคุณจะได้รับ 8 kB แบบนั้นตามxattrหน้า manขนาดถูก จำกัด ขนาดบล็อกใน ext2 / 3/4 และขนาดบล็อกถูก จำกัด โดยขนาดหน้าของระบบ ดังนั้น 4 kB บน x86 นอกจากนี้ไฟล์ที่สร้างขึ้นใหม่ไม่ควรมีแอททริบิวต์เพิ่มเติมเว้นแต่ว่าคุณกำลังใช้งาน SELinux แต่ในกรณีนี้ls -lควรแสดงจุดที่ส่วนท้ายของบิตการอนุญาตเพื่อระบุการมีแท็ก SELinux


ฉันได้อัปเดตคำถามเขาแค่แสดงให้ฉันเห็นว่าecryptfsไม่ใช่สิ่งที่ext4ฉันคาดหวังมันเกี่ยวข้องหรือไม่
ผลไม้
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.