Remove Kernel Lock from Unmounted Mass Storage USB Device from the Command Line in Linux
Quick and Dirty Method
For a brute force disable of all active mass storage devices:
rmmod usb_storage
Prevent Any Device from Loading usb_storage Module
I found the following link, basically asking the same question as this. If you want to prevent the kernel from auto-mounting using usb_storage
:
echo "blacklist usb_storage" | sudo tee /etc/modprobe.d/blacklist-usb-storage.conf
Prevent Single Device from Loading usb_storage Module
Instead of disabling all devices, you can target a specific device to ignore using udev rules. There is a specific example here.
I spent a lot of time trying to get this to work in Ubuntu 10.04, but it looks like this functionality was disabled in newer versions of udev.
"Safely Remove Disk" Unbind/Unclaim Source Code
The last post on this thread worked like a charm.
#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");
}
}
Simple Script for Binding / Unbinding Device
The previous example is an interesting case, but I also found a much simplified method. You can use the usb-storage driver interface for binding and unbinding devices.
The following command worked, just like the source code from above:
echo -n "1-2.4:1.0" | sudo tee unbind
Related videos on Youtube
cmcginty
Former Sr. Software Engineer at Box. Interests include Python, Gradle, C, Java, Git, Linux, Embedded. Find me on github https://github.com/cmcginty.
Updated on September 17, 2022Comments
-
cmcginty over 1 year
I've searched high and low, and can't figure this one out. I have a older Olympus Camera (2001 or so). When I plug in the USB connection, I get the following log output:
$ 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
Secondly, the drive is not mounted in the FS, but when I run gphoto2 I get the following error:
$ 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') ***
What command will unmount the drive. For example in Nautilus, I can right click and select "Safely Remove Device". After doing that, the /dev/sg7 and /dev/sdg devices are removed.
The output of gphoto2 is then:
# 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
Some things I've tried already are
sdparm
andsg3_utils
, however I am unfamiliar with them, so it's possible I just didn't find the right command.Update 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') ***
-
user1686 almost 14 yearsIf I recall correctly,
gphoto2
only deals with MTP/PTP devices, not mass storage... -
cmcginty almost 14 yearssorry, maybe my terminology is off, but it work when I unmount from Nautilus
-
cmcginty almost 14 yearsno solution so far, any ideas?
-
Peter Jaric almost 14 yearsgvfs-mount doesn't work then? (see my answer)
-
cdaaawg about 12 yearsPeter Janic's solution worked great for me. A ptp mounted device does not show up with the "mount" command, but "gvfs-mount -l" and "gvfs-mount -u" do work on my ptp mounted nikon d70. Thanks Peter!
-
-
cmcginty almost 14 yearsI added the output of the commands in the question .. I'm sure I tried that a few days ago ;)
-
cmcginty almost 14 yearsAlso, you assume I am trying to download photos, that is not the case.
-
quack quixote almost 14 years@casey: /dev/sg7 wouldn't have been mounted anyway -- that's a scsi control device, not a drive. /dev/sdg might be a mountable device, and might be a partitioned drive (in which case you'd have to mount /dev/sdg1 or /dev/sdg2 or similar).
-
cmcginty almost 14 yearsThere are no partitions shown on /dev/sdg
-
cmcginty almost 14 yearsIt looks similar, but I can get gphoto to work if I simply unmount the device from Nautilus first. I'll make sure to read it all and try and of the workarounds.
-
cmcginty almost 14 yearsI changed something, and now gvfs_mount does not list the device. I'll try again after a reboot.
-
Peter Jaric almost 14 yearsIt didn't work then, I guess, since you pursued another line?