inode / file descriptors 설명

**inode

인덱스 노드의 줄임말로 파일시스템(ex. ext4, NTFS, XFS, vxfs)등에서 파일 또는 디렉토리에 대한 메타데이터를 저장하는 데이터구조.
inode에는 파일의 크기, 권한, 소유권, 타임스템프(생성, 수정, 엑세스), 파일데이터가 저장된 데이터블럭의 위치(포인터) 정보가 포함됨.

대부분의 파일시스템에서 inode를 사용하며 실제 데이터대신 메타데이터를 저장하므로서 파일시스템의 효율적인 사용
스냅샷, 하드링크, 효율적인 검색 등이 가능하다.
=> 실제 데이터를 검색하는 것보다 inode만을 검색하여, inode에서 데이터블럭의 위치만 참조하여 가능.

inode의 여러 특징이 있지만 운영상 알아야 할 특징.
– 크기가 제한되어 있다. 각 파일시스템 별로 다르지만 inode에 할당된 크기가 다름, 이에 따라 여러 Max값들이 정해짐.
또한 inode블럭에 데이터가 가득차면 여유공간이 있더라도 데이터를 쓰지 못함.
– inode가 동적으로 조정되는 파일시스템도 있음.
# df -i 명령어로 확인 가능.

파일시스템 내에서 inode를 사용한 구조는 아래 그림을 참조.

“/’의 inode에서 데이터블럭 포인터는 “/”아래 파일 및 디렉토리에 대해 있음.
그림에서 처럼 “/foo/File.txt”라는 파일을 찼기 위해 “/” inode 데이터블럭 포인터에서 /foo 항목을 찼아서 가면 “/foo”의 inode 위치가 있음.
마찬가지로 “/foo”의 inode 포인터정보에서 “File.txt”의 정보를 찼아 해당 inode를 찼아가면 “File.txt”의 inode 데이터블럭포인터에 실제 데이터가 기록된 디스크의 블럭주소를 확인할 수 있음.


“/foo/File.txt” 라는 파일을 읽기위해 “/” inode -> “/foo”의 inode -> “/foo/File.txt”의 inode 까지 읽어서 실제 데이터가 담김 block 주소를 찼아 실제 데이터를 읽음. 파일시스템마다 조금씩 다르지만 여러 떨어진 블럭에 데이터가 저장되어 있다면 실제 데이터 블럭에 다음 데이터가 담김 블럭이 포인터 주소까지 기록되어 순차적으로 읽게 됨.

**file descriptors

파일 디스크립터는 컴퓨터 시스템에서 열려 있는 파일 또는 입/출력(I/O) 리소스를 나타내는 고유 식별자입니다. 운영 체제에서 열려 있는 파일을 추적하고 해당 파일에 대한 읽기 또는 쓰기를 용이하게 하는 데 사용됩니다.
파일 디스크립터는 디스크의 일반 파일로 제한되지 않고 네트워크 소켓, 파이프 또는 장치와 같은 다른 I/O 리소스를 나타낼 수도 있습니다. 프로세스의 각 열린 파일 또는 I/O 리소스에는 고유한 파일 설명자가 할당되어 프로세스가 여러 리소스와 동시에 상호 작용할 수 있습니다.
# lsof -p pid_number 명령어로 확인가능.

여기서 각 행의 “FD” 열은 파일 디스크립터를 나타냅니다. 예를 들어, 첫 번째 행의 “FD” 값은 “cwd”입니다. 이는 현재 작업 디렉토리를 나타내는 디스크립터입니다. 두 번째 행의 “FD” 값은 “rtd”이며, 루트 디렉토리를 나타내는 디스크립터입니다.

또한, 파일 디스크립터의 종류를 나타내는 “TYPE” 열에는 해당 파일이 디렉토리인지, 실행 파일인지 등의 정보가 포함됩니다. “TYPE” 열의 값은 “CHR”은 문자 장치 파일을 나타내며, “REG”는 일반 파일을 나타냅니다.

이 출력에서 “FD” 열은 0, 1, 2와 같은 숫자로 표시

# ls -l /proc/<PID>/fd 위치에서 file descriptors No 및 link 확인 가능

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다