btrfs corruption bug! kvm/qemu + cache=none (+snapshotok) miatt...

eleg ritkan, de elofordul, hogy qemu-val futtatok win server vm-et olyan linux szerveren, amin amugy inkabb kontenerek (lxc, docker) mennek, foleg btrfs-en (mert gyors a sok kis file kezeleseben, deduplikacio, snapshotolas stb).

es hat van egy eleg erdekes bug. egyszer mar belefutottam kb 1 eve, de akkor a win ujratelepitese megoldotta. most megint elojott, kopkodi a dmesgbe a hasonlo gyonyorusegeket:

[24666.671621] BTRFS warning (device md5): csum failed root 5 ino 1574499 off 3375087616 csum 0x8941f998 expected csum 0x839287f0 mirror 1
[24666.671625] BTRFS error (device md5): bdev /dev/md5 errs: wr 0, rd 0, flush 0, corrupt 3664, gen 0

persze oldalakon at... es a "btrfs check --force --readonly /dev/md5" meg vagy 1000 oldalnyi errort irt ki...

de ami meglepo, hogy ennek ellenere a qemu vm-ek es a kontenerek is gond nelkul futnak!

megprobaltam egy masik diskre atpakolni, hogy az elszarodott btrfs disket leformazzam, es ekkor ert a meglepi: az lxc-ket gond nelkul atmasolta, de a qemu imageknel par100 mega utan i/o errort ir, egyszeruen nem lehet lemasolni.  ddrescue-val igen, hibakkal, de a masolat nem mukodokepes, mig az eredeti igen!

raguglizva konkretan sikerult talalni par bejegyzest, tehat ez egy letezo problema, amibe szokoevente mas is belefut, de nem annyian hogy kijavitsak...

Description of problem:
Btrfs does checksumming so if it reads back data and the checksum doesn't look right it will complain and return EIO.  I spent some time debugging a problem with installing a Windows 7 box on Btrfs via kvm and using Cache=None, and it looked like Btrfs was corrupting the file.

https://bugzilla.redhat.com/show_bug.cgi?id=693530

https://www.mail-archive.com/linux-btrfs@vger.kernel.org/msg92759.html

After a long while I think I discovered what triggers this. If you use a raw image file for your Windows VM and use cache = none, these errors start up pretty quickly from normal use

https://forums.unraid.net/topic/121767-btrfs-corruption/

ha jol ertem, az van, hogy a qemu RAW modban (cache=none) kikeruli a btrfs checksum szamolasat, igy a btrfs szerint hibas imaget gond nelkul tudja hasznalni, de siman lemasolni nem lehet, mert akkor a btrfs latja a checksum eltereseket...

mar csak az a kerdes, vajon hogy lehet egy ilyen imaget megis lemasolni?  (kb az a zotletem hogy felhuzok egy linuxot qemu-ban ami ala becsatolom raw modban ezt az imaget meg egy masikat es a vm-en belul dd-zem at)

talan 5.17-ben megis javitottak? nalam 5.15 volt, most frissitettem 5.19-re, meglatjuk:

https://lore.kernel.org/linux-btrfs/YrrFGO4A1jS0GI0G@atmark-techno.com/…

So cache=none means O_DIRECT and using io_uring. This really sounds 
similar to:

ca93e44bfb5fd7996b76f0f544999171f647f93b

This commit got merged into v5.17 so you shouldn't be seeing it on 5.17 
and onwards.

Hozzászólások

Szerkesztve: 2023. 06. 19., h – 09:38

Régen használtam qemu-t. Talán ha ki tudod exportálni valamilyen formátumba, akkor esélyes lehet, hogy azt vissza lehet importálni máshova. Előfordulhat, hogy a visszaimportált példányon kell kicsit konfigolni.

Megprobalhatod az imaget 'dd'-vel atirni egy masik imagebe, ugy, hogy hasznalod az 'iflag=direct' opciot, elvileg ez is O_DIRECT.

[24666.671625] BTRFS error

Hát ez nem bíztató. Esetemben 6.1-es kernel alatt van egy BTRFS-es mentő szerverem, ami snapshot képesség miatt BTRFS.
RAID funkciót nem mertem használni, mdadm-féle RAID van alatta. Maga a sima BTRFS fájlrendszer vajon melyik kernelektől tekinthető stabilnak?

hat van ahol 10 eve hasznalok btrfs-t, de az elmult 5-6 evben mar csak azt rakom /home ala uj telepiteseknel. ezt a qemu-s anomaliat leszamitva sose volt bajom vele, jo gyors, stabil, snapshot is hasznos. alatta nalam is mdadm-os raid van, vagy hw raid.

amugy erdekessegkepp rakerestem reggel es zfs-el is hasonlo problemaja van a qemunak raw modban, szoval ez inkabb valami kernel bug lesz, nem annyria fs specifikus, bar ext3/4-el sose volt ilyen hiba.

Megkerulnem, ha a vm mukodik, akkor valami Acronis jellegu dologgal inhouse modon csinalnek belole imaget.

Every single person is a fool, insane, a failure, or a bad person to at least ten people.

a windozos kollega probalta (vagy valami hasonlot, vmdk-t akart csinalni belulrol), hibara futott valamiert :(

Backup of volume C: has failed. The operation failed due to a device error encountered with either the source or the destination. If the source or destination volume is on a disk, run CHKDSK /R on the source or destination volume, and then retry the operation.