루프 장치에서는 WRITE_ZEROES가 지원되지 않습니다.

루프 장치에서는 WRITE_ZEROES가 지원되지 않습니다.

mkfs.ext4가 임시 파일로 지원되는 루프 장치에서 작동하지 않는 이상한 문제에 직면했습니다.

tmp_file="$(mktemp)"
fallocate -l 8M "$tmp_file"
loop="$(losetup --show -f "$tmp_file")"
mkfs.ext4 "$loop"

나는 노력 dd if=/dev/zero했다 truncate. 같은 결과. 황당한 점은 장애가 애플리케이션 계층까지 전파되지 않는다는 것입니다. mkfs 프로그램은 0으로 종료되지만 출력 파일 시스템은 기본적으로 손상되었습니다. 아마도 버퍼링/지연된 io와 관련이 있을 것입니다.

나한테는 이런 일이 허락되지 않는 걸까? 아니면 버그인가요? 커널 코드를 읽으면 더 자세히 조사할 수도 있지만 먼저 전문가의 의견을 듣고 싶었습니다.

업데이트 이런. 죄송합니다. 커널 버전: 5.7.10-201.fc32.x86_64

커널 메시지.

[ 3213.106709] blk_update_request: operation not supported error, dev loop6, sector 16256 op 0x9:(WRITE_ZEROES) flags 0x1000800 phys_seg 0 prio class 0
[ 3213.107013] blk_update_request: operation not supported error, dev loop6, sector 196 op 0x9:(WRITE_ZEROES) flags 0x1000800 phys_seg 0 prio class 0
[ 3213.108396] blk_update_request: operation not supported error, dev loop6, sector 708 op 0x9:(WRITE_ZEROES) flags 0x1000800 phys_seg 0 prio class 0
[ 3213.110006] blk_update_request: operation not supported error, dev loop6, sector 160 op 0x9:(WRITE_ZEROES) flags 0x1000800 phys_seg 0 prio class 0
[ 3213.110158] blk_update_request: operation not supported error, dev loop6, sector 166 op 0x9:(WRITE_ZEROES) flags 0x1000800 phys_seg 0 prio class 0
[ 3213.110852] blk_update_request: operation not supported error, dev loop6, sector 710 op 0x9:(WRITE_ZEROES) flags 0x1000800 phys_seg 0 prio class 0
[ 3223.152191] blk_update_request: operation not supported error, dev loop7, sector 16256 op 0x9:(WRITE_ZEROES) flags 0x1000800 phys_seg 0 prio class 0
[ 3223.152619] blk_update_request: operation not supported error, dev loop7, sector 196 op 0x9:(WRITE_ZEROES) flags 0x1000800 phys_seg 0 prio class 0
[ 3223.153694] blk_update_request: operation not supported error, dev loop7, sector 708 op 0x9:(WRITE_ZEROES) flags 0x1000800 phys_seg 0 prio class 0
[ 3223.155495] blk_update_request: operation not supported error, dev loop7, sector 160 op 0x9:(WRITE_ZEROES) flags 0x1000800 phys_seg 0 prio class 0
[ 3223.155670] blk_update_request: operation not supported error, dev loop7, sector 166 op 0x9:(WRITE_ZEROES) flags 0x1000800 phys_seg 0 prio class 0
[ 3223.156233] blk_update_request: operation not supported error, dev loop7, sector 710 op 0x9:(WRITE_ZEROES) flags 0x1000800 phys_seg 0 prio class 0
[ 3568.666245] blk_update_request: operation not supported error, dev loop6, sector 16256 op 0x9:(WRITE_ZEROES) flags 0x1000800 phys_seg 0 prio class 0
[ 3568.666543] blk_update_request: operation not supported error, dev loop6, sector 196 op 0x9:(WRITE_ZEROES) flags 0x1000800 phys_seg 0 prio class 0
[ 3568.667546] blk_update_request: operation not supported error, dev loop6, sector 708 op 0x9:(WRITE_ZEROES) flags 0x1000800 phys_seg 0 prio class 0
[ 3568.669204] blk_update_request: operation not supported error, dev loop6, sector 160 op 0x9:(WRITE_ZEROES) flags 0x1000800 phys_seg 0 prio class 0
[ 3568.669380] blk_update_request: operation not supported error, dev loop6, sector 166 op 0x9:(WRITE_ZEROES) flags 0x1000800 phys_seg 0 prio class 0
[ 3568.669974] blk_update_request: operation not supported error, dev loop6, sector 710 op 0x9:(WRITE_ZEROES) flags 0x1000800 phys_seg 0 prio class 0

내가 말했듯이, mkfs는 성공적으로 실행되어야 합니다. 오류는 조용합니다.

답변1

방금 동일한 문제라고 생각되는 문제가 발생했습니다. 나는 당신이 mktemp 자체는 아니지만 /tmp는 tmpfs 파일 시스템이라고 생각합니다. 보기에tmpfs는 지원하지 않습니다FALLOC_FL_ZERO_RANGE. 흥미로운 점은 tmpfs 마운트의 파일에서 mkfs.ext4를 문제 없이 실행할 수 있다는 것입니다. 그러나 동일한 tmpfs의 파일로 뒷받침되는 루프 장치인 경우 문제가 발생합니다.

0 범위(대부분의 표준 범위)를 지원하는 파일 시스템의 경로를 설정하는 -p옵션을 사용하여 이 문제를 해결할 수 있습니다 .mktempTMPDIR

관련 정보