ループデバイスは 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のファイルがサポートするループデバイスの場合、問題が発生します。

ゼロ範囲(ほとんどの標準範囲)をサポートするファイルシステムでパスを設定するオプションを使用して、-pこの問題を解決できます。mktempTMPDIR

おすすめ記事