Rino Bino asked:
I have a regular task that I need to swap out a live/accessed dir with a new version of it.
- There is a live dir with resources in it:
dir/
- Goal is to swap this out with
dir_new/
and cause as little disruption in access to the dir. - The content is live/accessed. Stopping access to the directory from end users is out of scope. I would just do this during a downtime window otherwise.
Here’s how I do it now:
mv dir dir_old && mv dir_new dir
This works fine, but I’m not sure if any experts have a faster/more reliable way?
- The filesystem is
xfs
- The "new" dir cannot have ANY content from the existing dir in it, so moving in place, dealing with files didn’t seem like it would work.
- Perhaps
rsync
with a--delete
option? However a requirement is to change "everything" at once in the dir. In other words I can’t have a mix of files from the new and old mixed together.
My answer:
Neither of the directories should be named dir
. Rather, dir
should be a symbolic link to the directory containing the files you want to be used. You can then change the link atomically whenever necessary.
For example, name your directories e.g. dir_20200917
, dir_20201015
, etc. Then link to the one which should be live:
ln -sf dir_20201015 dir
Note that -f
here will replace the existing symlink, if any.
View the full question and any other answers on Server Fault.
This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.