몇 시간 후에 새로운 대용량 4TB 하드 드라이브를 포맷할 예정입니다. 제가 아는 한 직접 포맷을 하면 포맷된 것처럼 보일 것입니다.
10000rpm x 4GB DDR3 RAM으로 실시간 포맷하면 시간이 오래 걸릴 수 있습니다. 그래서 리눅스는 이 개념을 제안했습니다.ext4 지연 초기화.
저는 Debian GNU/Linux 'Stretch'를 실행하고 있으며 커널 4.9를 사용하고 있습니다.
[$] uname -a
Linux debian 4.9.0-1-amd64 #1 SMP Debian 4.9.2-2 (2017-01-12) x86_64 GNU/Linux
[$] lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description: Debian GNU/Linux 9.0 (stretch)
Release: 9.0
Codename: stretch
이제 위키에 따르면 다음과 같이 말하고 있습니다.
활성화되고 uninit_bg 기능이 활성화된 경우 inode 테이블은 mke2fs에 의해 완전히 초기화되지 않습니다. 이렇게 하면 파일 시스템 초기화 속도가 크게 향상되지만 파일 시스템이 처음 마운트될 때 커널이 백그라운드에서 파일 시스템 초기화를 완료해야 합니다. 이 옵션 값을 생략하면 지연 inode 테이블 제로화를 활성화하기 위해 기본값은 1입니다. ——토마스 케인
이제 내 커널에서 위 기능이 활성화되어 있는지 알 수 있는 방법이 있습니까?
갱신 -
/boot/config-4.9.0-1-amd64
.에 따르면 파일 길이는 7865줄입니다 .
[$] cat /boot/config-4.9.0-1-amd64 | tail -n 1
7865 CONFIG_SBITMAP=y
grep을 사용해도 결과가 없습니다.
[$] cat /boot/config-4.9.0-1-amd64 | grep LAZY
ext4도 이렇습니다.
[$] cat /boot/config-4.9.0-1-amd64 | grep EXT4
6895 CONFIG_EXT4_FS=m
6896 CONFIG_EXT4_USE_FOR_EXT2=y
6897 CONFIG_EXT4_FS_POSIX_ACL=y
6898 CONFIG_EXT4_FS_SECURITY=y
6899 CONFIG_EXT4_ENCRYPTION=y
6900 CONFIG_EXT4_FS_ENCRYPTION=y
6901 # CONFIG_EXT4_DEBUG is not set
누구든지 어떤 아이디어가 있습니까?
답변1
Google에서 커널 컴파일 문자열을 확인하세요(또는 커널 소스의 "make menuconfig"를 확인하세요). 확실히 CONFIG_EXT4_FS_로 시작됩니다. 실제로 실행 중인 커널에 대한 이러한 커널 컴파일 플래그는 /proc/config.gz에서 제공될 수 있습니다(그러나 그렇게 하는 것은 커널 컴파일 플래그이기도 하므로 시스템에서 활성화되거나 활성화되지 않을 수 있습니다). boot/config-your-kernel-version (배포판에서는 이를 제공할 수도 있고 제공하지 않을 수도 있습니다).
내가 기억하는 한, 이것은 오래된(최소 5년 전) 기능이므로 아마도 커널이 이 기능을 지원할 것입니다.
온라인 ext4 크기 조정은 고도로 미세 조정된 특정 mke4fs 구성에서는 작동하지 않습니다(죄송하지만 정확히 무엇인지 잊어버렸습니다. 특정 ext4 fs 플래그로 인해 불가능합니다).
답변2
저는 이 ext4 기능과 관련된 버그를 조사해 왔습니다. 제가 아는 한, 커널 소스 코드(linux 4.15.x)에는 "uninit_bg"라는 함수가 없습니다. 문제의 핵심 기능은 "lazy_itable_init"이지만 ext4 파일 시스템에 방금 구운 것처럼 보입니다. 이 코드에는 몇 가지 변경 사항이 있으며 주석과 문서가 현실을 따라잡아야 할 수도 있습니다.
사용할 때 다른 사람들이 말한 것처럼 옵션을 추가 mkfs
할 수 있습니다 -E lazy_itable_init=0
. 속성이 파일 시스템의 메타데이터에 저장되어 있지 않은 것 같습니다. 지연 초기화를 처리하는 데 사용되는 커널 스레드가 트리거되는지 여부는 lazy_itable_init
설정 여부에 따라 다르지만 일단 모든 블록이 set ITABLE_ZEROED 플래그가 FS에 설정된 다음 파일 시스템이 초기화되고 그게 전부입니다. 초기화 방법은 더 이상 관련이 없습니다.