8 blok ayrılabilir ancak dosya boyutu 0 nasıl olur?


9

Birisi bana başka bir sitede bu soruyu soruyor, yani "abc.dat" adlı bir dosya 0 dosya boyutuna sahip ancak 8 blok içeriyor ve bu bana vermesini istediğim çıktı (Bazı metin Çince'den İngilizce'ye çevrildi):

$ 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 Eyl 18 19:11 abc.dat #sorry, bu eklediği ekstra yanlış çıktı olabilir

$ 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

Ben seyrek dosya, dosya meta verileri, symlink durumlarda hakkında biraz öğrendim, ama bu vakaların hiçbiri 8 blok ile 0 bayt dosya boyutu neden olmaz. HERHANGİ bir dosya için minimum blok boyutu gibi herhangi bir dosya sistemi kurulumu var mı ?

Bana sistemlerinin Ubuntu 16.04 ve ext4 olduğunu söyledi.

[GÜNCELLEME]

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

[GÜNCELLEME] ecryptfs ile çoğaltılabilirim

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$

Kafam karıştı. Mı abc.datve abc2.datdizinleri? ls -ls abc2.datÇıktı iki girişlerle bir dizin olduğunu gösterir ve stat abc.datbu da bir dizin olduğunu gösterir. Veya çıktıyı düzenlediniz mi?
Kusalananda

@Kusalananda Üzgünüm, Çince'den çeviri yaptım ve dizin çevirisini kaçırdım.
Meyve

@Kusalananda ls -ls abc2.dat, bana bu 2 satırı gösterdi, en çok yanlış çıktıyı yapıştırdı. Ve 3. çıktı doğru çıktıyı gösterdi.
Meyve

Aklıma gelen tek şey uzatılmış öznitelikler bloğudur. SELinux kullanıyor mu?
psusi

Yanıtlar:


16

Bu, dosya sistemi şifrelenmişse olur; FS boş olsa bile dosya için fazla meta veri depolaması gerekir.

Vanilyalı ecryptfs montajı (Ubuntu 12.04-LTS) ile kullanışlı bir makineye sahip olduğum için, boş bir dosyanın 8 blok alacağını doğrulayabilirim:

$ touch test
$ ls -ls test

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

3
32 KB değerinde mi? Bu biraz.
ocaklar

6

Dosyada genişletilmiş öznitelikleriniz varsa, inode'un içine sığabileceklerden daha fazla olan blokları olan sıfır boyutlu bir dosya alabilirsiniz:

$ 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

Ancak, bu şekilde 8 kB'yi nasıl alacağınızı göremiyorum, xattrman sayfasına göre, boyut ext2 / 3 / 4'teki blok boyutuyla sınırlı ve blok boyutu sistem sayfa boyutuyla sınırlı , x86'da 4 kB. Ayrıca, yeni oluşturulan bir dosya SELinux çalıştırmadığınız sürece genişletilmiş özniteliklere sahip olmamalıdır, ancak bu durumda, ls -lbir SELinux etiketinin varlığını belirtmek için izin bitlerinin sonundaki noktayı göstermelidir.


Soruyu güncelledim, bana sadece beklediğimi ecryptfsdeğil ext4, bununla ilgili olduğunu gösteriyor?
Meyve
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.