Sample Header Ad - 728x90

When is a disk sync necessary on qcow2?

0 votes
1 answer
272 views
I'm running Apache on a VM with a qcow2 disk. Apache runs a (compiled C++) program which does the following: 1. It calls system to run another (C++) program which creates a file 2. It then attempts to read and process that file Step (2) attempts to open the new file with ifstream::open. When I run this program on the VM, this fails (ifstream::good returns false), with errno saying that the file doesn't exist. However, the file does actually exist if I open a shell and look for it. This program works fine when it's not on qcow2 (on 3 different RedHat and Ubuntu computers), which I'm guessing is implicated. I can fix this in two ways: 1. If I add another step between (1) and (2), and call `system("ls /foo/bar/myfile") the ls` command fails, returning 2. I can call it 100 times and it still fails. However, step (2) will now succeed 2. If I run system("sync") instead of system("ls"), step (2) succeeds Any idea what's going on? Does qcow2 have some unusual flush requirements? **Edit - added some sys info:** - RHEL 8.5, up-to-date - kernel 4.18.0-348.12.2.el8_5.x86_64 - emulating pc-q35-rhel8.2.0 - VM has 4GiB RAM, 2vCPUs (Skylake-Client-IBRS) - disk: 10GB, 35% used, virtio, default cache, Ubuntu 20.04 image I've run this setup for years with Win 7 and Linux images and never seen an issue before. $ virsh version Compiled against library: libvirt 6.0.0 Using library: libvirt 6.0.0 Using API: QEMU 6.0.0 Running hypervisor: QEMU 4.2.0
Asked by EML (240 rep)
Mar 8, 2022, 09:45 PM
Last activity: Mar 9, 2022, 11:10 PM