diff options
author | Colin Walters <walters@verbum.org> | 2017-08-02 22:07:26 -0400 |
---|---|---|
committer | Atomic Bot <atomic-devel@projectatomic.io> | 2017-08-08 16:09:04 +0000 |
commit | 8642ef5ab3fec3ac8eb8f193054852f83a8bc4d0 (patch) | |
tree | 4105371c58a3e719836e0d19a70b72508a22919d /tests/admin-test.sh | |
parent | 9f8f351cd45e5dd0219c3177558b497ab10c58e9 (diff) | |
download | ostree-8642ef5ab3fec3ac8eb8f193054852f83a8bc4d0.tar.gz |
lib/deploy: Use a FIFREEZE/FITHAW cycle for /boot
See: http://marc.info/?l=linux-fsdevel&m=149520244919284&w=2
XFS doesn't flush the journal on `syncfs()`. GRUB doesn't know how to follow the
XFS journal, so if the filesystem is in a dirty state (possible with xfs
`/boot`, extremely likely with `/`, if the journaled data includes content for
`/boot`, the system may be unbootable if a system crash occurs.
Fix this by doing a `FIFREEZE`+`FITHAW` cycle. Now, most people
probably would have replaced the `syncfs()` invocation with those two
ioctls. But this would have become (I believe) the *only* place in
libostree where we weren't safe against interruption. The failure
mode would be ugly; nothing else would be able to write to the filesystem
until manual intervention.
The real fix here I think is to land an atomic `FIFREEZETHAW` ioctl
in the kernel. I might try a patch.
In the meantime though, let's jump through some hoops and set up
a "watchdog" child process that acts as a fallback unfreezer.
Closes: https://github.com/ostreedev/ostree/issues/876
Closes: #1049
Approved by: jlebon
Diffstat (limited to 'tests/admin-test.sh')
-rw-r--r-- | tests/admin-test.sh | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/tests/admin-test.sh b/tests/admin-test.sh index 6001ceea..55de7235 100644 --- a/tests/admin-test.sh +++ b/tests/admin-test.sh @@ -249,3 +249,11 @@ ${CMD_PREFIX} ostree --sysroot=${deployment} remote add --set=gpg-verify=false r assert_not_file_has_content sysroot/ostree/repo/config remote-test-nonphysical assert_file_has_content ${deployment}/etc/ostree/remotes.d/remote-test-nonphysical.conf testos-repo echo "ok remote add nonphysical sysroot" + +if env OSTREE_SYSROOT_DEBUG="${OSTREE_SYSROOT_DEBUG},test-fifreeze" \ + ${CMD_PREFIX} ostree admin deploy --os=testos testos:testos/buildmaster/x86_64-runtime 2>err.txt; then + fatal "fifreeze-test exited successfully?" +fi +assert_file_has_content err.txt "fifreeze watchdog was run" +assert_file_has_content err.txt "During fsfreeze-thaw: aborting due to test-fifreeze" +echo "ok fifreeze test" |