Можно ли атомарно изменить устройство монтирования в Linux?

#linux #mount #mount-point

Вопрос:

Можно ли атомарно изменить, какое устройство смонтировано в точке монтирования, чтобы ни в один момент времени точка монтирования не наблюдалась пустой? Вот что я пытаюсь сделать:

 $ mkdir /point
$ mkdir /device1 /device2
$ echo 1 > /device1/text
$ echo 2 > /device2/text
$ mount --bind /device1 /point
$ # do some kind of magic to get /device2 mounted at /point and /device1 unmounted
 

Технически, я могу игнорировать предыдущее монтирование и монтировать новое устройство сверху, но ядро теперь будет вести учет обоих, так что это похоже на «утечку монтирования».

Ответ №1:

Я успешно запустил следующее [ubuntu «20.04.3 LTS (фокальная ямка)»]:

 /tmp# cat test.sh
#!/bin/bash

set -e
mkdir -p /tmp/{point,device1,device2}
echo 1 > /tmp/device1/text
echo 2 > /tmp/device2/text
mount --bind /tmp/device1 /tmp/point
cat /tmp/point/text
mount --bind /tmp/device2 /tmp/point
cat /tmp/point/text
umount /tmp/device1
echo "Finished successfully"

/tmp# bash test.sh
1
2
Finished successfully
/tmp#
 

Комментарии:

1. umount: /tmp/device1/: not mounted. . /device1 не является точкой монтирования.

2. @KAction Смотрите мое обновление

3. « ; doas bash test.sh 1 2 подключение: /tmp/устройство 1: не установлено. Успешно закончено ; doas bash test.sh ; какой umount /bin/umount ; umount —версия umount из util-linux 2.37.2 (libmount 2.37.2: btrfs, пространства имен, утверждение, отладка)

4. Поскольку в вашем сценарии не используется «set-e», я также не могу быть уверен, что размонтирование на вашем компьютере прошло успешно.

5. Добавлено @KAction set -e . Тот же успех.