실제로 Linux 커널이 i- 노드에없는 경우 "디스크 공간 부족"을보고하는 이유


10

Linux 환경에서 프로그래밍을 좋아하지만 Linux 관리에 대해 잘 모르는 친구가 최근 OS (우분투)가 "XXX 볼륨의 디스크 공간 부족"을보고하는 문제에 부딪 쳤습니다. 그러나 볼륨을 확인하려고 할 때 여전히 700GB가 남았습니다. 많은 시간을 낭비한 후 결국 그는 아이 노드가 없다는 것을 알 수있었습니다. (이 볼륨의 백업 시스템에서 많은 증분 업데이트를 저장하고 모든 inode를 통해 레코딩했습니다.)

그는 왜 리눅스 커널이 제대로보고하지 않고 ( "out of inodes") 오류 메시지 ( "out of disk space")를보고했는지 물었다. 몰랐으므로 StackExchange에 요청할 것이라고 생각했습니다.

왜 이런 일이 일어나는지 아십니까? 그리고 왜이 모든 시간이 지난 후에도 해결되지 않았습니까? (1995 년에이 문제에 대해 이야기 한 다른 친구를 기억합니다.)

답변:


18

ENOSPC두 가지 상황을 모두보고하는 데 단일 오류 번호 ( )가 사용되므로 동일한 오류 메시지가 표시됩니다.

표준 ISO CPOSIX표준을 준수하기 위해 커널 개발자는 두 이벤트 모두에 단일 오류 번호를 사용할 수 밖에 없습니다. 새 오류 번호를 추가하면 기존 프로그램이 중단됩니다.

그러나 기존의 오류 메시지를 고수하는 것이 AFAIK가 아니므로 개발자가 단일 메시지를 더 명확하게하는 것을 금지해서는 안됩니다. out of disk/inode space

기술적으로 inode 공간이 부족하거나 데이터 공간이 부족한 것은 동일합니다. 즉, 시스템 호출에 성공할 수있는 충분한 디스크 공간이 없음을 의미합니다.

여전히 사용 가능한 inode 슬롯이있는 동안 디스크가 꽉 찬 것으로보고되면 불만을 제기하지 않았을 것입니다.

파일 시스템은 좋아하는 것으로 JFS, XFS, ZFSbtrfs아이 노드는 동적 때문에 더 이상 아무런 전시에게이 문제를하지 않는다 할당합니다.


최근 파일 시스템에는 ext4?
Camilo Martin

@CamiloMartin 나는 그렇게 생각하지 않습니다.
jlliagre

@CamiloMartin 불행히도 아니요, ext4ext2 / 3와 같이 fs 생성 시간에 inode를 할당하며 나중에 수정할 수 없습니다.
Matt

트윗 담아 가기 아마도 이전 버전과의 호환성 일 것입니다. 다른 파일 시스템에는 좋은 기능이 있지만 충분히 안정적입니까 (btrfs는 안정적입니까)? ext4는 일종의 "기본 선택"인 것 같습니다 (적어도 초보자 관점에서).
Camilo Martin

1
예, ext는 항상 이전 버전의 확장이며 이전 버전과 호환되므로 큰 변경은 없지만 상당히 견고하고 안정적입니다. ZFS를 사용하여 Freebsd 상자에서 모든 대용량 저장소를 개인적으로 수행합니다. BTRFS는 여전히 "불안정한"것으로 여겨지지만, 대부분의 배포판에서는 최소한 사용할 수 있습니다.
Matt

2

나는 친구가 ext fs를 사용한다고 가정합니다. 왜냐하면 inode가 부족할 수있는 몇 가지 현명한 fs 중 하나이기 때문입니다.

친구가 자신의 파일 시스템을 사용하여 파산하거나 엄청나게 많은 양의 TB를 가지고있는 것 같습니다. 아이 노드는 한번만 사용하는 것이 아닙니다. 그가 실제로 inode를 다 써 버렸다면, 말 그대로 엄청나게 많은 파일과 디렉토리를 가지고 있음을 의미합니다. 이것은 "4GB (교육받은 추측)"볼륨에서 발생할 수 있으며, 700GB 만 "무료"입니다. fs의 ext 패밀리의 경우, fs가 생성 될 때 inode의 수가 결정됩니다. 로부터 mkfs.ext4매뉴얼 페이지

-i bytes-per-inode
          Specify  the  bytes/inode ratio.  mke2fs creates an inode for every bytes-per-inode
          bytes of space on the disk.  The larger the bytes-per-inode ratio, the fewer inodes
          will  be  created.  This value generally shouldn't be smaller than the blocksize of
          the filesystem, since in that case more inodes would be made than can ever be used.
          Be  warned  that  it is not possible to expand the number of inodes on a filesystem
          after it is created, so be careful deciding the correct value for this parameter.

이 답변의 나머지를 줄이려면 : 이것은 mkfs그러한 비율이 제공되거나 하나를 가정 한다는 것을 의미 합니다. 친구가 fs를 선택한 비율과 다르게 사용하면 사용 사례에 맞지 않을 수 있으며 그 오류가 발생합니다 ... 단일 멀티 TB 볼륨을 작은 파일로 가득 채운 것으로 계산할 수 있습니다.

친구가 파일이나 대량의 파일을 생성 할 수있는 다른 백업 형식에 대해 "휴지통"개념을 구현하는 일부 데스크탑 환경을 사용합니까? 아마도 그는 불필요한 파일을 제거하여 문제를 해결할 수 있습니다.

커널 2.4가 상당히 새로운 시점부터 ext2 의이 문제를 기억합니다. 경험상 필자는 항상 현재 일반적인 것과 비교하여 매우 큰 볼륨에 항상 XFS를 사용합니다. 현재 단일 볼륨에 대해 일반적인 250GB에서 1TB 사이의 모든 것을 호출하고 4TB HDD를 구입할 수 있습니다. 따라서 3TB를 초과하는 모든 경우에는 ext보다 XFS를 사용하는 것이 좋습니다. 경험에 비추어 볼 때, 오랫동안 아이 노드가 부족하지 않은 경우 ...


1
질문에 답변하지 않으실 것 같습니다.
jlliagre

진실. 나는 "어떻게 이런 일이 발생하는지 아는가?"라는 제목의 첫 번째 인라인 질문에 답하려고 노력하고있었습니다.
Bananguin

권리. 내 친구는 무슨 일이 있었는지 알고 있습니다. 그는 압축이 풀린 (또는 TAR'd) 증분 변경 사항을 저장하는 일종의 백업 시스템을 수행하여 작은 파일이 모두 차지하는 공간을 차지했습니다. 나는 그가 이전에 그렇게 큰 FS를 가지고 있다고 생각하지 않기 때문에, inode가 부족한 것이 그를 위해 새로운 것입니다. Ergo, 그는 "df -h"를 입력했을 때 좌절했고 "아직도 여전히 많은 공간이 남아 있습니다"라고 생각했습니다. 솔직히 나는 그 말에 동의합니다. 커널이 "공간 부족"이라고 말하면 실제로 "out of inodes"라는 별도의 메시지가 있어야하는 것은 매우 혼란 스럽다.
Pretzel

@Bananguin-기본 바이트 / 노이드 비율이 무엇인지 아십니까?
Pretzel

@ Pretzel : 기본값은 4k마다 하나의 inode임을 기억합니다. 방금 컴퓨터를 검사 tune2fs -l /dev/sda1했는데 ( ) 4 개의 블록마다 1 inode의 비율이 발생하고 모든 블록의 크기는 1k입니다. 그러나 이것이 "기본"으로 간주 될 수있는 정도는 모르겠습니다.
Bananguin
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.