У меня есть скрипт резервного копирования, написанный на Python, который создает каталог назначения перед копированием в него исходного каталога. Я настроил его для использования в /external-backup
качестве места назначения, где я подключаю внешний жесткий диск. Я просто запустил сценарий без включения (или подключения) жесткого диска и обнаружил, что он работает в обычном режиме, хотя и создает резервную копию на внутреннем жестком диске, где недостаточно места для резервного копирования.
Мой вопрос: как я могу проверить, смонтирован ли том в нужном месте, прежде чем писать в него? Если я могу обнаружить, что /external-backup
это не смонтировано, я могу предотвратить запись в него.
Дополнительный вопрос заключается в том, почему это было разрешено, когда ОС знает, что каталог должен находиться на другом устройстве, и что произойдет с данными (на внутреннем жестком диске), если я позже подключу это устройство (внешний жесткий диск)? Очевидно, что не может быть двух копий на разных устройствах по одному пути!
Заранее спасибо!
/external-backup
не находится на внешнем устройстве, он находится в родительской файловой системе. Система знает только то, чтоmount
говорит это, она не имеет ни малейшего представления, что должно быть там. Нет ничего особенного в «точке монтирования» в файловой системе Unix. Это просто обычный каталог.Для окончательного ответа на что-то, что точно знает только ядро, спросите ядро:
Этот файл можно читать / анализировать, как если бы это был обычный файл, используя любые инструменты, которые вам нравятся. Включая Python. Quick-N-грязный пример:
источник
Самый простой способ проверить это - вызвать
mount
viasubprocess
и посмотреть, появится ли он там. Для дополнительной информации используйтеos.readlink()
содержимое,/dev/disk/by-*
чтобы выяснить, какое это устройство.источник
mount
определяется в лучшем случае небрежно. Чтоmount
выводит, если я смонтирован/dev/evil device on tour
на/directory on which I mount devices
? Парсинг вывода может быть ненадежным в таких случаях ...Бонусный ответ. Если внешнее устройство не подключено, данные записываются в корневой раздел по пути
/external-backup
. Если подключено внешнее устройство, данные в корневом разделе все еще там, но они недоступны, потому что/external-backup
теперь они указывают на внешнее устройство.источник
Старый вопрос, но я думал, что в любом случае внесу свое решение (основываясь на ответах Денниса Уильямсона и Игнасио Васкеса-Абрамса ). Поскольку я использую его в среде, отличной от Linux, для проверки монтирования удаленных каталогов, / proc и mtab не могут быть использованы, и никакие дополнительные проверки не были реализованы:
Улучшения приветствуются!
источник
Файл / etc / mtab существует, чтобы сообщить вам, что в данный момент смонтировано. Есть
getmntent
вызов, но я не думаю, что он экспортируется вos
модуль. Быстрая и грязная? Откройте / etc / mtab и разбейте. Убедитесь, что ваше устройство присутствует в столбце 0, а точка монтирования в столбце 1 указана правильно.источник