2011-11-08 2 views
3

리눅스 파일 시스템에서 inode 번호가 사용되는 방법에 대한 몇 가지 질문이 있습니다. 이 질문들은 관련이있을 수 있지만 명확히하기 위해 하나씩 묻습니다. "예를 들어,"Design and Implementation of the Second Extended Filesystem "에서 EXT2/3 가져 오기 블록 그룹에 inode 테이블이 있다는 것을 알고 있고, inode가 파일을 제공한다는 것을 알고 있지만 파일이 너무 많지만 inode 번호가 충분하지 않은 경우 어떻게 될까요? ? 필자의 가장 좋은 추측은 파일 시스템이 모든 inode 번호가 모두 소모 되었다면 아무것도하지 않는다는 것입니다. 그리고 일부 파일이 나중에 삭제되면 inode가 재활용 될 수 있습니다.inode 번호가 리눅스 루트 파일 시스템에서 어떻게 분산되어 있습니까?

Q2 : 내 리눅스 서버의 "DF -i"를 실행하고 나는이 얻을 :

Filesystem   Inodes  IUsed IFree  IUse% Mounted on  
    /dev/sda1   1313280 7853 1305427 1% /
    devtmpfs     0  0  0    -  /dev 
    tmpfs     525298  4 525294  1% /dev/shm 
    /dev/sda2    65808  50 65758  1% /boot 
    /dev/sda5   1313280  146 1313134 1% /opt 
    /dev/sda6    655776  37 655739  1% /tmp 
    /dev/sda7    655776 5219 650557 1% /home 
    /dev/sda8   1313280  840 1312440 1% /var 
    /dev/sda9    655776 36529 619247 6% /usr 
    /dev/sda10    6432  11 6421  1% /crash 
    /dev/sda12   135488  11 135477  1% /usr/local/instances 
    tmpfs     525298  3 525295 1% /var/run/xenstored 
    tmpfs     525298  3 525295 1% /var/lib/xenstored 
    tmpfs     525298  3 525295 1% /var/lib/xend/socket 
    tmpfs     517536  3 517533 1% /var/run/libvirt/socket 

나는 각각의 파일 시스템 (devtmpfs tmpfs와 같은) 자신의 아이 노드의 수와 이들 파일 시스템을 가지고 모두 볼 수 있습니다 root file system에 장착 나는 각 파일 시스템이 각각의 inode 테이블을 가지고 있다고 가정하지만 루트 파일 시스템은 [0, N]이고 tmpfs는 [N + 1, M]과 같이 서로 다른 범위로 분산 된 서로 다른 파일 시스템의 inode 번호입니까?

다른 파일 시스템의 inode 번호가 다른 범위에 있다면 (나는 그렇게 생각하지 않습니다) 파일 시스템이 범위 분할에 대해 어떻게 합의합니까?

같은 규칙에 따라 다른 파일 시스템의 inode 번호가 생성되는 경우 (모두 0부터 시작), 서로 파일 시스템을 마운트해도 파일 시스템이 서로 충돌 할 수 있습니까? 내가 아는 한, inode는 실행중인 OS에서 파일을 표시하고, 루트 파일 시스템의 파일이 inode 번호 N이고 다른 파일 시스템 (tmpfs와 같은)의 다른 파일도 inode 번호 N 인 경우 OS가 수행 할 작업은 무엇입니까?

추신. 나는 리눅스에 익숙하지 않고 영어 사용 국가에서 온 것이 아닙니다. 미안하지만 분명히 표현하지 않으면 유감입니다. 미리 감사드립니다.

+0

http://s.tk/unix에서 더 좋은 질문 인 것처럼 들립니다. –

+0

"유닉스"또는 "우분투"포럼 중 하나를 시도해보십시오. 더 나은 답변을 얻을 수 있습니다 : -}. 우리는 여기에 그냥 코더이며 일반적으로 "System.IO.WriteLine()"다음에 무슨 일이 일어나 든 상관하지 않습니다. –

+0

이것은 말하기 어려운 질문 중 하나입니다. 나는 이것이 유닉스 전반에 관한 흥미로운 구현 세부 사항이기 때문에 여기에 속한다고 말한다. – Omnifarious

답변

4

파일의 고유 한 고유 식별자는 (st_dev, st_ino)입니다. 즉, 파일 시스템 전체에서 inode 번호가 고유 할 필요는 없으며 모든 파일이 여전히 고유하게 식별됩니다.

이 때문에 장치를 교차하는 하드 링크를 사용할 수 없습니다. 디렉토리 항목은 장치 번호가 아닌 inode 번호 만 포함합니다. 따라서 디렉토리 항목은 디렉토리가있는 것과 동일한 파일 시스템의 파일만을 참조 할 수 있습니다.

디렉토리 항목에 장치 필드를 추가 한 경우에도 드라이브를 추가하거나 제거 할 때 장치 번호가 변경 될 수 있으며 시스템 실행 중에는 특정 장치 만 참조 할 수 있습니다. 또한 전 세계의 모든 장치에 고유 한 번호를 어떻게 지정 하시겠습니까? 예를 들어, USB 드라이브를 사용하면 기기간에 기기를 가져갈 수 있습니다. 링크가 계속 작동하도록 장치 번호를 동일하게 유지하려면 어떻게해야합니까?

마지막으로 모든 파일 시스템 유형이 고정 된 양의 inode 번호를 갖는 것은 아닙니다. reiserfs와 (필자는) btrfs는 필요에 따라 새로운 inode를 동적으로 할당하므로 파일 시스템의 총 inodes 필드는 실제로 유용한 값을 반영하지 않습니다.

+0

'(st_dev, st_ino)'는 매우 유용한 정보이며 하드 링크에 대한 설명입니다. 감사. – xanpeng

관련 문제