WedX - журнал о программировании и компьютерных науках

Как я могу монтировать и размонтировать файловые системы Linux, используя ctypes, mount и umount

У меня есть скрипт Python (запущенный от имени пользователя root), который должен иметь возможность монтировать и размонтировать файловую систему USB-накопителя. Я провел небольшое исследование и нашел этот ответ https://stackoverflow.com/a/29156997, в котором используются ctypes. Однако. в ответе указано только, как монтировать, поэтому я попытался создать аналогичную функцию для размонтирования устройства. Вобщем у меня так:

import os
import ctypes
def mount(source, target, fs, options=''):
    ret = ctypes.CDLL('libc.so.6', use_errno=True).mount(source, target, fs, 0, options)
    if ret < 0:
        errno = ctypes.get_errno()
        raise RuntimeError("Error mounting {} ({}) on {} with options '{}': {}".
                           format(source, fs, target, options, os.strerror(errno)))

def unmount(device, options=0):
    ret = ctypes.CDLL('libc.so.6', use_errno=True).umount2(device, options)
    if ret < 0:
        errno = ctypes.get_errno()
        raise RuntimeError("Error umounting {} with options '{}': {}".format(device, options, os.strerror(errno)))

Однако попробуйте выполнить команду размонтирования с параметром «0» или «1», например:

unmount('/dev/sdb', 0)

or

unmount('/dev/sdb', 1)

дает следующую ошибку:

Traceback (most recent call last):
  File "./BuildAndInstallXSystem.py", line 265, in <module>
    prepare_root_device()
  File "./BuildAndInstallXSystem.py", line 159, in prepare_root_device
    unmount('/dev/sdb', 0)
  File "./BuildAndInstallXSystem.py", line 137, in unmount
    raise RuntimeError("Error umounting {} with options '{}': {}".format(device, options, os.strerror(errno)))
RuntimeError: Error umounting /dev/sdb with options '0': Device or resource busy

при запуске с 2 в качестве опции:

unmount('/dev/sdb', 2)

размонтирует ВСЕ мои файловые системы, включая «/», что приводит к сбою системы.

Все это по-прежнему применимо, даже если я заменю номер устройства конкретным разделом:

/dev/sdb -> /dev/sdb1

Что я делаю не так?


  • Вы уверены, что sdb не является вашим жестким диском? Перечислите свои устройства с подключенным и удаленным флэш-накопителем и сравните список. 26.07.2017
  • Я очень уверен. Поскольку этот сценарий в конечном итоге отформатирует и разделит указанный диск, я принял дополнительные меры предосторожности, чтобы убедиться, что это правильное устройство. 26.07.2017
  • Вы успешно смонтировали и размонтировали с помощью системных команд? 27.07.2017
  • Да. Я пробовал и монтировать, и размонтировать. также важно отметить, что попытка отключиться от моего скрипта с опцией 3 также привела к сбою системы. 27.07.2017
  • Я рекомендую использовать вызовы подпроцессов, чтобы сузить список проблем. 27.07.2017
  • Подпроцесс работает как шарм, но я должен указать конкретный раздел для размонтирования 27.07.2017

Новые материалы

Как создать диаграмму градиентной кисти с помощью D3.js
Резюме: Из этого туториала Вы узнаете, как добавить градиентную кисть к диаграмме с областями в D3.js. Мы добавим градиент к значениям SVG и применим градиент в качестве заливки к диаграмме с..

Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что это выглядит сложно…
Просто начните и учитесь самостоятельно Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что он кажется мне сложным, и я бросил его. Это в основном инструмент..

Лицензии с открытым исходным кодом: руководство для разработчиков и создателей
В динамичном мире разработки программного обеспечения открытый исходный код стал мощной парадигмой, способствующей сотрудничеству, инновациям и прогрессу, движимому сообществом. В основе..

Объяснение документов 02: BERT
BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

Как проанализировать работу вашего классификатора?
Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

Работа с цепями Маркова, часть 4 (Машинное обучение)
Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..


Для любых предложений по сайту: [email protected]