On Thu, 30 Mar 2017, Lennart Poettering wrote: [...]
I am sorry, but XFS is really broken here. All init systems since time began kinda did the same thing when shutting down:a) try to unmount all fs that can be unmounted b) for the remaining ones, try to remount ro (the root fs usually qualifies) c) sync() d) reboot() That's how sysvinit does it, how Upstart does it, and systemd does it the same way. (Well, if the initrd supports it we go one step further though, and optionally pivot back to the initrd which can then unmount the root file system, too. That's a systemd innovation however, and only supported on initrd systems where the initrd supports it) If the XFS devs think that the sync() before reboot() can be partially ignored, then I am sorry for them, but that makes XFS pretty much incompatible with every init system in existence. Or to say this differently: if they expect us to invoke some magic per-filesystem ioctl() before reboot(), then that's nonsense. No init system calls that, and I am strongly against such hacks. They should just fix their APIs. Moreover, the man page of sync() is pretty clear on this: "sync() causes all pending modifications to file system metadata and cached file data to be written to the underlying filesystems." It explicitly mentions metadata. Any way you turn it, the XFS folks are just confused if they really claim sync() doesn't have to sync metadata. History says differently, and so does the man page documentation.
I am not a filesystem developer (IANAFD?), but I'm pretty sure they're going to say "the metadata _is_ synced, it's in the journal". And it's hard to argue that. After all, the filesystem will be perfectly valid the next time it is mounted, after the journal has been replayed, and it will contain all data written prior to the sync call. It did exactly what the manpage says it does.
The problem here seems to be that GRUB is an incomplete XFS implementation, one which doesn't know about XFS journalling. It may be a good argument XFS shouldn't be used for /boot... but the issue can really arise with just about any other journalled filesystems, like Ext3/4.
As Mantas Mikulėnas points out, the FIFREEZE ioctl is supported wherever systemd is, and it's not just XFS-specific. I think it'd be smartest just to use it because it's there, it's cheap, and it can't make things worse.
-- Michael
_______________________________________________ systemd-devel mailing list systemd-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/systemd-devel