지난주에 새로운 문제가 생겼습니다. 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 -s
및 find | 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를 시도 하고 반복하십시오.
전체 공개 : --inodes
du 명령에 대한 모든 OS의 지원 플래그는 아니지만 (Mac OS는 그렇지 않음) 많은 Linux OS는 지원합니다.