ext4 파일 시스템에서 inode 수를 늘리려면 어떻게해야합니까? 한 후,

지난주에 새로운 문제가 생겼습니다. ext4 (Fedora 15) 파일 시스템이 있습니다. 서버에서 실행되는 응용 프로그램이 갑자기 중지되었습니다. 처음에는 문제를 찾을 수 없었습니다.

df사용 가능한 공간이 50 %로 표시되었습니다. 약 1 시간 동안 검색 한 후, 그 사람이 사용한 포럼 게시물을 보았습니다 df -i. 이 옵션은 inode 사용을 찾습니다. 시스템에는 inode가 없었으며, 내가 알지 못하는 간단한 문제였습니다. 파티션에는 3.2M inode 만있었습니다.

이제 내 질문은 : 시스템에 더 많은 inode를 만들 수 있습니까? 디스크를 포맷 할 때 설정해야합니까? 3.2M inode를 사용하면 몇 개의 파일을 가질 수 있습니까?



답변

일반적인 예상보다 많은 파일이있는 것 같습니다.

inode 테이블 크기를 동적으로 변경하는 솔루션이 있는지 모르겠습니다. 데이터를 백업하고 새 파일 시스템을 만들고 데이터를 복원해야한다고 걱정됩니다.

거대한 inode 테이블로 새로운 파일 시스템을 만들려면 mke2fs (8)의 ‘-N’옵션을 사용해야합니다.

추정 된 inode 수를 얻을 수 있도록 ‘-n’옵션을 먼저 사용하는 것이 좋습니다 (fs를 만들지 않지만 유용한 정보를 표시 함). 그런 다음 ‘-N’을 사용하여 특정 inode 번호로 파일 시스템을 만드십시오.


답변

또 다른 해결 방법으로 거대한 파일 모음을 압축되지 않은 (!) tar아카이브 로 압축 한 다음 archivemount파일 시스템으로 마운트하는 데 사용할 것을 제안 할 수 있습니다. tar 아카이브는 파일 시스템 이미지보다 공유하기에 좋으며 클라우드 또는 다른 스토리지에 백업 할 때 유사한 성능을 제공합니다.


컬렉션이 읽기 전용 squashfs이어야하는 경우 옵션 일 수 있지만 커널에서 특정 옵션을 사용하도록 설정해야 xz하며 동일한 성능으로 tar에 대해서도 압축을 사용할 수 있습니다.


답변

320 만 개의 inode를 사용하면 총 320 만 개의 파일과 디렉토리를 가질 수 있습니다 (그러나 파일에 대한 여러 하드 링크는 하나의 inode 만 사용합니다).

예, 파티션에서 파일 시스템을 만들 때 설정할 수 있습니다. 옵션 -T usage-type, -N number-of-inodes또는 -i bytes-per-inode모두 inode 수를 설정할 수 있습니다. 나는 일반적으로 사용 -i의 출력을 비교 한 후, du -sfind | wc -l파일의 유사한 수집 및 일부 여유를 허용.

아니요, 기존 파일 시스템에서 해당 위치를 변경할 수 없습니다. 하나:

  • LVM을 실행 중이거나 파일 시스템이 SAN의 LUN에 있거나 (LUN에 직접 또는 LUN의 마지막 파티션으로) 파티션 뒤에 디스크에 빈 공간이있는 경우 파티션을 확장 한 다음 resize2fs파일 시스템을 확장하는 데 사용 합니다. 이것은 추가 된 공간에 비례하여 더 많은 inode를 추가합니다. 향후 파일의 평균 크기가 거의 같다고 가정하고 공간 전에 inode가 부족하지 않게하려면을 사용하여 예약 된 블록 비율을 충분히 높게 설정하십시오 tune2fs -m.
  • 충분한 공간이 있고 파일 시스템을 오프라인으로 전환 할 수있는 경우 오프라인으로 전환하고 더 많은 inode가있는 새 파일 시스템을 생성 한 다음 모든 파일을 복사하십시오.
  • 파일의 서브 세트 만 많은 inode를 사용하고 충분한 여유 공간이있는 경우 파일 시스템의 파일이 지원하는 루프 장치에 파일 시스템을 작성하고 더 많은 inode (및 더 작은 블록도 포함)가있는 파일 시스템을 작성하십시오. 그것에 문제를 일으키는 디렉토리로 옮기십시오. 아마도 성능이 저하되고 유지 관리가 번거로울 수 있지만 대안입니다.
  • 물론 불필요한 파일을 많이 삭제할 수 있다면 도움이 될 것입니다.

답변

이 상황에 대한 대체 솔루션이 있습니다. 10G 파티션 에 1000 개의 inode가 있다고 가정 해 봅시다. 그러나 inode 제한으로 인해 모든 파티션 공간을 사용한다고 가정하지는 않습니다 . 그러나이 솔루션에서는 파티션 의 남은 공간을 포맷 하지 않고 사용할 수 있습니다.

$ df -i  # see list ( I need just one free inode here so move just one file into other PARTITION)
/dev/part1  1000 999 1 99.9%     /data

$ dd if=/dev/zero of=/data/new_data
$ mkfs.ext4 /data/new_data
$ mkdir /data1
$ mount /data/new_data /data1

영구 장착 용

$ echo "/data/new_data /data1 ext4 defaults 0 1" >> /etc/fstab


답변

최근에 apt 또는 aptitude 업그레이드를 사용할 때이 문제가 발생했습니다.

df -h

Filesystem      Size  Used Avail Use% Mounted on
/dev/xvda1      7.8G  5.1G  2.3G  70% /

df -i

Filesystem     Inodes  IUsed  IFree IUse% Mounted on
/dev/xvda1     524288 521497   2791  100% /

발행 된 명령 :

du /|sort -k1 -n

대부분의 파일이 다음의 여러 커널 버전에 대한 하위 폴더에 있음을 공개했습니다.

/usr/src/linux-headers

해당 하위 폴더를 제거하고 inode 문제가 해결되었습니다.

df -i

Filesystem     Inodes  IUsed  IFree IUse% Mounted on
/dev/xvda1     524288 104986 419302   21% /


답변

du -s --inodes * 2>/dev/null |sort -g출력의 마지막 dir에 cd를 시도 하고 반복하십시오.

전체 공개 : --inodesdu 명령에 대한 모든 OS의 지원 플래그는 아니지만 (Mac OS는 그렇지 않음) 많은 Linux OS는 지원합니다.


답변