ext 파일 시스템의 파일은 언제 해제됩니까?

ext 파일 시스템의 파일은 언제 해제됩니까?

소개하다

최근까지 나는 ext 파일 시스템에서 inode에 디렉토리 항목이나 파일 설명자가 파일을 참조한 횟수를 계산하는 참조 카운터가 있다고 생각했습니다.

그런 다음 참조 카운터는 이를 참조하는 디렉터리 항목의 수만 계산한다는 것을 알게 되었습니다. 이를 위조하기 위해 비디오 파일의 참조 카운트를 읽는 방법을 사용합니다 ls -l. 예상대로 추가 하드 링크를 만들지 않았기 때문에 1이었습니다. 그런 다음 비디오 플레이어로 비디오 파일을 열고 동일한 명령을 다시 실행했습니다. 놀랍게도 참조 횟수는 여전히 1입니다. 그러므로 나의 위조는 실패했습니다.

그러나 유일한 디렉토리 항목을 제거한 후에도 비디오를 계속 시청할 수 있습니다. 대용량 비디오 파일을 열고 해당 디렉토리 항목을 삭제해도 파일 시스템에서 사용 가능한 저장 공간의 양은 변경되지 않습니다. 플레이어가 비디오 끝에 도달하고 파일 설명자를 닫거나 플레이어가 자체 종료되는 경우에만 변경됩니다(비디오 파일의 크기에 따라)(사용된 비디오 플레이어에 따라 다름).

질문

외부 파일 시스템에서 파일을 릴리스하기 위한 정확한 조건은 무엇입니까? ext2, ext3, ext4에서 어떻게 처리되는지 궁금합니다. 사용된 커널이나 OS의 다른 부분에 따라 차이가 있습니까?

답변1

파일 시스템 링크 카운터와 파일 설명자 참조 카운터라는 두 가지 카운터를 혼동하고 있습니다.

  1. 파일 시스템 링크 카운터는 파일 시스템 자체에 있는 inode에 대한 링크 수를 계산합니다. inode는 파일 메타데이터를 포함하는 구조입니다. ext* 파일 시스템에서 이 카운터는 파일 시스템 자체에 저장됩니다.

    inode가 있는 링크 수를 확인하는 데 사용할 수 있습니다 ls -l. 또한 를 ls -i사용하여 파일의 inode 번호를 얻을 수 있습니다. 예를 들어 파일을 두 배로 늘리는 링크를 사용해 보고 ln모든 링크의 inode 번호가 동일한지 확인하세요.

    andcoz@tseenfoo:~/refcount> ls -li
    total 40
    2248813 -rw-r--r-- 1 andcoz users 40960  7 feb 21.34 test
    andcoz@tseenfoo:~/refcount> ln test test2
    andcoz@tseenfoo:~/refcount> ln test test3
    andcoz@tseenfoo:~/refcount> ls -li
    total 120
    2248813 -rw-r--r-- 3 andcoz users 40960  7 feb 21.34 test
    2248813 -rw-r--r-- 3 andcoz users 40960  7 feb 21.34 test2
    2248813 -rw-r--r-- 3 andcoz users 40960  7 feb 21.34 test3
    
  2. 파일 설명자 참조 카운터는 프로세스에서 파일을 연 횟수, 더 공식적으로는 해당 inode를 참조하는 파일 설명자 수를 계산합니다. 이 정보는 커널 메모리에 저장됩니다.

    명령을 사용하여 이 값의 대략적인 값을 얻을 수 있습니다 fuser. 이 명령은 파일이 열려 있는 모든 프로세스를 나열합니다. 단일 프로세스가 동일한 파일을 여러 번 열 수 있으므로 퓨저 목록 크기는 일반적으로 참조 카운터보다 작거나 같습니다.

    andcoz@tseenfoo:~/refcount> tail -f test &
    [3] 4226
    andcoz@tseenfoo:~/refcount> fuser test
    /home/andcoz/refcount/test:  4226
    andcoz@tseenfoo:~/refcount> tail -f test2 &
    [4] 4354
    andcoz@tseenfoo:~/refcount> fuser test
    /home/andcoz/refcount/test:  4226  4354
    

다음과 같은 경우 파일이 파일 시스템에서 삭제됩니다.둘 다카운터는 0입니다.

답변2

링크 수가 0에 도달하면 파일이 해제됩니다. 즉, 마지막 디렉토리 항목이 삭제되고 파일 설명자가 열린 마지막 프로세스가 명시적으로 또는 암시적으로 종료하여 해당 항목을 닫습니다. 이는 표준 Unix 의미 체계이며 Ext, Ext 2, Ext 3 및 Ext 4를 포함한 모든 Linux 파일 시스템에 적용됩니다.

관련 정보