ext4 Ubuntu 18.04 파일 시스템 오류 "구조를 정리해야 합니다"

ext4 Ubuntu 18.04 파일 시스템 오류 "구조를 정리해야 합니다"

단일 디렉토리에 엄청난 수의 디렉토리와 파일을 담을 수 있도록 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 파일 시스템을 만들 필요는 없지만ext2파일 시스템.

Ubuntu 18.04에 기본적으로 /etc/mke2fs.confDebian 10과 동일한 파일이 있다고 가정 dir_index하면 최신 mke2fs. 그리고 dir_nlink기본적으로 활성화되어 있습니다.ext4파일 시스템 유형.

매뉴얼 mke2fs.conf(5)페이지에는 "사용자와 파일 모두 mke2fs.conf기본 파일 시스템 유형을 지정하지 않은 경우 mke2fs다음과 같은 기본 파일 시스템 유형을 사용합니다.ext3명령줄 옵션을 통해 저널을 요청한 경우 또는ext2그렇지 않다면."

/etc/mke2fs.conf파일 에 따르면 -T news옵션은 옵션만 지정하고 inode_ratio = 4096다른 것은 지정하지 않습니다. 따라서 mkfs.ext4plain 대신 양식을 사용하지 않으면 mke2fs다음과 같은 결과가 나올 수 있습니다.ext2평균 크기가 4kB 이하인 파일에 맞게 조정된 파일 시스템입니다.

Debian 에는 섹션 fs_type =에 가 지정 되어 있지 않으며 명령 에 대한 옵션을 포함하지 않으므로 Ubuntu가 Debian과 동일한 경우(보통 그렇듯이) 명령으로 24TB가 제공되었을 수 있습니다.[defaults]mke2fs.conf-jmke2fsmke2fs.confext2파일 시스템은 아마도 누구에게도 특별히 잘 테스트되지 않은 것입니다.

매뉴얼 ext4(5)페이지에는 64bit파일 시스템 기능이 필요에 따라 자동으로 설정될 것이라고 나와 있는데, 이는 도구가 오류를 보고하지 않은 이유를 설명할 수 있습니다. 또한 dir_indexext2 파일 시스템에서는 이 기능이 무시된다고 말합니다 .

멀티 테라바이트 ext3파일 시스템에 대한 과거 경험을 통해 엄청난 파일 시스템 생성 및 확인 시간을 예상했을 것입니다. 사용 사례에 따라 기능의 유무에 dir_index따라 애플리케이션 성능이 향상되거나 중단될 수 있습니다.

tune2fs -l /dev/sdb1무슨 일이 일어났는지, 일어나지 않았는지 추측할 필요가 없도록 실제 출력을 원래 질문으로 편집해 주시겠습니까 ?

EUCLEAN"구조 청소 필요" 는 파일 시스템이 손상되어 파일 시스템 검사가 필요함을 나타내는 커널 오류 코드 에 해당하는 기본 텍스트인 것 같습니다 . 이 크기의 파일 시스템에서는 상당한 시간과 RAM이 소요됩니다. 물론 파일 시스템을 검사하는 동안 마운트 해제해야 합니다.

답변2

실제로 많은 테스트를 거친 후, 나는 ext4가 그런 일(한 디렉토리에 수십억 개의 파일을 보관하는 것)을 할 수 없는 것처럼 보이는 지점에 도달했습니다. 그리고 Linux에서 이 작업을 수행하는 방법에 대한 연구 결과(실제로 실제 테스트도 포함)에서는 이러한 시나리오의 경우 이 작업을 수행하기 위해 실제로 구축된 ext4 대신 XFS를 사용해야 한다는 것을 보여줍니다.

관련 정보