많은 하드 링크가있는 NTFS 디렉토리에서 사용 된 실제 크기를 어떻게 확인할 수 있습니까?


14

Win7 NTFS 볼륨에서는 --link-dest를 올바르게 지원하는 cwrsync를 사용하여 "스냅 샷"유형 백업을 만듭니다. 그래서 나는 가지고있다:

z:\backups\2010-11-28\cygdrive\c\Users\...
z:\backups\2010-12-02\cygdrive\c\Users\...

2010-12-02의 내용은 대부분 2010-11-28 디렉토리의 파일로 다시 연결되는 링크이지만 2010-12-02에만 새 파일 또는 변경된 파일이 몇 개 있습니다. Linux에서 'du'유틸리티는 각 증분 스냅 샷에서 가져온 실제 크기를 알려줍니다. Windows에서 cygwin 아래의 탐색기와 du는 모두 하드 링크에 속하며 2010-12-02는 2010-11-28보다 약간 더 많은 공간을 차지합니다.

올바르게 사용 된 정확한 공간을 표시하는 Windows 유틸리티가 있습니까?


이 문제를 해결하는 도구는 왜 / winsxs 폴더가 너무 커져서 더 작게 만들 수 있는지에 대한 정확한 그림을 얻는 데 매우 유용 합니다.
매트 윌키

이것은 일반적인 디스크 사용에 대한 de-factor 질문 및 답변 인 것 같습니다 : Windows에서 파일 시스템 사용을 어떻게 시각화 할 수 있습니까?
매트 윌키

답변:


11

사용해보십시오 시스 인 터널 디스크 사용량을 (그렇지 않으면으로 알고 du구체적를 사용) -u-v플래그는 고유의 발생을 계산합니다, 그것은 나 가면서 각 폴더의 사용을 보여줍니다.

내가 아는 한 파일 시스템은 원본 파일과 하드 링크 (실제로 하드 링크의 포인트)의 차이를 나타내지 않으므로 폴더별로 폴더를 할인 할 수는 없지만 이 작업을 상대적으로 수행해야합니다.

테스트하기 위해 6 개의 파일이있는 임의의 폴더를 만들었습니다. 모든 것을 복제했습니다. 그런 다음 첫 번째 폴더 안에 여러 개의 하드 및 소프트 링크를 만들어 첫 번째 폴더에있는 다른 파일을 참조하고 두 번째 폴더에있는 다른 파일을 참조하십시오.

du -u -v testFld결과 실행 중 (폴더 옆의 값은 KiB에 있음) :

       104  <path>\testFld\A
        54  <path>\testFld\B
       149  <path>\testFld

Totals:
Files:        12
Directories:  2
Size:         162,794 bytes
Size on disk: 162,794 bytes

실행 du -u -v testFld\a결과 :

104  <path>\testFld\a
...

실행 du -u -v testFld\b결과 :

74   <path>\testFld\b
...

불일치가 있습니까?
B에서 파일을 참조하는 A의 심볼릭 링크는 "전체"실행 중에 A에 대해서만 계산되며 B는 54를 반환합니다 (파일은 원래 B에 있고 A에서 하드 링크되어 있음에도 불구하고). B를 별도로 측정 할 때 (또는 -u고유 한 플래그를 사용하지 않는 경우 ) "전체"측정 값은 74입니다.


1
고마워, 나는 sysinternals du, cygwin에 대해서만 몰랐다. 분명히 cygwin du는 내가 원하는 것을 수행하지만 바운티를 시작하기 전에 시도하지 않았다.
kbyrd

이 답변은 -u플래그 의 기능을 혼동합니다 . 당신은 얻을 "전체"측정 이 경우 사용-u 플래그. 파일이 없으면 하드 링크 된 파일의 인스턴스 1 개만 계산합니다. docs.microsoft.com/en-gb/sysinternals/downloads/du 문서에서 그렇게 말하면 테스트에서 확인합니다.
martixy

2

PowerShell 5는 옵션 일 수 있습니다. Windows 7에서 사용할 수 있지만 2015 년 4 월 미리보기를 사용하여 Server 2012 R2에서만 테스트했습니다.

PowerShell을 5의 파일 시스템 공급자는 두 개의 새로운 속성이 LinkType과를 Target:

ls taskmgr.exe | fl LinkType,Target

이것은 다음을 반환합니다.

LinkType : HardLink
Target   : C:\Windows\WinSxS\amd64_microsoft-windows-advancedtaskmanager_..._6.3.9600.17..2\Taskmgr.exe

이제 system32에서 하드 링크가 아닌 모든 파일 만 표시 할 수 있습니다.

cd $env:SystemRoot\System32
ls -Recurse -File -force -ErrorAction SilentlyContinue | ? LinkType -ne HardLink | Measure-Object -Property Length -Sum

이것은 다음을 반환합니다.

Count    : 844
Sum      : 502,486,831

모든 파일과 비교할 수 있습니다.

ls -Recurse -File -force -ErrorAction SilentlyContinue | Measure-Object -Property Length -Sum

Count    : 14092
Sum      : 2,538,256,262

따라서 2GB + 이상의 13,000 개가 넘는 파일은 하드 링크입니다.


1

TreeSize Professional (~ $ 55, 30 일 평가판)은 NTFS 하드 링크 디스크 공간을 구별한다고 주장합니다. 빠른 시련이이를 입증하는 것 같습니다.

하드 링크 지원이 기본적으로 해제되어 있지 않습니다 : 도구> 옵션> 스캔으로 이동 한 후 다시 스캔 한 다음 Ctrl-1Ctrl-2을 사용 하여 크기할당 된 공간 간을 전환하십시오 . 할당 된 실제 공간은 할당 되지만 크기 는 다른 프로그램에서 일반적으로보고하는 통계입니다.

하드 링크 지원을 켜면 성능이 저하됩니다 (필요한 경우 심볼릭 링크도 탑재). 컬러 팔레트는 내 취향에 화려하지만이 장르의 코스에 필적하는 것 같습니다. 상자 차트 영역을 클릭 할 때주의해야합니다. 폴더를 확장하려는 경우 실수로 드래그 앤 드롭으로 실수로 폴더를 이동하기 쉽습니다.


1

여기 몇 가지 사실을 설정해야한다고 생각합니다.

모든 파일은 실제로 디스크의 여러 바이트에 대한 하드 링크이기 때문에 Windows는 하드 링크를 "감지"할 수 없습니다.

du 도구는 중복 항목을 감지하지만 폴더 A에 파일이 있고 B에 A의 파일에 대한 하드 링크 만 포함되어 있으면 du의 du du의 du는 동일한 대답을 반환하므로 원래 오는 파일 크기 이 파일들은 이제 B에도 있습니다.

예를 들어 A를 삭제 한 경우 파일이 여전히 B에 의해 참조되기 때문에 디스크에서 해당 파일이 삭제되지 않기 때문에 이것은 실제로 올바른 것입니다. 하드 링크를 사용하면 어떤 파일이 소스이고 어떤 것이 하드 링크인지 상당히 임의적이고 의미가 없습니다.

du와 같은 제품은 중복을 할인하면서 디렉토리를 나열합니다. 모든 파일과 하드 링크가 하나의 디렉토리에 포함 된 경우에만 작동합니다. 많은 폴더 목록 제품이 그렇게합니다.

결론 : 하드 링크의 경우 "NTFS 디렉터리에 사용 된 실제 크기"라는 질문은 의미가 없습니다.


1

나는 또한이 질문에 대한 조사를합니다. 내가 찾은 결과는 다음과 같습니다.

NTFS로 하드 링크 된 파일을 포함하는 폴더 크기는 세 가지 다른 의미로 간주 될 수 있습니다.

  1. 모든 하드 링크 된 파일의 크기를 포함한 크기 (WE로 표시됨).
  2. 현재 폴더 측면에서만 고유 파일의 크기입니다.
  3. 전체 디스크 측면에서만 고유 파일 크기.

"NTFS 하드 링크 추적"옵션이 활성화 된 경우 TreeSize Professional에서 할당 된 열의 세부 정보 탭에 숫자 2가 표시됩니다.

다음은 winsxs 폴더에 대한 예입니다 (10의 반대 7.5Gb).

영상

3 번 가치를받는 것은 여전히 ​​질문입니다. NL_Info 플러그인과 함께 Total Commander를 사용하여 하한을 얻을 수 있었지만. 내가 가진 것은 하나의 하드 링크 (독특한 파일)가있는 파일이 차지하는 크기입니다. 주어진 예에서 약 5Gb였습니다.

따라서 harrymc 답변을 확장하거나 다른 말로 표현하려고합니다.


0

ln.exe 를 사용 하여 디렉토리 트리의 "실제 크기"를 표시 할 수 있습니다 .

ln.exe --truesize z:\backups\.

해당 시작 폴더 아래의 하드 링크 만 감지합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.