Удалите блокировку ядра из размонтированного USB-устройства массового хранения из командной строки в Linux

Я искал высоко и низко и не могу понять этого. У меня есть более старый Olympus Camera (приблизительно 2001). Когда я включаю соединение USB, я получаю следующий вывод журнала:

$ dmesg | grep sd
[20047.625076] sd 21:0:0:0: Attached scsi generic sg7 type 0
[20047.627922] sd 21:0:0:0: [sdg] Attached SCSI removable disk

Во-вторых, диск не смонтирован в FS, но когда я выполняю gphoto2, я получаю следующую ошибку:

$ gphoto2 --list-config

*** Error ***              
An error occurred in the io-library ('Could not lock the device'): Camera is already in use.
*** Error (-60: 'Could not lock the device') ***       

Какая команда размонтирует диск. Например, в Наутилусе, я могу щелкнуть правой кнопкой и выбрать, "Безопасно Удаляют Устройство". После выполнения этого удалены/dev/sg7 и/dev/sdg устройства.

Вывод gphoto2 затем:

# gphoto2 --list-config
/Camera Configuration/Picture Settings/resolution                              
/Camera Configuration/Picture Settings/shutter
/Camera Configuration/Picture Settings/aperture
/Camera Configuration/Picture Settings/color
/Camera Configuration/Picture Settings/flash
/Camera Configuration/Picture Settings/whitebalance
/Camera Configuration/Picture Settings/focus-mode
/Camera Configuration/Picture Settings/focus-pos
/Camera Configuration/Picture Settings/exp
/Camera Configuration/Picture Settings/exp-meter
/Camera Configuration/Picture Settings/zoom
/Camera Configuration/Picture Settings/dzoom
/Camera Configuration/Picture Settings/iso
/Camera Configuration/Camera Settings/date-time
/Camera Configuration/Camera Settings/lcd-mode
/Camera Configuration/Camera Settings/lcd-brightness
/Camera Configuration/Camera Settings/lcd-auto-shutoff
/Camera Configuration/Camera Settings/camera-power-save
/Camera Configuration/Camera Settings/host-power-save
/Camera Configuration/Camera Settings/timefmt

Некоторые вещи, которые я попробовал уже, sdparm и sg3_utils, однако я незнаком с ними, таким образом, возможно, что я просто не нашел правильную команду.

Обновление 1:

# mount | grep sdg
# mount | grep sg7
# umount /dev/sg7
umount: /dev/sg7: not mounted
# umount /dev/sdg
umount: /dev/sdg: not mounted
# gphoto2 --list-config

*** Error ***              
An error occurred in the io-library ('Could not lock the device'): Camera is already in use.
*** Error (-60: 'Could not lock the device') ***       
1
задан 03.06.2010, 15:15

4 ответа

Быстрый и грязный метод

Поскольку грубая сила отключает всех активных устройств массового хранения:

rmmod usb_storage

Препятствуйте тому, чтобы Любое Устройство Загрузило usb_storage Модуль

Я нашел следующую ссылку, в основном задав тот же вопрос как это. Если Вы хотите препятствовать тому, чтобы ядро автомонтировало использование usb_storage:

echo "blacklist usb_storage" | sudo tee /etc/modprobe.d/blacklist-usb-storage.conf

Препятствуйте тому, чтобы Единое устройство Загрузило usb_storage Модуль

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

Я провел много времени, пытаясь заставить это работать в Ubuntu 10.04, но похоже, что эта функциональность была отключена в более новых версиях udev.

"Безопасно Удалите Диск", Развязывают/Не требуют Исходный код

Последнее сообщение на этом потоке работало как очарование.

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <linux/ioctl.h>
#include <linux/usbdevice_fs.h>

int main(int argc, char**argv)
{
   struct usbdevfs_ioctl command;
   int ret;
   int fd;
   int i;
   if (argc>1) {
      fd = open(argv[1],O_RDWR);
      if (fd<1){
         perror("unable to open file");
         return 1;
      }
      for (i=0;i<255;i++){ // hack: should fetch how many interface there is.
         command.ifno = i;
         command.ioctl_code = USBDEVFS_DISCONNECT;
         command.data = NULL;
         ret = ioctl(fd, USBDEVFS_IOCTL, &command);
         if(ret!=-1)
            printf("un claimed interface %d %d\n",i,ret);
      }
   }else {
      printf ("usage: %s /dev/bus/usb/BUS/DEVICE\n",argv[0]);
      printf("Release all interfaces of this usb device for usage in virtualisation\n");
   }
}

Простой Сценарий для Привязки / Развязывание Устройства

Предыдущим примером является интересный случай, но я также нашел много упрощенного метода. Можно использовать интерфейс драйвера устройства хранения данных usb для привязки и развязывания устройств.

Следующая команда работала, точно так же, как исходный код сверху:

echo -n "1-2.4:1.0" | sudo tee unbind    
1
ответ дан 17.12.2019, 00:41

Во-первых, выполненный mount как корень. Это должно перечислить все смонтированные файловые системы. Если /dev/sdg и /dev/sg7 не находятся в списке, затем камера больше не монтируется.

Если камера все еще смонтирована, можно размонтировать ее с командой umount (отметьте пропавших без вести 'n'). Пример был бы umount /dev/sg7 или umount /dev/sdg.

Если камера смонтировала файловые системы, то можно, вероятно, просто просмотреть к фотографиям в Наутилусе. Вывод mount скажет Вам, где устройства смонтированы к в файловой системе - просто просматривают к папке и начинают наводить справки о фотографиях.

0
ответ дан 17.12.2019, 00:41

Вы используете Ubuntu? Существует разговор об ошибке в 8,10, и в то время как я не уверен, фиксируется ли это в последней версии, существует обходное решение, которое могло бы позволить Вам сделать... независимо от того, что это, Вы пытаетесь сделать (так как Вы только загружаете изображения).:P

0
ответ дан 17.12.2019, 00:41

Я делаю это в сценарии:

# If camera is mounted we need to unmount it
export CAMERA_MOUNT_POINTS=`gvfs-mount -l | grep gphoto2 | sed 's/.*\(gphoto2.*\)$/\1/' | uniq 2> $LOG_FILE`
for CAMERA_MOUNT_POINT in $CAMERA_MOUNT_POINTS
do
    echo Unmounting mounted camera from $CAMERA_MOUNT_POINT.
    gvfs-mount -u $CAMERA_MOUNT_POINT &> $LOG_FILE
done

Я не уверен, что это - то, в чем Вы нуждаетесь, но это могло бы быть, так как у меня были подобные проблемы.

Править: Объяснить немного: gvfs-mount -l списки смонтировали, что Остальная часть материала той строки чистит вывод для создания просто списка смонтированных камер (и передает ошибки по каналу к файлу журнала). Затем цикл размонтировал все камеры.

0
ответ дан 17.12.2019, 00:41

Теги

Похожие вопросы