왜 inode 테이블의 크기를 조정할 수 없습니까?


19

유닉스 파일 시스템에는 보통 inode 테이블이 있으며이 테이블의 항목 수는 일반적으로 파일 시스템이 생성 될 때 고정됩니다. 이로 인해 충분한 여유 공간이없는 디스크 공간을 가진 사람들이 사용 가능한 공간이 없다는 혼란스러운 오류 메시지를 보게되며 문제가 무엇인지 파악한 후에도 해결 방법이 없습니다.

그러나 주문형 inode를 사용자와 시스템 관리자에게 완전히 투명하게 할당하여 이러한 혼란을 피하는 것이 매우 바람직 할 것 같습니다. 귀여운 해킹에 빠지면 inode 테이블 자체를 파일로 만들 수 있으므로 디스크의 여유 공간을 찾는 기존 코드를 재사용 할 수 있습니다. 운이 좋으면 명시 적 으로이 결과를 얻으려고하지 않고 파일 자체 근처의 inode로 끝날 수도 있습니다.

그러나 아무도 (내가 아는) 실제로 이것을하지 않으므로 아마도 내가 놓친 캐치가있을 것입니다. 그게 뭔지 알아?


4
NTFS의 마스터 파일 테이블의 선구자 인 VMS에서 마스터 파일 디렉토리 및 파일 인덱스 -11을 다시 발명했습니다.
JdeBP

MFT의 선구자를 재발 명했습니까? 멋있는!
Mark VY

답변:


26

inode 테이블을 파일로 만들었습니다. 다음 질문은 ... 해당 파일에 대한 정보를 어디에 저장합니까? 따라서 MS-DOS 파티션 테이블과 같이 "실제"inode와 "확장"inode가 필요합니다. 주어진 것만으로도 하나만 필요합니다 (예 : 저널을 파일로 만들려면 몇 개). 그러나 실제로는 특별한 경우, 다른 코드가 있습니다. 해당 파일이 손상되면 치명적일 수 있습니다. 또한 저널링 전에 전원이 크게 손상되었을 때와 같이 쓰여지는 파일이 일반적이라고 생각하십시오. 귀하의 파일 작업이 될 것이다 많은 등보다 강력한 대 정전 / 사고 /. 예를 들어, ext2보다 그렇습니다.

전통적인 유닉스 파일 시스템은 더 단순하고 강력한 솔루션을 찾았습니다. X 블록마다 아이 노드 블록 (또는 블록 그룹)을 넣습니다. 그런 다음 간단한 산술로 찾을 수 있습니다. 물론 전체 파일 시스템을 재구성하지 않고는 더 추가 할 수 없습니다. 그리고 전원이 꺼 졌을 때 쓰던 inode 블록을 잃어 버렸거나 손상하더라도 파일 시스템의 상당 부분보다 훨씬 적은 inode 만 손실됩니다.

보다 현대적인 디자인은 B- 트리 변형 과 같은 것을 사용 합니다. btrfs, XFS 및 ZFS와 같은 최신 파일 시스템에는 inode 제한이 없습니다.


2
"아이 노드 한계로 고통받지 말라"고 말할 때, 새로운 아이 노드가 완전히 배후에 할당되거나 누군가 "expand-table-now-please"와 같은 명령을 실행해야합니까?
Mark VY

3
@MarkVY는 완전히 배후에 있습니다 (아이 노드가 실제로 사용되는 경우).
derobert

그래, 내 지식은 분명히 시대를 뒤덮고 있습니다. 자세한 답변 감사합니다. 나는 전력 손실 또는 이와 유사한 경우에 일어날 일에 대해 결코 생각하지 않았습니다. 따라서 "append to file"이 이미 파일 시스템에서 원자적인 작업이 아닌 한 내 귀여운 해킹은 매우 위험합니다. 당신이 주장하는 것은 예전에는 꽤 드문 일이었습니다.
Mark VY

XFS와 btrfs 때때로 가벼운 파일 시스템 손상으로 고통 받고 있다는 것을 기억합니다-zfs ? 일부에게는 위험하지 않지만 중요한 데이터 및 동적 할당 비용에 대한 위험이 될 수 있습니다. 이 샵에서 XFS의 경우, 거래 중단 문제는 어떤 방법 으로든 파일 시스템을 축소 할 수 없었습니다.
user2066657

Btrfs는 inode 한계를 겪지 않을 수도 있지만 완전히 다른 결함으로 유사하게 혼동되는 증상을 유발합니다 (기본적으로 블록 그룹의 비효율적 인 사용으로 인해 메타 데이터 공간이 부족하면서도 사용 가능한 데이터 공간이 충분 함). 이로 인해 df사용 가능한 충분한 공간을보고 할 때 디스크 가득 참 오류 가보고 될뿐만 아니라 파일을 삭제하면 메타 데이터 공간을 할당해야하므로 파일을 삭제하여 수정할 수 없습니다.
Mark

17

많은 파일 시스템에는 동적으로 할당 가능한 inode 테이블 (또는 그와 동등한 수준)이 있습니다 (XFS, BTRFS, ZFS, VxFS ...).

원래 Unix UFS에는 파일 시스템 작성 시간에 수정 된 inode가 있었으며 그로부터 파생 된 파일 시스템 (Linux EXT, Solaris UFS)은 종종 그 체계를 계속했습니다. 강력하고 간단하게 구현할 수 있습니다. 하나의 문제를 정당화하기가 쉽지 않다는 것을 피하기 위해 새로운 파일 시스템을 설계하는 많은 사용 사례가 적합합니다.


그럼에도 불구하고 정당화하기 쉽지 않은 문제를 해결하는 사람들이 컴퓨팅 분야에서 많은 발전을 이루었습니다.
user253751

2
그러나, 해결하기 쉽지 않은 솔루션의 많은 발전 :) 초기 "복잡한"파일 시스템
-NT

6

inode를 동적으로 할당하는 파일 시스템이 있습니다. 최소한의 Veritas VxFS (= HP-UX의 기본 파일 시스템 및 Solaris에서 사용 가능한 선택 중 하나) 및 XFS (RHEL 7의 표준 파일 시스템 유형)가 작동합니다. 그런 식으로. Btrfs와 IBM의 JFS도 마찬가지입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.