यह कैसे संभव है कि 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 #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

मैंने विरल फ़ाइल, फ़ाइल मेटाडेटा, सिमलिंक मामलों के बारे में थोड़ा सीखा है, लेकिन उनमें से कोई भी मामला 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.datऔर abc2.datनिर्देशिका? ls -ls abc2.datउत्पादन इंगित करता है कि यह दो प्रविष्टियों के साथ एक निर्देशिका है, और stat abc.datपता चलता है कि वह भी एक निर्देशिका है। या क्या आपने आउटपुट संपादित किया है?
Kusalananda

@ कुसलानंद क्षमा करें, मैंने चीनी से अनुवाद किया और निर्देशिका अनुवाद को याद किया।
फल

@ कुसलानंद ls -ls abc2.dat, उन्होंने मुझे यह 2 पंक्तियाँ दिखाईं , सबसे अधिक यह कि उन्होंने गलत आउटपुट को चिपकाया। और 3rd आउटपुट ने सही आउटपुट दिखाया।
फल

केवल एक चीज जिसके बारे में मैं सोच सकता हूं, वह है विस्तारित गुण खंड। क्या वह SELinux का उपयोग कर रहा है?
Psusi

जवाबों:


16

ऐसा होता है यदि फ़ाइल सिस्टम एन्क्रिप्ट किया गया हो; FS को फ़ाइल के लिए अतिरिक्त मेटाडेटा संग्रहीत करने की आवश्यकता होती है, भले ही वह खाली हो।

जैसा कि मुझे लगता है कि वेनिला इकोट्रिक्ट्स माउंट (उबंटू 12.04-एलटीएस) के साथ एक मशीन का काम होता है, मैं पुष्टि कर सकता हूं कि एक खाली फाइल को 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मैन पेज के अनुसार , आकार ext2 / 3/4 पर ब्लॉक आकार तक सीमित है, और ब्लॉक का आकार सिस्टम पेज आकार द्वारा सीमित है , तो x86 पर 4 kB। इसके अलावा, एक नई बनाई गई फ़ाइल में कोई भी विस्तारित विशेषता नहीं होनी चाहिए, जब तक कि आप SELinux नहीं चला रहे हों, लेकिन उस स्थिति में, ls -lSELinux टैग की उपस्थिति का संकेत देने के लिए अनुमति बिट्स के अंत में डॉट दिखाना चाहिए।


मैंने प्रश्न को अपडेट कर दिया है, वह सिर्फ मुझे दिखाता है ecryptfsऔर ext4मुझे उम्मीद नहीं है, क्या यह संबंधित है?
फल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.