하나의 디렉토리에 많은 수의 디렉토리와 파일을 담을 수 있도록 24TB 디스크를 준비하고 싶습니다.(이 정책을 바꾸라고 하지 마세요. 소프트웨어에서 사용하는 구조이고 우리에게는 블랙박스이므로 우리는 이 방법은 변경할 수 없습니다.) 내가 조사한 바에 따르면 ext4 파일 시스템은 수십억 개의 파일을 디렉토리에 저장할 수 있지만 몇 가지 특수 플래그와 매개변수를 사용하여 준비해야 합니다. 이것은 내 연구를 기반으로 내가 사용하는 것입니다.
sudo mke2fs -T news /dev/sdb1
sudo tune2fs -O dir_index /dev/sdb1
sudo tune2fs -O large_dir /dev/sdb1
sudo tune2fs -O dir_nlink /dev/sdb1
sudo mkdir /hdd
sudo gedit /etc/fstab
- add following to the end of the file:
/dev/sdb1 /hdd ext4 defaults,noatime 0 0
sudo mount /hdd
구조를 테스트하기 위해 단일 디렉터리에 디렉터리와 파일을 생성하는 bash 스크립트를 준비했습니다. 이 같은:
for ((i = 1000000; i <= 200000000; i++))
do
sudo mkdir "/hdd/largedir/$i" -p
sudo cp "sample-file.jpg" "/hdd/largedir/$i"
if (( $i % 1000 == 0 ));
then
echo "$i created";
fi;
done
몇 시간 작업한 후 시스템을 확인했을 때 다음 오류가 인쇄되었습니다.
Structure needs cleaning
내 테스트에서는 모든 파일과 디렉터리에 대해 이 오류가 인쇄되지 않습니다. 예를 들어 "10000"이라는 디렉터리를 만들 수 있지만 "1000"이라는 디렉터리는 만들 수 없습니다. 또한 다음을 사용하여 해싱 알고리즘을 변경했습니다.
sudo tune2fs -E "hash_alg=tea" /dev/sdb1
시스템을 다시 시작하고 다시 설치했지만 문제가 지속되었습니다. 문제가 무엇인지, 파일 시스템에서 이런 일이 발생하는 이유를 아는 사람이 있습니까? ext4 파일 시스템은 그렇게 큰 구조를 가질 만큼 강력하지 않습니까? 대용량 파일을 처리하기 위해 ext4 대신 xfs를 사용하는 방법에 대한 일부 페이지를 읽었습니다. 이거 진짜야?
파일 작업 중에 시스템에 정전이나 충돌이 발생하지 않았음을 알 수 있습니다. 모든 것이 정상이었을 때는 그런 행동을 기대하지 않았습니다.
-- 추가 정보를 위해 편집됨: --
디스크의 inode 정보는 다음과 같습니다.
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sdb1 421216256 183643803 237572453 44% /hdd
공간정보는 다음과 같습니다.
Filesystem Size Used Avail Use% Mounted on
/dev/sdb1 26T 3.1T 21T 13% /hdd
파일 시스템을 확인해 보니 ext4입니다(다양한 도구에서 표시됨). 예를 들어 gparted는 파티션 파일 시스템을 ext4로 표시합니다. 기능과 관련하여 위 기능은 우분투 18.04 LTS에서 기본적으로 활성화되어 있지 않습니다. 나는 이전 테스트에서 몇 가지 버그를 발견했고 마침내 이것을 달성했습니다.
답변1
이 명령을 사용하면 sudo mke2fs -T news /dev/sdb1
반드시 ext4 파일 시스템을 생성할 필요는 없지만 대신외부 2파일 시스템.
Ubuntu 18.04에 /etc/mke2fs.conf
기본적으로 Debian 10과 동일한 파일이 있다고 가정하면 dir_index
이미 Use Modern 으로 활성화되어 있으며 기본적으로 활성화되어 있습니다 mke2fs
.dir_nlink
외부 4파일 시스템 유형.
매뉴얼 mke2fs.conf(5)
페이지에는 " mke2fs.conf
사용자나 파일 모두 기본 파일 시스템 유형을 지정 하지 않으면 mke2fs
기본 파일 시스템 유형이 사용됩니다.외부 3명령줄 옵션을 통해 로그가 요청되는 경우 또는외부 2그렇지 않다면. "
문서 에 따르면 /etc/mke2fs.conf
이 옵션은 옵션 -T news
만 지정 하고 다른 것은 지정하지 않습니다. 따라서 일반 양식 대신 양식을 inode_ratio = 4096
사용하지 않는 한 아마도mkfs.ext4
mke2fs
외부 2평균 크기가 4kB 이하인 파일에 맞게 조정된 파일 시스템입니다.
Debian은 섹션 fs_type =
에 [defaults]
지정 되지 않았으며 명령 에 대한 옵션을 mke2fs.conf
포함하지 않았습니다 . 따라서 Ubuntu의 옵션이 Debian의 옵션과 동일하면(일반적으로 그렇습니다) 명령을 사용하면 아마도 24TB가 제공될 것입니다.-j
mke2fs
mke2fs.conf
외부 2파일 시스템에서는 누구도 특별히 테스트하지 않았을 수 있습니다.
매뉴얼 페이지에는 파일 시스템 기능이 필요에 따라 자동으로 설정된다고 ext4(5)
나와 있으며 , 이는 이러한 도구가 오류를 보고하지 않는 이유를 설명할 수 있습니다. 또한 ext2 파일 시스템은 이 기능을 무시한다고 64bit
합니다 .dir_index
멀티 테라바이트 파일 시스템에 대한 과거 경험을 바탕으로 ext3
파일 시스템 생성 및 확인 시간이 상당할 것으로 예상했습니다. 사용 사례에 따라 이 기능의 유무에 따라 dir_index
애플리케이션 성능이 향상되거나 중단될 수 있습니다.
tune2fs -l /dev/sdb1
실제 결과를 원래 질문으로 편집하여 무슨 일이 일어났는지, 일어나지 않았는지 추측할 필요가 없도록 해주실 수 있습니까 ?
EUCLEAN
"구조를 정리해야 함" 은 커널 오류 코드에 해당하는 기본 텍스트 로 나타나며 , 이는 파일 시스템이 손상되어 파일 시스템 검사가 필요함을 나타냅니다. 이 크기의 파일 시스템에서는 상당한 시간과 RAM이 필요합니다. 물론 파일 시스템을 확인하는 동안 마운트를 해제해야 합니다.
답변2
실제로, 많은 테스트를 거친 후에 나는 ext4가 그런 일(단일 디렉토리에 수십억 개의 파일을 저장하는 것)을 수행할 수 없는 것 같다는 것을 발견했습니다. Linux에서 이 작업을 수행하는 방법에 대한 내 연구를 바탕으로 한 결과(실제 실제 테스트)에서는 이 경우 ext4 대신 XFS를 사용해야 한다고 제안했습니다. ext4는 실제로 이 작업을 위해 구축되었기 때문입니다.