inode, 많은 작은 파일 (xfs, btrfs, ext4)에 대한 공간 비교 소비


9

많은 양의 작은 파일 이있는 ext4 파티션 (VM의 LVM)이 있으며 3-4 개월마다 연장해야합니다.

inode가 사용하는 공간의 양에 대하여.

xfs, btrfs 또는 ext4 파일 시스템 중 하나가 적은 공간을 사용합니까?

다시 말해, btrfs 또는 xfs로 전환하면 파티션이 ext4보다 inode가 느리게 채워 집니까?


ext4를 사용하고 대부분 작은 유형을 저장하려는 경우 mkfs.ext4 -t news최상의 결과 를 위해 이를 작성해야 합니다. 또한 테스트 할 것을 제안합니다-각 파일 시스템을 차례로 (예 : lvm 또는 루프백 장치에서) 생성하고 실제 파일이 가득 찰 때까지 복사하십시오. 파일이 가득 차면 df -i(또는 find | wc -l) 수행하여 대부분의 파일을 저장할 수있는 파일을 찾으십시오.
Matija Nalis

1
@MatijaNalis, -T대문자 T. 구성 파일도 유용한 것으로
보입니다.

@ilkkachu 맞습니다, 감사합니다. 그것은해야한다mkfs.ext4 -T news
마티 Nalis

파일이 얼마나 작습니까?
drudru

답변:


6

첫 번째 질문으로 시작하려면 : 예, 이러한 파일 시스템 중 하나는 적은 공간을 사용합니다. 더 자세한 내용이 없어도 구현이 다르기 때문에 모두 동일한 공간을 사용하지는 않을 것입니다. 따라서 하나는 다른 것보다 적은 공간을 사용해야합니다.

Btrfs에는 동적 inode 할당이 있으므로 ext4에 대한 inode 테이블 (ext4 파일 시스템 작성 시간에 설정된 크기)로 채워지는 것처럼 채워지지 않습니다.

XFS는 비슷한 방식으로 동적이지만 한계 (아이 노드에 사용할 수있는 파일 시스템의 백분율)가 있으므로, 아이 노드 허용량을 채울지 여부는 설정된 백분율 및 파일 수 / 파일 크기에 따라 다릅니다.


빠른 답변 감사합니다! XFS가 현재 가장 안전한 선택 인 것 같습니다. 이 inode 사용률을 동적으로 변경할 수 있습니까? 그렇지 않다면 얼마나 필요할지 예측할 수있는 방법이 있습니까?
abadys

1
당신은 그렇게 할 수 있어야합니다xfs_growfs -m XX
Anthon

3

예, 모든 것이 귀하의 필요에 달려 있음을 명심하십시오 :

Btrfs (Butter FS, Better FS 또는 B-Tree FS로 발음)

btrfs 가 여러 하드 드라이브에 걸쳐있을 수 있다는 점을 고려할 때 ext4 보다 16 배 더 많은 드라이브 공간을 지원할 수 있다는 점에서 매우 좋습니다 . btrfs 파일 시스템의 최대 파티션 크기는 16 엑사 바이트이고 최대 파일 크기는 16 엑사 바이트입니다.

최대 파일 수 : 2 ** 64

XFS

XFS는 고성능 64 비트 저널링 파일 시스템입니다. XFS는 64 비트 파일 시스템에 대해 최대 파일 시스템 크기 8 엑시 바이트를 지원합니다. 이제 RHEL 7.0 은 XFS를 기본 파일 시스템으로 사용하며 /boot파티션에 XFS 사용을 지원 합니다.

최대 파일 수 : 2 ** 64

EXT4

에서 ext4는 잘 때문에 EXT3를 통해 속도 향상을 가져 오는 것으로 알려져있다. ext4에는 약간의 제한이 있습니다. 최대 파일 크기는 16 테비 바이트 (약 17.6 테라 바이트)입니다. ext4로 가질 수있는 가장 큰 볼륨 / 파티션은 1 exbibyte입니다. 가장 현대적인 파일 시스템과 마찬가지로 저널링 파일 시스템은 파일이 주로 디스크의 위치와 디스크에 발생하는 다른 변경 사항에 대한 저널을 유지한다는 것을 의미합니다. 모든 기능에 관계없이 투명한 압축, 투명한 암호화 또는 데이터 중복 제거를 지원하지 않습니다. 스냅 샷은 기술적으로 지원되지만 이러한 기능은 실험적입니다.

최대 파일 수 : 40 억

XFS 및 Btrfs

Xtr에는 RAID가 없지만 Btrfs RAID는 아직 완전히 안정적이 아니며 초기입니다. XFSBtrfs 보다 더 성숙 하지만 Btrfs가 강력하고 잘 성장하는 FileSystem이라는 것을 부정 할 수는 없습니다.

현재 Btrfs가 정말로 필요한 경우가 아니라면 XFS를 선택해야합니다. 특히 RHEL 7의 기본 FS이기 때문입니다.


1
이것은 일반적으로 파일 시스템에 대한 좋은 배경 정보를 가지고 있지만 작은 파일의 특정 문제는 여기에 언급되지 않습니다.
ilkkachu

@ilkkachu "대량의 작은 파일"은 무엇을 의미합니까? 파일은 모두 inode를 통해 생성되고 inode는 파일 시스템 객체를 나타내는 데 사용되는 데이터 구조이기 때문에 모든 inode에 관한 것입니다. 그래서 필자는 필자가 필요한 모든 것을 설명하고 최대 파일 수에 대해 언급했다고 생각합니다.
FarazX

2

나는 당신이 가진 문제가 파티션 자체가 inode로 채워지는 것이 아니라 파일 시스템의 inode 수가 부족하다고 가정합니다. ext4는 파일 시스템이 생성 될 때 inode를 정적으로 예약하지만 옵션으로mkfs.ext4 숫자를 다음과 같이 설정할 수 있습니다 .

-i-bytes-inode
바이트 / 노드 비율을 지정합니다. mke2fs는 디스크의 모든 바이트 당 바이트 당 공간에 대해 inode를 만듭니다. 바이트 당 바이트 비율이 클수록 더 적은 inode가 생성됩니다.

-N-no-of-inodes
파일 시스템에 예약되어야하는 inode 수의 기본 계산을 무시합니다 (블록 수와 IO 당 바이트 수를 기반으로 함). 이를 통해 사용자는 원하는 inode 수를 직접 지정할 수 있습니다.

매뉴얼에서는 FS가 생성 된 후 inode 비율 당 바이트 수를 변경할 수 없지만 FS 크기를 조정하면 총 수는 비율에 맞게 조정됩니다.

각 inode 의 크기 를 설정할 수도 있습니다 . 기본값은 "가장 큰"파일 시스템에서 256 바이트이지만 128 ( "작은"파일 시스템의 기본값)으로 줄일 수 있습니다. 추가 공간은 확장 된 속성 (예 : SELinux 레이블)을 저장하는 데 사용되므로 필요하지 않은 경우 크기를 최소로 줄이는 것이 안전해야합니다.

-I inode-size
각 inode의 크기를 바이트 단위로 지정하십시오. inode 크기 값은 2보다 크거나 같은 128의 제곱이어야합니다.

df -i할당 및 사용 된 inode 수를 표시해야합니다. 기본 옵션을 사용하면 내가 본 30GB 파티션 하나당 16kB마다 하나의 inode가 있었지만 파일이 매우 작은 -i 4096경우 시스템의 모든 데이터 블록에 대해 하나의 inode를 갖도록 설정할 수 있습니다.

파일이 4096보다 작은 경우 모든 일반 파일에는 하나의 전체 데이터 블록이 필요하므로 파일 시스템 블록 크기도 줄일 수 있습니다. (즉, ext4에 있습니다. 다른 현재 파일 시스템이 작은 파일을 포장하는지 알 수 없습니다.)

-b block-size 블록 크기
를 바이트 단위로 지정합니다. 유효한 블록 크기 값은 블록 당 1024, 2048 및 4096 바이트입니다. 생략하면 블록 크기는 파일 시스템 크기와 파일 시스템의 예상 사용량에 따라 발견 적으로 결정됩니다 (-T 옵션 참조).

mkfs.ext4또한 -T <type>이들 중 일부 또는 전부에 대한 속기로 사용할 수있는 옵션이 있습니다. 설정은에 /etc/mke2fs.conf예를 들면하게 내 데비안에있는 mkfs.ext4 -T small동등를

mkfs.ext4 -b 1024 -I 128 -i 4096

작은 파일이 많고 xattrs가없는 경우 나쁜 옵션이 아닐 수 있습니다.

파일이 1kB보다 작은 경우 파일 시스템이 데이터를 저장하는 가장 좋은 방법은 아니지만 데이터베이스 나 응용 프로그램 특정 시스템과 같은 것을 고려해야합니다.

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