“크기”와 “디스크의 크기”사이에 왜 큰 차이가 있습니까? 보다 조금

아래에서 볼 수 있듯이 내 폴더의 디스크 크기크기 필드에는 많은 차이가 있습니다. 왜 그런 겁니까?

1,504 개의 폴더에 50,875 개의 파일을 표시하는 스크린 샷, 105MB는 디스크에 1.43GB

디스크의 크기 는 Windows의 할당 단위로 인해 크기 보다 조금 더 커야한다는 것을 알고 있지만 왜 그렇게 큰 차이가 있습니까? 파일 수가 많기 때문일 수 있습니까?

BTW,이 폴더는 내 안드로이드 폰의 SD 카드에 있습니다. 이 안에 내지도 앱은 캐시 된지도를 저장하고 앱은 Google지도에서지도를 가져옵니다.



답변

여기서는 SD / FAT32 파일 시스템을 사용한다고 가정합니다. 왜냐하면 이것이 SD 카드라고 언급했기 때문입니다. NTFS 및 exFAT는 할당 단위와 관련하여 유사하게 작동합니다. 다른 파일 시스템은 다를 수 있지만 Windows에서는 지원되지 않습니다.

작은 파일이 많은 경우에는 가능합니다. 이걸 고려하세요:

  • 50,000 개 파일

  • FAT32의 최대 값 인 32kB 클러스터 크기 (할당 단위)

자, 이제 최소 공간은 50,000 * 32,000 = 1.6GB입니다 (수학을 단순화하기 위해 이진이 아닌 SI 접두사 사용). 각 파일이 디스크에서 차지하는 공간은 항상 할당 단위 크기의 배수입니다. 여기서는 각 파일이 실제로 하나의 단위 내에 들어가기에 약간의 공간이 남아 있다고 가정합니다.

각 파일의 평균이 2kB 인 경우 총 약 100MB를 얻을 수 있지만 할당 단위 크기로 인해 평균적으로 15 배 (파일 당 30kB)를 낭비하고 있습니다.


심층적 인 설명

왜 이런 일이 발생합니까? FAT32 파일 시스템은 각 파일이 저장된 위치를 추적해야합니다. 모든 단일 바이트의 목록을 유지해야한다면 (주소록과 같은) 테이블은 데이터와 같은 속도로 증가하여 많은 공간을 낭비하게됩니다. 따라서 “클러스터 크기”라고도하는 “할당 단위”를 사용합니다. 볼륨은 이러한 할당 단위로 나뉘며 파일 시스템과 관련하여 세분화 할 수 없습니다. 이는 처리 할 수있는 가장 작은 블록입니다. 집 번호가있는 것처럼 우체국 장은 침실이 몇 개인 지 또는 누가 살고 있는지 신경 쓰지 않습니다.

매우 작은 파일이 있으면 어떻게됩니까? 파일 시스템은 파일이 0kB, 2kB 또는 15kB인지 상관하지 않으므로 위의 예에서 32kB 인 공간을 최대한 줄입니다. 파일은이 공간을 소량 만 사용하고 나머지는 기본적으로 낭비되지만 여전히 파일을 차지합니다. 마치 침실을 비우십시오.

할당 단위 크기가 다른 이유는 무엇입니까? 글쎄, 그것은 더 큰 테이블 (주소록, John이 123 Fake Street, 124 Fake Street, 666 Satan Lane 등의 집을 소유하고 있다고 말함) 또는 각 단위 (집)에서 더 많은 공간을 낭비하는 것 사이의 균형이됩니다. 더 큰 파일이 있으면 더 큰 할당 단위를 사용하는 것이 더 좋습니다. 다른 모든 파일이 채워질 때까지 파일은 새 단위 (하우스)를 갖지 않기 때문입니다. 작은 파일이 많으면 어쨌든 큰 테이블 (주소록)을 갖게되므로 작은 단위 (집)를 줄 수도 있습니다.

큰 할당 단위는 일반적으로 작은 파일이 많은 경우 많은 공간을 낭비합니다. 일반적으로 일반적인 사용을 위해 4 kB 이상으로 올라갈만한 이유는 없습니다.


분열?

조각화와 관련하여 조각화는 이러한 방식으로 공간을 낭비해서는 안됩니다. 큰 파일은 여러 할당 단위로 분할 (즉, 분할) 될 수 있지만 다음 파일이 시작되기 전에 각 단위를 채워야합니다. 조각 모음을 수행하면 할당 테이블의 공간이 약간 절약 될 수 있지만 이는 특정 문제가 아닙니다.


가능한 해결책

으로 gladiator2345 제안 ,이 시점에서 당신의 유일한 옵션은 함께 살 이하 할당 단위로 포맷한다.

카드는 FAT16으로 포맷 될 수 있는데, 이는 테이블 크기에 대한 제한이 더 작으므로 더 큰 볼륨을 처리하기 위해 훨씬 더 큰 할당 단위가 필요합니다 (32kB 할당 단위로 2GB의 상한). Braiam의 소스 제공 . 이 경우 어쨌든 FAT32로 안전하게 포맷 할 수 있어야합니다.


답변

이것은 하나의 파일로 압축 / 아카이빙이 도움이 될 수있는 상황 중 하나입니다. 어떤 밥이 그의 대답에서 말했다 것은 사실이다 하지만이 솔루션은 다른 답변에서 알 수 있듯이 디스크를 reformating 더 쉽게 할 수있다. zip, tar 또는 다른 방법을 사용하여 디렉토리를 압축하거나 아카이브하면 파일 시스템에 여러 개의 작은 파일 대신 하나의 큰 파일이 있음을 알 수 있습니다. 압축하지 않아도 거의 1.4GiB의 공간을 되 찾을 수 있습니다. 이러한 “작은 파일”은 모두 하나의 큰 파일로 계산되기 때문입니다.

이 안에 내지도 앱은 캐시 된지도를 저장하고 앱은 Google지도에서지도를 가져옵니다.

여러 파일 대신 아카이브 나 데이터베이스를 사용하려면 개발자와상의해야합니다. 이것은 아마도 디스크 조각화를 줄이는 데 도움이되며 특히 NAND 플래시 드라이브 인 경우 공간을 절약 할 것입니다. 100MB의 페이로드 / 유용한 데이터가 1.4GiB가되는 어리석은 상황을 설명하면 데이터 저장 방법에 문제가 있으며 개발자가 더 나은 솔루션을 제공해야합니다.


답변

누구든지이 문제에 직면 한 경우 디스크의 파일 크기 / 공간에서 큰 차이를 보는 또 다른 이유는 대체 데이터 스트림 (ADS)을 사용한다는 것입니다.

이것은 내 지식에 NTFS에만 적용됩니다. ADS는 합법적이거나 합법적이지 않은 용도로 알려져 있습니다.

  • 인터넷에서 다운로드 한 파일에 태그를 지정하려면
  • 메타 데이터 저장
  • 멀웨어의 맥락에서 데이터 또는 코드를 숨길 수 있습니다 .

ADS 간단히 : 모든 NTFS 파일은 여러 데이터 스트림을 보유 할 수 있습니다 ( “서브 파일”이해). 하나는 Windows 탐색기 및 기타 Windows 도구에서 사용되는 기본 스트림이며 일반적인 파일 내용을 보유합니다. 대체 데이터 스트림에는 기본 스트림과 같은 다른 정보가 포함될 수 있지만 Windows 도구에서 직접 처리 할 수는 없습니다 (특히 탐색기는 파일 크기를 ADS의 크기에 상관없이 메인 스트림의 크기와 동일하게 표시합니다). ADS를 작성, 읽고, 찾으려면 특수 도구 나 코드를 사용해야합니다.

중요한 점은 파일 크기 차이가 큰 경우 ADS 및 숨겨진 맬웨어의 가능성을 간과하지 마십시오.

다른 링크 .

ADS를 안전하게 실험하려면 DOS / CMD 수준에서 시도하십시오.

C의 루트에 파일 내용을 만든 다음 표시하십시오.

C:\> echo The main data stream> test.txt
C:\> type test.txt

결과:

C:\> The main data stream

이제 동일한 방법으로 ADS를 추가하고 파일 이름 외에 ADS 이름을 지정하십시오.

C:\> echo The secret message> test.txt:secret

파일에서 비밀 메시지를 숨겼습니다. ADS “secret”에 바이트를 추가 했음에도 불구하고 탐색기의 파일 크기는 변경되지 않았습니다.

ADS 컨텐츠를 표시하십시오.

C:\> type test.txt:secret

결과:

The filename, directory name, or volume label syntax is incorrect.

CMD type는 ADS의 내용을 표시 할 수 없습니다. 대신 메모장을 사용합니다.

notepad test.txt:secret

메모장에서 ADS의 내용을 볼 수 있습니다.

The secret message

무고한 텍스트 파일의 ADS에서 전체 실행 파일을 숨기고 언제든지 실행할 수 있습니다. 부는 해커에게 해를 끼치 지 않습니다 🙂


답변

클러스터 크기 때문에 문제가 발생했을 수 있습니다.

Microsoft 에 따르면 :

볼륨에 포함 된 파일이나 폴더에 대해 NTFS 압축을 사용하지 않는 경우 SIZE와 SIZE ON DISK의 차이는 필요한 클러스터 크기보다 크기 때문에 공간이 낭비됩니다. SIZE ON DISK 값이 가능한 한 SIZE 값에 가깝도록 최적의 클러스터 크기를 사용해야합니다. SIZE ON DISK와 SIZE 값 사이의 과도한 불일치는 기본 클러스터 크기가 볼륨에 저장하는 평균 파일 크기에 비해 너무 커서 축소해야 함을 나타냅니다. 이는 볼륨을 백업 한 다음 format 명령과 / a 스위치를 사용하여 적절한 할당 크기를 지정하여 볼륨을 다시 포맷해야만 수행 할 수 있습니다. IE : format D: /a:2048
(이 예에서는 2KB 클러스터 크기를 사용합니다).

더 작은 클러스터 크기로 드라이브를 포맷하십시오.


답변

더 작은 클러스터 크기로 드라이브를 다시 포맷하는 것이 좋습니다. 이 카드는 SD 카드이므로 많은 공급 업체가 NAND의 클러스터 크기와 일치하도록 권장 클러스터 크기로 카드를 사전 포맷합니다 (동기화를 유지하는 것은 최적의 읽기 / 쓰기 성능과 마모를 줄이기 위해 매우 중요합니다)

NAND의 클러스터 크기는 변경할 수 없습니다 (SD 카드 하드웨어의 물리적 특성).

먼저 SD 카드에서 scandisk / chkdsk를 실행하여 크기 보고서 문제가 손상된 파일 시스템 내에 있지 않은지 확인하십시오.

둘째, 버그를 Google Map 개발자에게보고하십시오. 그들은 우수한 저장 방법을 사용해야합니다. 또한 수정하면 I / O가 적고 파일 시스템의 드라이버 활동으로 인해 많은 장치에서 앱이 더 빨리 실행됩니다.


답변

이것은 많은 파일 시스템에서 일반적인 문제입니다. 여기에는 파일 시스템이 논리 볼륨 당 처리 할 수있는 최대 “블록”수와 저장 매체의 물리적 제한이라는 두 가지 요소가 있습니다. 주어진 블록에는 하나의 파일 만 할당 할 수 있습니다 (파일은 일반적으로 필요한만큼 많은 블록을 사용합니다). 따라서 64 바이트의 텍스트 파일은 파일 시스템의 블록 크기에 따라 4k에서 32k 사이의 값을 가질 수 있습니다.

이것을 생각하는 한 가지 방법은 파일 시스템의 각 블록을 상자로, 파일 시스템을 방으로 생각하는 것입니다. 모든 상자는 같은 크기이며 방에 최대한 많이 넣으려고 노력합니다. 더 많은 공간을 남겨둔 채 모두에 맞추려면 더 큰 상자를 가져 와서 방이 상자로 완전히 채워지도록해야합니다.

상자에 물건을 넣는 규칙 중 하나는 상자에 두 가지 관련이없는 물건을 넣을 수 없다는 것입니다. 그것들은 같은 문서의 일부 여야합니다. 따라서 한 페이지의 텍스트를 입력하면 자체 상자가 있습니다. 입력 한 텍스트에 너무 많은 페이지가 있으면 한 상자에 모두 넣을 수 없었습니다. 다른 상자를 찾아서 대신 페이지를 넣는 대신 모든 페이지를 제출할 때까지 반복합니다. 또한 해당 문서에 사용한 상자와 순서대로 읽는 순서를 적어 두었습니다.

상자를 구성하는 방법에 따라 매니페스트에 특정 수의 상자를 넣을 공간이 충분할 수 있습니다. 따라서 채울 공간이 크지 만 상자 수가 적 으면 방 용량에 도달하려면 매우 큰 상자를 사용해야합니다.

따라서이 경우 내 한 페이지 문서는 여전히 단일 상자를 차지하며 다른 상자는 공유하지 않습니다.

다양한 스토리지 솔루션에서 동일한 상황이 발생합니다. FAT32는 오늘날의 거대한 하드 드라이브에서 적은 수의 “상자”로 간주되는 항목 만 관리 할 수 ​​있으므로이를 보완하기 위해 매우 큰 “상자”로 끝납니다.


답변

클러스터 크기 외에도 다음과 같은 조건으로 인해 불일치가 발생할 수 있습니다.

  • 압축 또는 암호화 된 파일은 논리 파일 크기와 다른 공간을 차지할 수 있습니다.
  • 링크 된 파일은 논리 파일 크기에 대한 링크 크기와 파일 크기의 n 배 를보고 하지만 사용되는 실제 공간은 일반적으로 적습니다.