라이브러리 버전을 업데이트한 후 inode 기반 파일 시스템에 재부팅이 필요하지 않은 이유는 무엇입니까? [복사]

라이브러리 버전을 업데이트한 후 inode 기반 파일 시스템에 재부팅이 필요하지 않은 이유는 무엇입니까? [복사]

inode가 무엇인지 알고 싶습니다. 그러나 이 구절은 다음에서 유래한다.위키피디아나를 혼란스럽게 한다:

inode 파일 시스템을 사용하여 새 라이브러리를 설치하는 것은 매우 간단합니다. 실행 중인 프로세스는 라이브러리 파일에 액세스할 수 있으며, 다른 프로세스는 파일을 대체하고 새 inode를 생성하며, 이후에 라이브러리에 액세스하려고 시도하면 새 버전을 얻을 수 있도록 새 파일에 대해 완전히 새로운 매핑이 존재하게 됩니다. 이 기능은 재부팅할 필요 없이 현재 매핑된 라이브러리를 대체합니다. 따라서 프로그램을 업데이트할 때 가장 좋은 방법은 이전 실행 파일을 삭제한 다음 업데이트된 버전에 대한 새 inode를 생성하여 이전 버전을 실행하는 모든 프로세스가 중단 없이 계속될 수 있도록 하는 것입니다.

답변1

Unix 스타일 파일 시스템에서는 시스템이 파일에 대해 알고 있는 모든 것(파일 이름 제외)이 inode 또는 inode가 가리키는 위치에 저장됩니다. 여기에는 콘텐츠, 소유권, 수정 날짜 및 권한이 포함됩니다. Unix 디렉토리 항목은 단순히 이름과 inode에 대한 포인터이며 프로세스가 파일을 열 때만 사용됩니다. 파일이 열리면 디렉토리 항목은 관련이 없습니다.

즉, 파일을 읽거나 쓰는 프로세스를 방해하지 않고 현재 열려 있는 파일을 삭제할 수 있습니다. 파일을 삭제하면 단순히 디렉토리 항목이 삭제됩니다. inode는 모든 프로세스가 파일을 닫을 때까지 유지됩니다. 이때 inode와 기타 모든 파일 데이터는 삭제됩니다(또는 적어도 더 이상 사용되지 않고 재활용 가능한 것으로 표시됨). 이는 inode 구조의 일부인 "링크 수"라는 필드에 의해 처리됩니다.

따라서 실행 중인 프로그램에서 사용 중인 공유 라이브러리를 업그레이드하려면 해당 라이브러리 파일을 삭제하면 됩니다. 프로그램에 이미 파일이 열려 있으므로 이로 인해 영향을 받지 않습니다. 그런 다음 새 버전의 라이브러리를 새 파일로 설치합니다(새 inode를 얻습니다).

관련 정보