Mac OS X에서 디렉토리 크기를 올바르게 보고하지 않습니까?

Mac OS X에서 디렉토리 크기를 올바르게 보고하지 않습니까?

Finder에서 (응용 프로그램 폴더에 있는) 일부 .app 파일을 복제하면 Finder에서 중복된 .app 파일의 크기가 원본과 같지 않다는 것을 확인했습니다. 이 파일 크기 불일치는 복제한 모든 .app 파일에서 발생하지 않지만 .app 파일이 클수록 복제본이 원본과 동일한 크기로 표시되지 않을 가능성이 더 높은 것 같습니다. 여기 몇 가지 예가 있어요.

GarageBand.app - 381.7 MB
GarageBand copy.app - 373.2 MB

iMovie.app - 695.3 MB
iMovie copy.app - 635.4 MB

Install Xcode.app - 1.81 GB
Install Xcode copy.app - 1.57 GB

이제 저는 Mac을 처음 접했고 이 파일 크기 불일치 문제를 발견한 후 .app 파일이 실제로 파일이 아니라는 사실을 발견했습니다. 실제로는 디렉토리이지만 Finder는 파일인 것처럼 표시합니다. 그래서 나는 복제 프로세스가 원래 .app 디렉토리의 모든 내용을 복사하지 않았으며 "파일 크기"의 차이를 설명했다고 생각했습니다. 그런데 파일/폴더 비교 도구인 DeltaWalker를 다운로드하여 설치했는데 DeltaWalker는 중복된 .app 디렉터리가 원본 .app 디렉터리와 정확히 동일하다고 말했습니다. 그래서 복제 프로세스는 완벽하게 작동했으며 따라서 Finder 보고 파일 크기에 문제가 있는 것 같습니다.

또한 "du" 명령을 사용하여 터미널에서 디렉터리 크기를 확인했는데, 이 역시 원본 디렉터리와 중복 디렉터리 간의 크기 불일치를 보여줍니다.

du -k /Applications/GarageBand.app/
212868  /Applications/GarageBand.app/

du -k /Applications/GarageBand\ copy.app/
397880  /Applications/GarageBand copy.app/

du -k /Applications/iMovie.app/
629644  /Applications/iMovie.app/

du -k /Applications/iMovie\ copy.app/
700500  /Applications/iMovie copy.app/

du -k /Applications/Install\ Xcode.app/
1771864 /Applications/Install Xcode.app/

du -k /Applications/Install\ Xcode\ copy.app/
1772228 /Applications/Install Xcode copy.app/

또한 이는 단지 .app 디렉토리가 아닙니다. /Developer/Library 디렉토리를 복제했는데 du가 말한 내용은 다음과 같습니다.

du -k /Developer/Library/
320784  /Developer/Library/

du -k /Developer/Library\ copy/
399868  /Developer/Library copy/

그러면 Mac OS X이 디렉토리 크기를 올바르게 보고하지 않는 이유를 설명할 수 있는 사람이 있습니까? 버그인가요(너무 단순한 것이라 믿기 어렵습니다), 아니면 제가 뭔가를 놓치고 있는 걸까요(새로운 Mac 사용자임)?

(저는 Mac OS X Lion 10.7.2를 실행하고 있습니다)


eofturtle에 대한 응답 업데이트 :

가장 이상한 점은 Finder에 일관성이 없다는 것입니다. 방금 GarageBand.app을 2개 복제한 다음, 그 중 하나를 2개 복제했습니다. Finder는 모든 단일 복제본을 다른 크기로 표시합니다.

GarageBand.app - 381.7 MB
GarageBand copy.app - 357.6 MB (duplicate of GarageBand.app)
GarageBand copy 2.app - 353.9 MB (duplicate of GarageBand.app)
GarageBand copy 3.app - 378.2 MB (duplicate of GarageBand copy 2.app)
GarageBand copy 4.app - 329.1 MB (duplicate of GarageBand copy 2.app)

또한 "GarageBand copy 3.app"은 "GarageBand copy 2.app"보다 크고 "GarageBand copy 4.app"은 "GarageBand copy 2.app"보다 작습니다. Finder의 버그임에 틀림없습니다.

"du -k"가 이들 모두에 대해 말하는 내용은 다음과 같습니다.

212868  /Applications/GarageBand.app/
397880  /Applications/GarageBand copy.app/
397880  /Applications/GarageBand copy 2.app/
397880  /Applications/GarageBand copy 3.app/
397880  /Applications/GarageBand copy 4.app/

적어도 모든 복제본의 크기는 같지만 원본과 크기는 같지 않습니다.

답변1

차이점은 다양한 계산 방법, 다양한 도구, 압축 및 버그처럼 보이는 것 등 다양한 이유에서 발생했습니다.

그만큼첫 번째 차이점당신이 보는 크기는Finder의 버그. Finder에 표시되는 파일 크기는 어떻게든 실시간으로 계산되어 .DS_Store파일에 캐시됩니다. 어떤 이유로 큰 응용 프로그램/폴더를 복제하는 동안 Finder는 복사 프로세스 중에 크기를 계산하고 불완전한 크기를 캐시합니다. 그런 다음 Finder 창에 해당 크기가 회색으로 표시됩니다. 회색은 의미합니다.Finder는 마지막 크기 계산 이후 콘텐츠가 변경되었음을 알고 있지만 아직 다시 계산하지 않았습니다..

크기를 올바르게 다시 계산하는 유일한 방법은 .DS_Store응용 프로그램 폴더에서 파일을 삭제한 다음 Finder를 종료하고(예: 활동 모니터에서) 다시 시작하는 것입니다(Dock 아이콘에서). 파일 을 삭제하지 않으면 .DS_Store여전히 회색으로 표시됩니다. 어쩌면 기다리고 있을지도 몰라언젠가(시간, 일, 재부팅 등)은 Finder가 자동으로 수행하도록 합니다.

그 후에는 Finder에서 보고된 모든 크기가 동일한 것을 확인해야 합니다.

그렇습니다. 적어도 OSX Lion에서는 Finder 버그처럼 보입니다(여기서는 10.7.4, Finder 버전 10.7.3에서 테스트). 당신은 또한 볼 수 있습니다이 스레드동일한 종류의 동작을 보고합니다.

그런 다음 도구를 고려해 보겠습니다 du. 처음에는 우리가 보는 차이가 복사되는 항목의 논리적 크기와 물리적 크기의 차이로 설명될 수 있다고 생각했습니다. 논리적 크기는진짜즉, 포함된 정보의 모든 단일 비트가 합쳐진다는 의미입니다. 물리적 크기는 디스크에 있는 항목의 크기이며 각 정보 비트는 디스크 섹터에 기록됩니다.

예를 들어, 단일 문자를 포함하는 파일은 논리적 크기가 1바이트가 되지만 실제로 디스크에 기록되면 물리적 크기는 512바이트 또는 심지어 4096바이트가 됩니다. 물리적 크기는 일반적으로 논리적 크기보다 큽니다(디스크나 파일 시스템의 실제 섹터/블록 크기에 따라 다름). 이것은이 다른 스레드에서 더 자세히 설명했습니다.. 다음과 같은 경우 논리적 크기가 더 커질 수 있습니다.스파스 파일, 그러나 HFS+는 이러한 기능을 지원하지 않는 것 같습니다.

du물리적 크기만 표시합니다(BLOCKSIZE가 무엇인지 알 수 있음). 에서 보고한 크기가 du원본보다 항상 더 크다(또는 예외적으로 동일함) 는 것을 알 수 있습니다 . 이는 파일 시스템 및 디스크 공간 조각화 때문입니다. 파일(실제로는 응용 프로그램이 디렉터리이므로 여기에서는 여러 파일)을 복사하면 새 섹터가 디스크에 할당되고,조각화가 일어나면서, 사용되는 블록 수는 일반적으로 원래 항목의 수보다 높습니다. 어떤 사람들은 그렇게 부르죠파일 슬랙.

이제 Finder로 돌아갑니다. 열어보면정보를 얻다복제한 응용 프로그램 창에서 Finder가 실제로 선택한 항목의 논리적 크기와 물리적 크기를 모두 보고하는 것을 볼 수 있습니다. 그러면 말이 됩니다. du약간의 계산을 하면 Finder에서 보고한 물리적 크기와 에서 보고한 크기를 비교할 수도 있습니다 .

왜 수학을 합니까? Finder는 파일 크기를 kB, MB 또는 GB 단위로 표시하고 dukiB, MiB 또는 GiB로 보고하기 때문입니다. 그것들은IEC 바이너리 접두사디지털 정보의 단위를 계산하고 표시하는 데 사용됩니다.

하지만 실제로 File Slack이 여기에 관련되어 있는지 잘 모르겠습니다. 다른 것이 있습니다. HFS+ 볼륨은 압축을 허용합니다., 투명하게 수행되며 Apple은 이를 OS가 설치한 원본 항목에 사용합니다. 그런 다음 표준 도구를 사용하여 파일을 복사하면 더 이상 압축이 사용되지 않습니다(기본적으로 이전 버전과 호환됨). 해당 파일의 압축을 유지하려면 또는 Finder 작업 ditto대신 명령을 사용해야 합니다. cp이것은이번 리뷰에서 설명된.

다음은 다양한 기술을 사용하여 iTunes.app을 복사한 결과입니다. 압축을 유지하면서 애플리케이션을 정확히 동일한 크기로 만드는 것과 cp그렇지 않은 경우도 마찬가지라는 것을 알 수 있습니다. 그리고 필요하지 않은 아치에 대한 바이너리를 제거한 다음 전체 크기를 줄일 수도 있습니다.)

antoine@amarante:/Applications$ du -ms iTunes.app/
281 iTunes.app/
antoine@amarante:/Applications$ cp -a iTunes.app/ iTunes-copy.app/
antoine@amarante:/Applications$ ditto iTunes.app/ iTunes-ditto.app
antoine@amarante:/Applications$ ditto --arch x86_64 iTunes.app/ iTunes-64.app
antoine@amarante:/Applications$ du -ms iTunes*
236 iTunes-64.app
289 iTunes-copy.app
281 iTunes-ditto.app
281 iTunes.app

답변을 주신 @DanPritts에게 감사드립니다.내 보완 게시물에.

답변2

이는 OS X의 끔찍한 결함/버그입니다. 이를 확인하는 가장 쉬운 방법은 대규모 애플리케이션 번들을 복제한 다음 내용을 표시하고 내부에서 대규모 파일을 삭제하는 것입니다. 공간이 복구되지 않습니다. 파일이 여전히 큽니다. 예를 들어 3.5GB 애플리케이션 번들이 있는 경우 콘텐츠를 표시한 다음 거기서 3GB를 제거하면 이제 파일 크기가 500MB인 애플리케이션이 생성됩니다. 그렇지 않을 것입니다. 여전히 3.5GB입니다.

답변3

이것은 기본적으로 추측이지만 두 가지 가능성이 있습니다.

  1. 일부 데이터가 삭제되었지만 원본에서 할당이 해제되지 않았으며 복사되지 않습니다. 그러나 일부 디스크 사용량 검색에는 표시되지만 다른 항목에는 표시되지 않습니다(du 또는 OS X가 내부적으로 사용하는 모든 매개변수에 제공됨).
  2. 일부 데이터는 원래 위치에 연결되며 이는 다양한 도구에서 인식되는 크기에 영향을 미칩니다.

(1) 경우 세 번째 복사본을 만들고 복사본을 비교하면 다른 결과를 얻을 수 있습니다.

답변4

SSD에 Yosemite를 설치한 후 홈 디렉토리를 내부 HDD로 옮긴 후 홈 디렉토리에 이 문제가 발생했습니다. '정보 가져오기'를 사용할 때 Finder의 상태 표시줄에는 240GB의 올바른 크기가 표시되었지만 8GB라는 잘못된 크기만 보고되었습니다. 사용자 폴더에서 정보 가져오기를 클릭하여 문제를 해결했습니다. 그런 다음 제대로 계산되어 홈 디렉터리에서 보고되는 잘못된 크기를 수정했습니다.

관련 정보