ls -i의 inode 번호는 디스크의 inode와 어떤 관련이 있습니까?

ls -i의 inode 번호는 디스크의 inode와 어떤 관련이 있습니까?

ls -iext4 파티션에서 inode 번호 매기기(표시됨)가 어떻게 작동하는지 이해하려고 합니다 .

나는 그것이 Linux 커널의 구성이고 디스크의 inode에 매핑되었는지, 아니면 실제로인지 이해하려고 노력하고 있습니다.디스크에 동일한 번호가 저장되어 있습니다.

질문:

  1. 컴퓨터를 다시 시작한 후에 inode 번호가 변경됩니까?
  2. 두 개의 파티션이 마운트되면 ls -i두 개의 서로 다른 파일이 서로 다른 파티션에 있는 한 동일한 inode 번호가 생성될 수 있습니다.
  3. 파티션을 재부팅하거나 다시 마운트하지 않고도 inode 번호를 회수할 수 있습니까?

내가 왜 물어보는데...

1.5TB의 데이터와 약 2천만 개의 파일(파일 이름)이 포함된 USB 하드 드라이브에 보조 인덱스를 생성하고 싶습니다. 파일 크기는 10바이트에서 100GB까지입니다. 이들 중 다수는 여러 번 하드 링크되어 있으므로 단일 파일(디스크의 blob)에는 최대 200개의 파일 이름이 있을 수 있습니다.

내 임무는 중복을 감지하고 이를 더 많은 하드 링크로 대체하여 디스크 공간을 절약하는 것입니다.

이제 연습으로 디스크에 있는 shasum, 권한 등의 각 파일에 대한 데이터베이스를 만들 수 있다고 생각했습니다. 일단 구축되면 중복 항목을 검색하는 것이 쉽지 않을 것입니다. 올바른 고유 키를 사용하고 있는지 확인해야 합니다. 기존 하드링크가 많아 파일명이 부적절합니다. inode 번호를 사용할 수 있었으면 좋겠습니다.

내가 알고 싶은 것은 다음에 머신을 재부팅할 때 inode 번호가 변경되는지 여부입니다. 아니면 더 불안정한 경우(데이터베이스를 구축하면 변경되나요?)

내가 읽은 모든 문서에는 커널에서 제공하는 inode 번호와 디스크의 inode 번호 간의 차이가 모호하게 표시되어 있습니다. 내가 읽은 기사에 따르면, 그것이 같은 것인지 확실하지 않습니다.

답변1

나는 inode 번호(ls -i로 표시됨)가 ext4 파티션에서 어떻게 작동하는지 이해하려고 노력하고 있습니다.

/etc/passwd기본적으로 inode는 파일 시스템(!)에 대한 참조이며 디스크의 실제 데이터(비트 및 바이트)와 해당 데이터와 관련된 이름(예: 파일 이름은 디렉토리로 구성됩니다. 여기서 디렉토리 항목은 해당 inode가 있는 파일 이름입니다.

그러면 inode에는 실제 정보(권한, 디스크에서 차지하는 블록, 소유자, 그룹 등)가 포함됩니다.UNIX 파일 시스템에 디렉토리 구조가 저장되는 방식, 파일과 inode 간의 관계를 더 잘 설명하는 매우 멋진 다이어그램이 있습니다.

여기에 이미지 설명을 입력하세요.

동일한 inode 번호를 가리키는 파일이 다른 디렉토리에 있으면 하드 링크라고 하는 것이 있습니다.

이제 inode는 파일 시스템별 참조라는 점을 강조했습니다.이것이 이유 다참고:

특정 파일의 inode 번호는 파일 시스템에 고유하지만 특정 호스트에 설치된 모든 파일 시스템에 반드시 고유할 필요는 없습니다. 여러 파일 시스템이 있는 경우 파일 시스템 간에 중복된 inode 번호가 표시되며 이는 정상적인 현상입니다.

이는 다음과 관련이 있습니다.장비. /var파일 시스템 및 와 같이 동일한 장치에 여러 파일 시스템이 있을 수 있지만 /이들은 동일한 드라이브에 있습니다.

이제 inode 번호를 변경할 수 있나요? 일종의. 파일 시스템은 inode 관리를 담당하므로 파일 시스템에 근본적인 문제가 없는 한 inode 번호를 변경해서는 안 됩니다. 일부 까다로운 상황에서는 다음과 같습니다.vim 텍스트 편집기,

이전 파일의 이름을 바꾼 다음 원래 이름으로 새 파일을 작성합니다(원본 파일의 속성을 다시 만들 수 있다고 생각하는 경우). 기존 inode를 재사용하려면(따라서 잠재적으로 데이터가 손실되거나 백업 복사본을 만드는 데 더 많은 시간을 낭비하게 되는 경우) .vimrc에 set backupcopy yes를 추가하세요.

기억해야 할 핵심 사항은 데이터가 사용자에게 동일하게 표시될 수 있지만 실제로는 디스크의 새 위치에 기록되므로 inode 번호가 변경된다는 것입니다.

간단히 말해서:

  1. 컴퓨터를 다시 시작한 후에 inode 번호가 변경됩니까?

재부팅 후 파일 시스템에 문제가 없는 한,

2. 두 개의 파티션을 마운트할 때 ls -i는 두 개의 서로 다른 파일이 서로 다른 파티션에 있는 한 동일한 inode 번호를 생성할 수 있습니다.

예, 두 개의 서로 다른 파티션은 서로 다른 파일 시스템을 갖기 때문입니다. 나는 잘 이해하지 못한다.좌심실 용적ls -, 그러나 이러한 유형의 스토리지 관리에서는 두 개의 물리 볼륨을 하나의 논리 볼륨으로 결합할 수 있으며 이론적 추측에 따르면 파일당 하나의 inode가 생성되는 경우가 됩니다.

  1. 파티션을 재부팅하거나 다시 마운트하지 않고도 inode 번호를 회수할 수 있습니까?

파일 시스템은 파일이 삭제될 때(즉,모든 링크파일이 제거되고 해당 inode를 가리키는 것이 아무것도 없습니다).


내 임무는 중복을 감지하고 이를 더 많은 하드 링크로 대체하여 디스크 공간을 절약하는 것입니다.

음, 중복 검색은 md5sum다른 체크섬 명령을 통해 수행할 수 있습니다. 이 경우 디스크의 다른 inode 아래에 위치할 수도 있고 위치하지 않을 수도 있는 실제 데이터를 검사합니다. 예는 다음과 같습니다.힘멜이 대답했다:

find . ! -empty -type f -exec md5sum {} + | sort | uniq -w32 -dD

답변2

  1. ext4아니요, 컴퓨터를 다시 시작해도 inode 번호는 변경되지 않습니다. 적어도 inode가 디스크에 저장되는 POSIX 파일 시스템(예:)의 경우에는 변경되지 않습니다.

  2. 예, 서로 다른 파티션에 있는 두 개의 서로 다른 파일이 동일한 inode 번호를 가질 수 있습니다. 바라보다두 개의 별도 파일 시스템에 있는 두 파일이 동일한 inode 번호를 공유할 수 있습니까?그리고/home, /usr, /var 등의 디렉토리가 모두 동일한 inode 번호(2)를 갖는 이유는 무엇입니까?더 알아보기. (특정 시스템에서 유일한 것은 장치 번호-inode 쌍입니다.)

  3. 예, 파일을 삭제하면 재부팅하거나 다시 마운트하지 않고도 해당 inode를 재사용할 수 있습니다.

관련 정보