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

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как я могу монтировать и размонтировать файловые системы Linux, используя ctypes, mount и umount

Сообщение Anonymous »

У меня есть скрипт 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)
или

Код: Выделить всё

unmount('/dev/sdb', 1)
выдает следующую ошибку:

Код: Выделить всё

Traceback (most recent call last):
File "./BuildAndInstallXSystem.py", line 265, in 
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
Что я делаю не так?

Подробнее здесь: https://stackoverflow.com/questions/453 ... and-umount
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»