심볼릭 링크가 실제로 디스크 사용량에 영향을 미치나요?

심볼릭 링크가 실제로 디스크 사용량에 영향을 미치나요?

나는 많은 웹사이트에서 Linux에서 심볼릭 링크(symlink)가 다음과 같다는 것을 읽었습니다.바늘Windows 바로 가기 등 어디에나 있을 수 있는 다른 파일을 참조합니다. 그런데 심볼릭 링크가 존재하는 폴더의 디스크 사용량을 확인해 보니 파일 관리자가 표시하는 내용과 보고된 내용이 일치하지 않습니다 du. 그러나 du -L( -L, --dereference; dereference all symbolic links맨 페이지에서) 를 입력하면 ,파일 관리자가 보고한 출력과 크기 du -L가 동일합니다..

내 질문은: 예를 들어 별도의 파티션에 대용량 파일에 대한 소프트 링크가 있는 경우 home문제가 발생합니까?

:

/var/tmp폴더는 지금 비어 있습니다. 파일을 만들어 보겠습니다.

$ cat /some/file.txt > file.txt
$ du -ac
164 ./file.txt
168 .
168 total

내 파일 관리자(이 경우 Thunar)가 보고합니다.

크기: 항목 1개, 총 163.0kB

좋아요 이제 매우 큰 파일 /tmp과 해당 심볼릭 링크를 만들어 보겠습니다 .

$ cat /dir/really_big.txt > /tmp/heavy.txt
$ du -a | grep heavy.txt
408 ./heavy.txt
$ ln -s /tmp/heavy.txt heavy.txt
$ du -ac
164 ./file.txt
0   ./heavy.txt
168 .
168 total

지금까지는 모든 것이 괜찮습니다. 하지만 파일 관리자를 열면:

크기: 2개 항목, 총 570.3kB

마침내:

$ du -acL
164 ./file.txt
408 ./heavy.txt
576 .
576 total

파티션이 /var/tmp1GiB이고 그 안에 1GiB 파일에 대한 링크를 생성하면 하드 드라이브가 작동하지 않습니까? 168과 Thunar 1 GiB를 출력할 것이라는 것을 알고 있지만 du어느 것이 올바른지는 모르겠습니다.

답변1

물론 기호 링크는 공간을 차지하지만 이름과 대상 및 기타 메타데이터를 저장하는 데 필요한 몇 바이트만 차지합니다. 심볼릭 링크가 차지하는 공간은 대상이 차지하는 공간에 의존하지 않습니다(결국 대상은 존재할 필요조차 없습니다).

Plain은 du디스크의 디렉토리 트리가 차지하는 공간을 보고합니다. du -L보고서 공간~ 할 것이다모든 심볼릭 링크가 해당 대상으로 대체되면 디렉토리 트리에서 얻습니다. 전자는 유용한 정보인 경우가 많습니다. 예를 들어 트리를 삭제한 경우 이는 복원하려는 공간이고 대략적으로 트리를 백업하는 데 필요한 공간입니다.

du표시된 디렉토리 트리는 (보통) 파일 크기의 합보다 약간 더 큽니다. 이는 두 가지 때문입니다. 첫째, du파일 이름과 메타데이터를 저장하는 데 약간의 공간이 필요한 디렉터리도 계산됩니다. 둘째, du파일이 차지하는 디스크 공간을 계산합니다. 이는 파일 크기와 다를 수 있습니다. 가장 일반적인 효과는 파일이 정수 블록(일반적인 Linux 설치의 경우 4kB)을 차지한다는 것입니다. 따라서 1바이트 파일은 du 출력에서는 4kB로 표시되지만 압축됩니다(예:스파스 파일거의 모든 UNIX 파일 시스템에서) 디스크 사용량보다 더 큰 파일을 만드는 것이 가능합니다.

귀하가 제공한 숫자를 바탕으로 Thunar가 보고했습니다.심볼릭 링크를 따르는 디렉터리 트리의 파일 크기 합계. 실제로 이 내용은 미묘한 방식으로 표시됩니다. 전체 크기가 570.3kB라고 주장하지만 디스크 사용량이 570.3kB라고 주장하지는 않습니다. 사용자 인터페이스나 문서에서 전혀 명확하지 않은 점은 Thunar가 크기를 계산할 때 심볼릭 링크를 따른다는 것입니다.

어느 것이 "올바른"지는 주관적인 문제입니다. du디스크 사용량을 보고합니다. Thunar는 심볼릭 링크 뒤의 전체 크기를 보고합니다. 기호 링크 생성은 디스크 사용량에 미미한 영향을 미치지만, 정의에 따라 Thunar가 보고하는 기호 링크의 전체 크기는 변경됩니다.

답변2

기본적으로 파일 관리자는 소프트 링크가 가리키는 파일의 크기를 얻으려고 시도하여 du그들이 가리키는 파일의 크기가 아닌 디렉토리와 소프트 링크 자체의 크기를 제공합니다.

밝히다,

`du`    -> size of directory + size of all the softlinks  
`du -L` -> size of directory + size of all the files that the softlinks are pointing to.

이것이 귀하가 요청하는 것인지 확실하지 않지만, 그렇다면 이것이 귀하의 질문에 대한 답변이 될 수 있다고 믿습니다.

관련 정보