I want to mount a USB drive, two of them and I need two different mount points. Unfortunately, the Linux kernel underwent a name change and I can't figure out which /dev location is the right one. Is there a way to look through dmesg or /proc or somewhere else to find out which device node is a USB drive.
(I'm using ArchLinux if that helps any.../dev/sda is the first hard drive, /dev/sr0 is a dvd drive, etc.)
edit: The USB drive is connected to a USB hub. I looked through dmesg and it says the hub was connected and it scanned for the 3 devices connected to it. Still can't see where my USB drive is though.
13 Answers
Easiest way: Look at the output of dmesg after connecting the USB device. It should show you what /dev node was assigned to it.
All of these are good suggestions, but the quickest and least verbose method is to just type the following in the terminal:
mountwhich will give a list of all the mounted devices (this assumes the USB drive is mounted, which is usually the case with modern Linux distros).
5As long as you are running udev, you can do this easily by referencing /dev/disk/by-id/usb-manufacturername_serialnumber. These appear as symbolic links which you can either directly reference within your fstab, or which you can dereference using readlink -e to determine the associated block device.
Here's a real world example. On my machine, I have 3 USB hard drives connected. These each show up in /dev/disk/by-id with unique serial numbers (although they share a common manufacturer string). I have created symbolic links to each of these three unique entries, and can now quickly determine which drive is which (and which device is associated with each drive) by running readlink -e linkname. For example, running readlink -e /root/disk2 on my machine currently displays "/dev/sde", while readlink -e /root/disk3 produces no output whatsoever.
1Try the command udevinfo -q all -n /dev/sda, where /dev/sda is the path to your disk. This gives you a boatload of info about the disk you're looking at - there's an entry that tells you about the bus it's connected to.
This of course saves you from having to grep through dmesg and/or logs.
Update
udevadm info --query=all -n /dev/sda From at least Jul 2010 [1] udevinfo was substituted in Debian (and derived) by udevadm info with a little transient with which there were symlinks soon deprecated and removed (you can still found them in old not updated machine). Always from [1] we can read:
5In udev 117,
udevadmwas introduced andudevinfoand other programs turned into compatibility symlinks. The symlinks were deprecated in udev 128 and removed for good in udev 147.
the simplest method to see what's going on is just typing (as root of course):
blkid -c /dev/nullthis gives you a complete overview about all block devices even if not mounted
4sudo fdisk -lAnd just analyse the result.
2/dev/disk/by-* is the easiest way in this case, if for some reason you want to make life more interesting you can use HAL.
To list all devices you use:
hal-deviceTo get a specific property you use (this will return /dev/sd* on a USB storage device):
hal-get-property --udi $UDI --key block.deviceThere is also:
hal-find-by-capability
hal-find-by-propertyIf you want to make it even more complicated you can relatively easy write yourself a HAL based auto mounter, which can be quite handy if you want to automate things completly.
And just for completeness there are also:
lsusb -v
lshwWhich provides some general information about USB and your hardware in general.
2Use
ls -l /dev/disk/by-id/usb*Under the default udev rules, that will show you most usb devices and it will show you the symlink to their block-device name on the system.
If that doesn't work, look at /dev/disk/by-id/ directly.
For USB devices you can simply do
REMOVABLE_DRIVES=""
for _device in /sys/block/*/device; do if echo $(readlink -f "$_device")|egrep -q "usb"; then _disk=$(echo "$_device" | cut -f4 -d/) REMOVABLE_DRIVES="$REMOVABLE_DRIVES $_disk" fi
done
echo Removable drives found: "$REMOVABLE_DRIVES" 1 Take a look at the tree under /dev/disk. It lists disks and their partitions (file systems) by various schemes.
/var/log/message if dmesg no longer has the information.
If you unplug the USB drive and plug it back in, you should see it initialize from the kernel (dmesg)
Based on the excellent answer from stormlash and with a dependency on udev to populate the "/dev/disk/by-id/usb" device tree, you could define a predicate (Bash) as follows:
is_usb_device() { local device_path=$1 # such as /dev/sdc for devlink in /dev/disk/by-id/usb*; do if [ "$(readlink -f "$devlink")" = "$device_path" ]; then return 0 fi done return 1
}And then use it:
if is_usb_device "/dev/sdg"; then echo "/dev/sdg is a usb device"
else echo "/dev/sdg is not a usb device"
fi