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장: To B(-Tree) 또는 To be - HFS+ 파일 시스템에서 이 주제에 대한 논의도 있습니다 .

또한afsctool폴더에 어떤 파일이 압축되어 있는지 확인하는 데 도움이 될 수 있습니다.

$ 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하고 파일 시스템에 대해 2개의 서로 다른 실행 결과를 비교할 때 스위치를 사용해야 합니다 --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으로 표시됩니다.

관련 정보