문제 상황
환경 세팅 중 crio가 다음과 같은 fatal log를 출력하고 종료되었다.
1 | Dec 01 18:02:54 bp-master001 crio[8263]: time="2020-12-01 18:02:54.147849982+09:00" level=fatal msg="kernel does not support overlay fs: overlay: the backing xfs filesystem is formatted without d_type support, which leads to incorrect behavior. Reformat the filesystem with ftype=1 to enable d_type support. Running without d_type is not supported.: driver not supported" |
backing filesystem으로 d_type을 지원하지 않는 xfs를 사용하면 비정상적인 동작으로 이끌 수 있으니,
ftype=1로 파일시스템을 다시 포맷하여 d_type 지원을 활성화시키라는 내용이다.
관련 이슈 확인
overlayfs에서 위와 같은 상황에서 삭제된 파일이 삭제되었다고 표시되지 않는 버그가 있다고 한다.
During mount, make sure upper fs supports d_type otherwise error out.
In some instances xfs has been created with ftype=0 and there if a file on lower fs is removed, overlay leaves a whiteout in upper fs but that whiteout does not get filtered out and is visible to overlayfs users.
And reason it does not get filtered out because upper filesystem does
not report file type of whiteout as DT_CHR during iterate_dir().
So it seems to be a requirement that upper filesystem support d_type for overlayfs to work properly. Do this check during mount and fail if d_type is not supported.
버그 재현
파티션 생성
테스트를 위한 새로운 파티션을 생성한다.
1 | # fdisk /dev/sdb |
생성 과정
1 | [root@master ~]# fdisk /dev/sdb |
xfs 생성
xfs 생성 시 ftype=0 옵션을 추가한다.
참고로 ftype=0은 crc=0도 추가해야한다.
1 | # mkfs -t xfs -n ftype=0 /dev/sdb1 |
생성 과정
1 | [root@master ~]# mkfs -t xfs -n ftype=0 -m crc=0 /dev/sdb1 |
crc=0 없이 생성한 경우
1 | [root@master ~]# mkfs -t xfs -n ftype=0 /dev/sdb1 |
fstab에 mount 정보 추가 및 적용
1 | [root@master ~]# vi /etc/fstab |
(참고) root는 ftyep=1이다
1 | [root@master ~]# xfs_info / |
파일 삭제 후 동작 확인
overlay 디렉토리에서 lower 디렉토리에 있는 파일을 삭제한 뒤 조회하면, 삭제했던 파일이 비정상적으로 조회된다.
1 | [root@master ftype0]# mkdir overlay-test overlay-test/lower overlay-test/upper overlay-test/workdir overlay-test/overlay |
(참고) 정상 시나리오 - ftype=1인 디렉토리에서 overlayfs 동작 확인
삭제된 파일이 조회되지 않는다.
1 | [root@master ~]# mkdir overlay-test overlay-test/lower overlay-test/upper overlay-test/workdir overlay-test/overlay |
유관 프로젝트의 대처
레드햇의 경우 xfs 파일시스템을 사용할 때 주의 사항을 문서에 명시되어있고,
Docker 역시 overlayfs storage driver를 사용할 때 주의 사항이 공식 홈페이지에 명시되어있다.
이러한 버그가 알려져있기 때문에, docker와 cri-o에서는 앞서 소개했었던 fatal log 내용처럼 사전에 확인하는 과정을 추가한 것으로 보인다.
결론
overlayfs의 backing filesystem으로 xfs 파일 시스템을 사용할 때는, xfs 포맷 시 ftype=1을 반드시 추가하자.