On 10/18/22 14:23, Stefan Berger wrote: > > > On 10/18/22 04:15, Daniel P. Berrangé wrote: >> On Mon, Oct 17, 2022 at 11:17:56AM -0400, Stefan Berger wrote: >>> >>> >>> On 10/17/22 09:48, Daniel P. Berrangé wrote: >>>> On Mon, Oct 17, 2022 at 09:39:52AM -0400, Stefan Berger wrote: >>>>> >>>>> >>> >>>> >>>> The key is in qemuMigrationSrcIsSafe(), and how it determines if a >>>> migration is safe. >>>> >>>> * Disk on local storage, no flags => unsafe, migration error >>>> * Disk on local storage, VIR_MIGRATE_NON_SHARED_DISK => ok, >>>> copies disk storage >>>> * Disk on shared storage, no flags => safe >>>> * Disk on shared storage, VIR_MIGRATE_NON_SHARED_DISK => ok, but >>>> needlessly copies disk storage >>>> >>>> The key helper methods are virFileIsSharedFS and virFileIsClusterFS >>>> which check the filesystem type for the path against a known list >>>> of shared/cluster FS. >>>> >>>>> So we won't do it this way for TPM state migration. Instead we can >>>>> try to write on the source migration side >>>>> >>>>> a) a simple file and detect whether the file is at the destination >>>>> b) a file with either a name or content that only the source and >>>>> destination libvirts would know at this point >>>>> >>>>> b) is to prevent stale files from becoming indicators for shared >>>>> storage. >>>> >>>> No, please use the virFileIsSharedFS/ClusterFS helpers. >>>> >>> >>> I tried to use virFileIsSharedFS on the source and destination side of >>> my NFS setup to see how they work. The issue here is that the NFS server >>> side, that exports /var/lib/libvirt/swtpm and is also the migration >>> source at some point, says this: >> >> We expect both sides to have the same storage configurtion. ie both >> must be NFS. I'm pretty sure our code for handling disks does not >> work when you have a local FS on one side, which is exported to the >> other side as NFS. Conceptally that's not something someone would >> do in production, since they you make the target host dependant >> on the src compute host, which is poor for resilience. >> > > Ok, so then we can replace (accesses to) VIR_MIGARTE_TPM_SHARED_STORAGE > with calls to virFilesIsSharedFS() and simply assume that this function > will return the same results on both sides of the migration (without > testing it) and if it doesn't and failures occur then it's an > unsupported shared storage setup (that is documented somewhere). I hope > to not receive reports from ppl that don't describe their setup > appropriately but see some odd failures because of this. Just FYI, I'm testing the following patches: https://gitlab.com/MichalPrivoznik/libvirt/-/commits/tpm_migration_mine_v1 There're still some parts missing. but I'm continuing to work on them. Michal