Closed huzhifeng closed 1 year ago
No, this is not dm-qcow2 driver problem, it's just the way of how linux buffered write works. There is no a guarantee of data was actually written on disk until you directly call fsync/sync. See "Notes" in man 2 write for the details.
The difference between /pub and /mnt in your example is that /mnt has additional layer, which is dm-qcow2 block device. So, the flushing actual data on disk is even later in /mnt case.
Note, that after I run your test, all files in /pub are empty, despite they are created in the directory:
root@qemu:~# ls -s /pub/test-* 0 /pub/test-100.txt 0 /pub/test-28.txt 0 /pub/test-46.txt 0 /pub/test-64.txt 0 /pub/test-82.txt 0 /pub/test-10.txt 0 /pub/test-29.txt 0 /pub/test-47.txt 0 /pub/test-65.txt 0 /pub/test-83.txt 0 /pub/test-11.txt 0 /pub/test-2.txt 0 /pub/test-48.txt 0 /pub/test-66.txt 0 /pub/test-84.txt 0 /pub/test-12.txt 0 /pub/test-30.txt 0 /pub/test-49.txt 0 /pub/test-67.txt 0 /pub/test-85.txt 0 /pub/test-13.txt 0 /pub/test-31.txt 0 /pub/test-4.txt 0 /pub/test-68.txt 0 /pub/test-86.txt 0 /pub/test-14.txt 0 /pub/test-32.txt 0 /pub/test-50.txt 0 /pub/test-69.txt 0 /pub/test-87.txt 0 /pub/test-15.txt 0 /pub/test-33.txt 0 /pub/test-51.txt 0 /pub/test-6.txt 0 /pub/test-88.txt 0 /pub/test-16.txt 0 /pub/test-34.txt 0 /pub/test-52.txt 0 /pub/test-70.txt 0 /pub/test-89.txt 0 /pub/test-17.txt 0 /pub/test-35.txt 0 /pub/test-53.txt 0 /pub/test-71.txt 0 /pub/test-8.txt 0 /pub/test-18.txt 0 /pub/test-36.txt 0 /pub/test-54.txt 0 /pub/test-72.txt 0 /pub/test-90.txt 0 /pub/test-19.txt 0 /pub/test-37.txt 0 /pub/test-55.txt 0 /pub/test-73.txt 0 /pub/test-91.txt 0 /pub/test-1.txt 0 /pub/test-38.txt 0 /pub/test-56.txt 0 /pub/test-74.txt 0 /pub/test-92.txt 0 /pub/test-20.txt 0 /pub/test-39.txt 0 /pub/test-57.txt 0 /pub/test-75.txt 0 /pub/test-93.txt 0 /pub/test-21.txt 0 /pub/test-3.txt 0 /pub/test-58.txt 0 /pub/test-76.txt 0 /pub/test-94.txt 0 /pub/test-22.txt 0 /pub/test-40.txt 0 /pub/test-59.txt 0 /pub/test-77.txt 0 /pub/test-95.txt 0 /pub/test-23.txt 0 /pub/test-41.txt 0 /pub/test-5.txt 0 /pub/test-78.txt 0 /pub/test-96.txt 0 /pub/test-24.txt 0 /pub/test-42.txt 0 /pub/test-60.txt 0 /pub/test-79.txt 0 /pub/test-97.txt 0 /pub/test-25.txt 0 /pub/test-43.txt 0 /pub/test-61.txt 0 /pub/test-7.txt 0 /pub/test-98.txt 0 /pub/test-26.txt 0 /pub/test-44.txt 0 /pub/test-62.txt 0 /pub/test-80.txt 0 /pub/test-99.txt 0 /pub/test-27.txt 0 /pub/test-45.txt 0 /pub/test-63.txt 0 /pub/test-81.txt 0 /pub/test-9.txt
I found that when the qcow2 image is already mounted, power down may result in data loss.
Here are the steps to reproduce:
Power off when printing
done
, after reboot, the files copied to /pub are all there, but the files copied to /mnt (qcow2 image) are lost.If I change
sleep 3
tosync
, then the files copied to the /mnt (qcow2 image) will not be lost either.It looks like a qm-qcow2 driver problem, is there any good way to avoid data loss?