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, но выходная файловая система в основном искалечена. Вероятно, это как-то связано с буферизованным/отложенным вводом-выводом.

Мне нельзя этого делать? Или это ошибка? Я, вероятно, мог бы исследовать дальше, читая код ядра, но сначала я хотел услышать мнение экспертов.

Обновлять Упс. Извините. Версия ядра: 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. Интересно, что вы можете запустить mkfs.ext4 на файле на tmpfs-монтировании без проблем. Но когда это устройство цикла, поддерживаемое файлом на том же tmpfs, возникают проблемы.

Эту проблему можно обойти, используя -pопцию mktempустановки TMPDIRпути в файловой системе, которая поддерживает нулевой диапазон (большинство стандартных).

Связанный контент