У меня есть несколько дисков samba, к которым ежедневно обращаются несколько пользователей. У меня уже есть код для распознавания общих дисков (из таблицы SQL) и монтирования их в специальный каталог, где все пользователи могут получить к ним доступ.
Я хочу знать, если я удалю диск из таблицы SQL (фактически отключив его от сети), как или даже есть ли способ размонтировать занятое устройство? Пока что я обнаружил, что любая форма umount
не работает.
Игнорируя возможность уничтожения данных - возможно ли размонтировать устройство, которое в данный момент читается?
umount -l
Во время записи, проголосовавший вершине ответ рекомендует использовать umount -l
.
umount -l
опасно или в лучшем случае небезопасный . Таким образом:
, полезное поведение umount -l
скрывает файловую систему от доступа [1 137] абсолютный пути, таким образом, минимизируя далее moutpoint использование.
Это то же поведение может быть достигнуто путем монтирования пустого каталога с полномочиями 000
по каталогу, который будет размонтирован.
Затем любые новые доступы к именам файлов в ниже точки монтирования поразят недавно наложенный каталог нулевыми полномочиями - новые блокировщики к размонтированию, таким образом, предотвращены.
основной успех размонтирования, который будет разблокирован, является перемонтированием только для чтения. Когда Вы получаете remount,ro
значок, Вы знаете что:
mount -o remount,ro /dev/device
, как гарантируют, перестанет работать, если будут файлы, открытые для записи , так попытка это прямо. Можно чувствовать себя удачливыми, панк!
, Если Вы неудачны, сфокусируйтесь только на [1 132] процессы с файлами, открытыми для записи :
lsof +f -- /dev/<devicename> | awk 'NR==1 || $4~/[0-9]+[uw -]/'
необходимо затем смочь повторно смонтировать устройство, только для чтения и гарантировать согласованное состояние.
, Если Вы не можете повторно смонтироваться только для чтения в этой точке, займитесь расследованиями, некоторые из других возможных причин перечислили здесь .
успех перемонтирования Только для чтения разблокировал рџ” “в ‘
Поздравления, Ваши данные по точке монтирования теперь последовательны и защищены от будущей записи.
fuser
является нижним к [1 114] , Почему бы не использовать использование fuser
ранее? Ну, Вы могли иметь, но fuser
работает на каталог , не устройство , поэтому если бы Вы хотели удалить точку монтирования из пространства имен файлов и все еще использовать fuser
, то Вы должны были бы:
Вот то, как:
null_dir=$(sudo mktemp --directory --tmpdir empty.XXXXX")
sudo chmod 000 "$null_dir"
# A request to remount,ro will fail on a `-o bind,ro` duplicate if there are
# still files open for writing on the original as each mounted instance is
# checked. https://unix.stackexchange.com/a/386570/143394
# So, avoid remount, and bind mount instead:
sudo mount -o bind,ro "$original" "$original_duplicate"
# Don't propagate/mirror the empty directory just about hide the original
sudo mount --make-private "$original_duplicate"
# Hide the original mountpoint
sudo mount -o bind,ro "$null_dir" "$original"
Вы затем имели бы:
fuser
. Это является более замысловатым <глоток> [1] глоток>, но позволяет Вам использовать:
fuser -vmMkiw <mountpoint>
, который в интерактивном режиме попросит уничтожать процессы с файлами, открытыми для записи. Конечно, Вы могли сделать, это, не скрывая точку монтирования вообще, но вышеупомянутое имитирует umount -l
без любой из опасностей.
Эти -w
переключатель ограничивает записями, и эти -i
является интерактивным, поэтому после перемонтирования только для чтения, если Вы - он спешка, Вы могли бы затем использовать:
fuser -vmMk <mountpoint>
для уничтожения всех остающихся процессов с файлами открываются под точкой монтирования.
, Надо надеяться, в этой точке, можно размонтировать устройство. (Необходимо будет работать umount
на точке монтирования дважды, если Вы будете иметь, связывают, смонтировал режим 000
каталог на вершине.)
Или использование:
fuser -vmMki <mountpoint>
для интерактивного уничтожения остающихся процессов только для чтения, блокирующих размонтирование.
target is busy
! Открытые файлы не являются единственным блокировщиком размонтирования. См. здесь и здесь по другим причинам и их средствам.
, Даже если у Вас есть некоторый потаенный гремлин, который предотвращает Вас от полностью размонтирования устройства, Вы, по крайней мере, получили свою файловую систему в согласованном состоянии.
у Вас затем есть две опции размонтировать устройство, маршрут lsof или XXX:
lsof +f -- /dev/device
перечислит все процессы с открытыми файлами на устройстве, содержащем файловую систему, и уничтожит их. <глоток> [1] Это является менее замысловатым для использования mount --move
, но это требует mount --make-private /parent-mount-point
, который имеет последствия . В основном, если бы точка монтирования смонтирована под /
файловая система, Вы хотели бы избежать этого.