du가 HFS+ 파티션에 있는 일부 비어 있지 않은 파일의 크기를 0으로 보고하는 이유는 무엇입니까?

du가 HFS+ 파티션에 있는 일부 비어 있지 않은 파일의 크기를 0으로 보고하는 이유는 무엇입니까?

차이점에 대한 설명은 무엇입니까?

$ ls -l /Applications/Safari.app/Contents/Info.plist
-rw-r--r--  1 root  wheel  15730 11 jui 15:02 /Applications/Safari.app/Contents/Info.plist

$ du -sh /Applications/Safari.app/Contents/Info.plist
0B     /Applications/Safari.app/Contents/Info.plist

파일이 내 홈 폴더에 복사되면 동일한 번호가 보고됩니다 ls.du

$ cp /Applications/Safari.app/Contents/Info.plist .
$ du -sh Info.plist; ls -l Info.plist
16K Info.plist
-rw-r--r--  1 ant  staff  15730 17 oct 16:53 Info.plist

두 디렉터리 모두 이 파티션( / )에 있습니다.

diskutil  info /
Device Identifier:        disk0s2
Device Node:              /dev/disk0s2
Part of Whole:            disk0
Device / Media Name:      ml2013

Volume Name:              OSX.10.8
Escaped with Unicode:     OSX.10.8

Mounted:                  Yes
Mount Point:              /
Escaped with Unicode:     /

File System Personality:  Journaled HFS+
Type (Bundle):            hfs
Name (User Visible):      Mac OS Extended (Journaled)
Journal:                  Journal size 40960 KB at offset 0xc83000
Owners:                   Enabled

이것은 stat의 출력입니다:

$ stat  Info.plist
16777218 8780020 -rw-r--r-- 1 root wheel 0 15730 "Oct 17 17:47:12 2013" \ 
"Jun 11 15:02:17 2013" "Jun 11 15:02:17 2013" "Apr 27 11:49:34 2013"\ 
4096 0 0x20 Info.plist

답변1

내가 뭔가를 발견했을 수도 있습니다:

OS X의 ls 명령에는 다음 스위치가 있습니다.

  -O      Include the file flags in a long (-l) output.

결과 :

$ ls -O Info.plist
-rw-r--r--  1 root  wheel  compressed 15730 11 jui 15:02 Info.plist

방금 (실험적으로) HFS+ 압축 파일이 항상 du보고되는지 확인했습니다 .0

du압축된 파일을 복사하고 압축을 해제하여 복사된 압축되지 않은 파일에 대한 올바른 파일을 논리적으로 보고합니다.

이것은 설명이다다음 동작의 경우 du:

HFS+ 파일 압축

Mac OS X 10.6에서 Apple은 HFS+의 파일 압축을 도입했습니다. 압축은 Mac OS X의 일부로 설치된 파일에 가장 자주 사용됩니다. 사용자 파일은 일반적으로 압축되지 않습니다(물론 가능합니다!). 압축 파일을 읽고 쓰는 것은 Apple의 파일 시스템 API에 관한 한 투명합니다.

압축 파일에 빈 데이터 포크가 있습니다. 이는 HFS+ 파일 압축(4.0.0 이전의 TSK 포함)을 지원하지 않는 포렌식 도구가 압축 파일과 관련된 데이터를 볼 수 없음을 의미합니다!

Mac OS X and iOS Internals: To the Apple's CoreJonathan Levin은 16장: B(-Tree)로 할지 말지 - HFS+ 파일 시스템에서 이 주제에 대해서도 논의합니다.

반품AFSC 도구폴더에 어떤 파일이 압축되어 있는지 확인하는 데 도움이 됩니다.

$ afsctool -v /Applications/Safari.app/
/Applications/Safari.app/.:
Number of HFS+ compressed files: 1538
Total number of files: 2247
Total number of folders: 144
Total number of items (number of files + number of folders): 2391
Folder size (uncompressed; reported size by Mac OS 10.6+ Finder): 29950329 bytes / 34.7 MB (megabytes) / 33.1 MiB (mebibytes)
Folder size (compressed - decmpfs xattr; reported size by Mac OS 10.0-10.5 Finder): 21287197 bytes / 23.8 MB (megabytes) / 22.7 MiB (mebibytes)
Folder size (compressed): 22694835 bytes / 25.2 MB (megabytes) / 24 MiB (mebibytes)
Compression savings: 24.2%
Approximate total folder size (files + file overhead + folder overhead): 26353338 bytes / 26.4 MB (megabytes) / 25.1 MiB (mebibytes)

답변2

를 사용할 때 du파일 시스템에 대해 두 가지 다른 실행 결과를 비교하려면 스위치를 사용해야 합니다 --apparent-size.

이는 CIFS 탑재 공유입니다.

$ du -sh somedir
50M somedir

$ du -sh --apparent-size somedir
45M somedir

du 매뉴얼 페이지에서 발췌

--apparent-size
          print  apparent  sizes,  rather than disk usage; although the apparent 
          size is usually smaller, it may be larger due to holes in (‘sparse’)
          files, internal fragmentation, indirect blocks, and the like

그래서 무슨 일이야?

이는 많은 사람들을 혼란스럽게 하지만 파일이 디스크에 저장되면 해당 블록의 일부만 사용하더라도 공간 블록을 소비한다는 점을 기억하십시오. du사용하지 않고 실행 하면 --apparent-size파일이 사용하는 실제 공간이 아닌 사용된 디스크 블록 공간의 양을 기준으로 크기를 가져옵니다.

0B 크기는 어떻습니까?

0B /Applications/Safari.app/Contents/Info.plist

이것은 링크일 가능성이 높습니다. 이 명령을 실행하면 해당 여부가 표시됩니다.

$ ls -l /Applications/Safari.app/Contents | grep Info.plist

답변3

내 답변은 다른 답변과 일치하지만 아직 댓글을 달 수 없으므로 새로운 답변을 시작하겠습니다.

/Applications에 있는 대부분의 파일은 압축되어 있으므로 복사하면 손실됩니다. HFS+에서 압축을 사용하면 파일 데이터가 리소스 포크에 저장됩니다.또는충분히 작은 경우(4k 미만) 확장된 속성입니다. 리소스 포크에 있는 경우 du(적어도 Yosemite에서는)는 실제 디스크 사용량을 블록 단위로 표시합니다. 속성에 완전히 포함된 경우 0으로 표시됩니다.

관련 정보