2

I have olddevice mounted to /mnt with:

$ mount olddevice /mnt

I would like to change the device at /mnt mount point. For this purpose, I simply mount newdevice on top of it:

$ mount newdevice /mnt

With that, processes that still have file descriptors on olddevice can keeps working on old device, but new processes using /mnt will use newdevice.

I can detect when olddevice is not used anymore and decide to unmount it. My problem is how to unmount it:

$ umount olddevice
umount: olddevice: umount failed: Invalid argument.

Is it possible to directly unmount it? Or is it mandatory to unmount newdevice first (I do not want that) ?

1 Answer 1

1

If you are not already running with mount propagation enabled e.g. as per systemd defaults, run this first:

mount --make-rshared /

Then:

mkdir /root.orig
mount --rbind / /root.orig
mount --make-rprivate /root.orig/mnt

mount newdevice /mnt
...
umount -R /root.orig/mnt    # instead of umount olddevice

Then safely disassemble the magic - taking care not to unmount your entire system:

mount --make-rprivate /root.orig
umount -l /root.orig
rmdir /root.orig

Usually, I like to use the recursive variants of mount / umount commands. You say you started with only one filesystem mounted underneath /mnt. In the above sequence, I used umount -R /root.orig/mnt. If there was also a filesystem mounted on a subdirectory of /mnt, this umount -R command might fail half-way through. I.e. because there are no open files on the submount, but there are still some open files on the main mount. IMO this feels similar to how umount -l works. umount -l /path disassembles and detaches a mount tree, and each independent filesystem is shut down as soon as it has no open files.

4
  • I am doing other weird mounts with multiple mount points and I am wondering why mount --make-rprivate /root.orig does not work instead of mount --make-rprivate /root.orig/mnt.
    – rools
    Feb 6, 2020 at 16:38
  • @rools It's essential that /root.orig is a "shared" copy of /, not "private". That's what makes the umount operation propagate from /root.orig/mnt, to the other copy at /mnt.
    – sourcejedi
    Feb 6, 2020 at 17:05
  • (Assuming I understand what you are asking correctly. If this doesn't make sense, you might be better off writing a full scenario in a question, and pointing the question out to me).
    – sourcejedi
    Feb 6, 2020 at 17:06
  • Yes you totally got it. You are right. I thought it was another problem as I have a weird behavior but it is because I have a particular scenario. I may ask a different question. Thanks!
    – rools
    Feb 6, 2020 at 22:54

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.