
Ich bin auf ein seltsames Problem gestoßen, bei dem mkfs.ext4 auf Loop-Geräten, die von einer temporären Datei unterstützt werden, nicht funktioniert.
tmp_file="$(mktemp)"
fallocate -l 8M "$tmp_file"
loop="$(losetup --show -f "$tmp_file")"
mkfs.ext4 "$loop"
Ich habe es auch versucht dd if=/dev/zero
. truncate
Gleiches Ergebnis. Absurd ist, dass sich der Fehler nicht bis zur Anwendungsebene ausbreitet. MKFS-Programme werden mit 0 beendet, aber das Ausgabedateisystem ist im Grunde verstümmelt. Es hat wahrscheinlich etwas mit gepuffertem/verzögertem IO zu tun.
Darf ich das nicht tun? Oder ist das ein Fehler? Ich könnte das wahrscheinlich genauer untersuchen, indem ich den Kernel-Code lese, aber ich wollte zuerst die Meinung der Experten hören.
Aktualisieren Ups. Entschuldigung. Kernel-Version: 5.7.10-201.fc32.x86_64
Die Kernel-Meldungen.
[ 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
Wie gesagt, mkfs sollte erfolgreich ausgeführt werden. Der Fehler ist stumm.
Antwort1
Ich bin gerade auf das gestoßen, was meiner Meinung nach dasselbe Problem ist. Ich vermute, dass es sich bei Ihnen nicht um mktemp per se handelt, sondern dass Ihr /tmp ein tmpfs-Dateisystem ist. Anscheinendtmpfs unterstützt nichtFALLOC_FL_ZERO_RANGE
. Interessant ist, dass Sie mkfs.ext4 problemlos auf einer Datei auf einem tmpfs-Mount ausführen können. Aber wenn es sich um ein Loop-Gerät handelt, das von einer Datei auf demselben tmpfs unterstützt wird, treten Probleme auf.
Sie sollten dies umgehen können, indem Sie die -p
Option zum mktemp
Festlegen TMPDIR
eines Pfads in einem Dateisystem verwenden, das den Nullbereich unterstützt (die meisten Ihrer Standarddateisysteme).