빠르고 느린 심볼릭 링크

빠르고 느린 심볼릭 링크

~에서http://en.wikipedia.org/wiki/Symbolic_link#Storage_of_symbolic_links

기호 링크의 초기 구현에서는 기호 링크 정보를 일반 파일의 데이터로 저장했습니다. 이 파일에는 링크 대상에 대한 텍스트 참조와 이를 기호 링크(설명 필요)로 나타내는 표시기가 포함되어 있습니다.

이 방법은 속도가 느리고 소규모 시스템에서는 디스크 공간을 비효율적으로 사용합니다. 라고 불리는 개선빠른 심볼릭 링크,디스크에 파일 정보를 저장하는 데 사용되는 데이터 구조(인덱스 노드)에 대상 경로가 저장되도록 허용합니다.. 이 공간은 일반적으로 파일에 할당된 디스크 블록 주소 목록을 저장합니다. 따라서 짧은 대상 경로를 가진 심볼릭 링크에 빠르게 액세스할 수 있습니다. 빠른 심볼릭 링크가 있는 시스템은 원래 방법을 사용하는 경우가 많습니다.대상 경로가 사용 가능한 inode 공간을 초과하는 경우. 원래 스타일은 소급하여 호출됩니다. 느린 심볼릭 링크. 또한 다른 버전 또는 이전 버전의 운영 체제와의 디스크 호환성을 위해 사용됩니다.

  1. "디스크에 파일 정보를 저장하는 데 사용되는 데이터 구조(아이노드) 내에 대상 경로를 저장할 수 있도록 허용"은 빠른 심볼릭 링크가 빠른 심볼릭 링크의 아이노드 내에 링크된 파일에 대한 경로를 저장한다는 것을 의미합니까?

    파일 자체로서 빠른 심볼릭 링크가 실제로는 inode이고 파일 내용이 없습니까?

    느린 심볼릭 링크에는 파일 자체로 inode가 있고 일부 파일 내용이 대상 경로로 있습니까?

  2. "대상 경로가 사용 가능한 inode 공간을 초과하는 경우"는 무엇을 의미합니까?

    파일에 대한 심볼릭 링크가 빠른 심볼릭 링크인 경우 심볼릭 링크와 파일이 동일한 파일 시스템에 있는 경우에만 이것이 맞습니까?

  3. 심볼릭 링크가 빠른지 느린지 확인하는 명령이 있습니까?

  4. 파일 내용이 있는 경우 심볼릭 링크의 내용을 표시하는 명령은 무엇입니까? (이 방법으로 빠른 심볼릭 링크에는 파일 콘텐츠가 없지만 느린 심볼릭 링크에는 파일 콘텐츠가 있는 경우 이를 확인할 수 있습니다.)

답변1

"디스크에 파일 정보를 저장하는 데 사용되는 데이터 구조(아이노드) 내에 대상 경로를 저장할 수 있도록 허용"은 빠른 심볼릭 링크가 빠른 심볼릭 링크의 아이노드 내에 링크된 파일에 대한 경로를 저장한다는 것을 의미합니까?

파일 자체로서 빠른 심볼릭 링크가 실제로는 inode이고 파일 내용이 없습니까?

"파일 내용 포함"의 의미에 따라 다릅니다. 파일 내용을 open()가져올 수 없기 때문에 기호 링크에는 read()파일 내용이 포함되어 있지 않습니다 . 그러나 인용한 텍스트는 "파일에 링크 대상에 대한 텍스트 참조가 포함되어 있음"을 의미합니다. 그렇습니다. 해당 텍스트 참조는 파일의 "내용"으로 간주될 수 있습니다.

이 내용은 심볼릭 링크가 빠른 심볼릭 링크이든 느린 심볼릭 링크이든 동일합니다. 파일 시스템이 이 정보를 디스크상의 데이터 구조에 저장하기로 선택하는 방법과 위치는 구현 세부 사항이며 이에 영향을 미치지 않습니다.

느린 심볼릭 링크에는 파일 자체로 inode가 있고 일부 파일 내용이 대상 경로로 있습니까?

같은 관점에서 보면 그렇습니다!

"대상 경로가 사용 가능한 inode 공간을 초과하는 경우"는 무엇을 의미합니까?

inode를 저장하는 데 사용되는 파일 시스템과 데이터 구조 유형, 해당 데이터 구조에 여유 공간이 얼마나 있는지, 크기가 가변인지 고정인지 여부에 따라 다릅니다. 느린 기호 링크로 저장되기 전의 기호 링크 대상 경로의 최대 길이는 파일 시스템 구현 세부 사항입니다.

그런데, 특정 파일 시스템이 짧은 내용을 저장하기 위해 동일한 트릭을 사용하는 것을 막을 수는 없습니다.정기적인공간과 디스크 액세스를 절약하기 위한 파일입니다.

심볼릭 링크가 빠른지 느린지 확인하는 명령이 있습니까?

기껏해야 파일 시스템 디버깅 또는 덤프 도구입니다. 관심 있는 파일 시스템 유형(xfs, ext*, btrfs 등...)에 전적으로 의존합니다.

파일 내용이 있는 경우 심볼릭 링크의 내용을 표시하는 명령은 무엇입니까? (이 방법으로 빠른 심볼릭 링크에는 파일 콘텐츠가 없지만 느린 심볼릭 링크에는 파일 콘텐츠가 있는 경우 이를 확인할 수 있습니다.)

를 사용하여 심볼릭 링크의 대상 경로(콘텐츠)를 얻을 수 있지만 readlink그것도 ls -l괜찮습니다.

답변2

연결된 것에서인덱스 노드위키 페이지:

파일 내용 외에도 파일 시스템은 파일에 대한 데이터 구조에도 의존합니다. 전자를 메타데이터, 즉 데이터를 설명하는 데이터라고 합니다. 각 파일은 종종 i 번호 또는 inode 번호라고 하는 정수로 식별되는 inode와 연결됩니다.

inode는 파일 소유권, 액세스 모드(읽기, 쓰기, 실행 권한), 파일 유형 등 파일 및 디렉터리(폴더)에 대한 정보를 저장합니다. 많은 유형의 파일 시스템 구현에서 파일 시스템이 생성될 때 최대 inode 수가 고정되어 파일 시스템이 보유할 수 있는 최대 파일 수가 제한됩니다. 파일 시스템의 inode에 대한 일반적인 할당 경험적 방법은 전체 크기의 1%입니다.

inode 번호는 장치의 알려진 위치에 있는 inode 테이블을 인덱싱합니다. inode 번호를 기반으로 커널의 파일 시스템 드라이버 부분은 inode에 액세스할 수 있는 파일의 위치를 ​​포함하여 inode의 내용에 액세스할 수 있습니다. 이 명령을 사용하여 파일의 inode 번호를 찾을 수 있습니다 ls -i. 이 ls -i명령은 보고서의 첫 번째 열에 있는 inode 번호를 인쇄합니다.

위에서 언급한 것처럼 ls -i이는 inode 번호를 제공할 수 있습니다. 이는 아마도 링크가 있는 위치일 것입니다. ls -l링크 대상에 대한 경로를 제공합니다. 후자는 stat()시스템 호출이 필요합니다. 그러나 파일의 디렉터리 목록이디렉토리 항목- inode 번호와 파일 이름이 포함되지만 형식에는 ls -i포함되지 않을 수 있습니다. 적어도 파일 시스템에 따라 stat()포함된 디렉터리 이외의 파일 개체가 필요하지 않을 수도 있습니다.

ls다음 옵션을 사용하여 연결된 보고서가 보고되는 방식을 수정할 수 있습니다.POSIX에 의해 지정됨:

-F- -H 또는 -L 옵션이 지정되지 않는 한 피연산자라는 기호 링크를 따르지 마십시오. 디렉토리인 각 경로 이름 바로 뒤에 슬래시( '/' )를 쓰고, 각 실행 파일 뒤에는 별표( '*' )를 쓰고, 각 FIFO 뒤에는 파이프( '|' )를 쓰고 at 기호( '@ )를 씁니다. ' ) 각 경로 이름 뒤에는 기호 링크가 있습니다. 다른 파일 형식의 경우 다른 기호를 쓸 수 있습니다.

-H- 디렉토리 유형 파일을 참조하는 기호 링크가 명령줄에 지정되면 ls는 링크 자체가 아닌 링크가 참조하는 파일의 파일 정보와 파일 유형을 평가하지만 ls는 링크 이름을 작성해야 합니다. 링크에서 참조하는 파일이 아닙니다.

-L- 모든 기호 링크(명령줄에서 이름이 지정되었거나 파일 계층에서 발견되었는지 여부)의 파일 정보 및 파일 유형을 링크 자체가 아닌 링크에서 참조하는 파일의 것으로 평가합니다. ls 링크의 이름입니다. 링크가 참조하는 파일이 아니라 자체적으로 작성되어야 합니다. -L을 -l과 함께 사용하면 기호 링크의 내용을 긴 형식으로 기록합니다(STDOUT 섹션 참조).

링크가 어떻게 될까요?빠르게하나? ~에서동일한 링크 위키 페이지:

인라인

매우 작은 파일을 inode 자체에 저장하면 공간(데이터 블록이 필요하지 않음)과 탐색 시간(추가 디스크 액세스가 필요하지 않음)이 절약됩니다. 이 파일 시스템 기능을 인라인이라고 합니다. 따라서 최신 파일 시스템을 사용할 때 inode와 파일 데이터의 엄격한 분리를 더 이상 가정할 수 없습니다.

파일의 데이터가 데이터 포인터에 할당된 공간에 맞으면 해당 공간을 편리하게 사용할 수 있습니다. 예를 들어 ext2는 데이터가 60바이트를 초과하지 않는 경우 심볼릭 링크(일반적으로 파일 이름)의 데이터를 이런 방식으로 저장합니다.("빠른 심볼릭 링크").

Ext4에는 파일 시스템 생성 중에 활성화되면 ext4가 인라인을 수행할 수 있도록 하는 inline_data라는 파일 시스템 옵션이 있습니다. inode의 크기는 제한되어 있으므로 매우 작은 파일에만 작동합니다.

나는 여기에 또 다른 훌륭한 대답이 위의 방법을 언급한다고 생각합니다같은 트릭...

관련 정보