Làm cách nào để biết được / dev nào là ổ flash USB?


160

Tôi muốn gắn một ổ USB, hai trong số chúng và tôi cần hai điểm gắn khác nhau. Thật không may, nhân Linux đã trải qua một sự thay đổi tên và tôi không thể tìm ra /devvị trí nào là đúng. Có cách nào để xem qua dmesghoặc /prochoặc một nơi nào khác để tìm ra nút thiết bị nào là ổ USB.

(Tôi đang sử dụng ArchLinux nếu điều đó giúp bất kỳ ... /dev/sdalà ổ cứng đầu tiên, /dev/sr0là ổ đĩa DVD, v.v.)

chỉnh sửa: Ổ USB được kết nối với bộ chia USB. Tôi nhìn qua dmesgvà nó nói rằng hub đã được kết nối và nó quét 3 thiết bị được kết nối với nó. Vẫn không thể thấy ổ USB của tôi ở đâu.


1
Không thể nhìn thấy nó? Có lẽ đợi một chút. Hoặc thử một cổng USB khác. Xem sự khác biệt trong 'lsusb'
Nick Devereaux

Có thể muốn viết lại câu hỏi phần nào - không phải tất cả các thiết bị usb đều là đĩa.
Arafangion

3
Các dflệnh cho bạn thấy nơi nó được gắn kết
Will Sheppard

Câu trả lời:


83

Cách dễ nhất: Nhìn vào đầu ra dmesgsau khi kết nối thiết bị USB. Nó sẽ cho bạn thấy /devnút nào được gán cho nó.


2
dmesghoạt động tuyệt vời, nhưng tôi có một trường hợp dmesgkhông hiển thị /devnút: [421963.864281] usb 3-6: new high-speed USB device number 32 using xhci_hcdĐiều này có nghĩa là gì? Làm thế nào tôi có thể gắn thiết bị này? Thiết bị xuất hiện vào lsusb...
modulitos

1
Trên thực tế, tôi đã tìm ra nó. Có một bản cập nhật kernel kể từ lần khởi động lại cuối cùng của tôi đã gây ra vấn đề này. Sau khi khởi động lại, usb của tôi gắn kết tốt. Hy vọng điều này sẽ giúp được ai đó!
modulitos

54

Chừng nào bạn đang chạy udev , bạn có thể làm điều này một cách dễ dàng bằng cách tham khảo / dev / disk / by-id / USB- ManufacturerName _ serialNumber . Chúng xuất hiện dưới dạng các liên kết tượng trưng mà bạn có thể tham chiếu trực tiếp trong fstab của mình hoặc bạn có thể tham gia bằng cách sử dụng readlink -e để xác định thiết bị khối liên quan.

Đây là một ví dụ thực tế. Trên máy của tôi, tôi có 3 ổ cứng USB được kết nối. Mỗi cái này hiển thị trong / dev / đĩa / by-id với các số sê-ri duy nhất (mặc dù chúng có chung một chuỗi nhà sản xuất). Tôi đã tạo liên kết tượng trưng cho mỗi một trong ba mục duy nhất, và bây giờ có thể nhanh chóng xác định là ổ đĩa đó (và thiết bị nào được kết hợp với mỗi ổ) bằng cách chạy readlink -e linkname . Ví dụ: chạy readlink -e / root / đĩa2 trên máy của tôi hiện đang hiển thị " / dev / sde ", trong khi readlink -e / root / đĩa3 không tạo ra kết quả nào.


15
Ngắn gọn và đơn giản:for devlink in /dev/disk/by-id/usb*; do readlink -f ${devlink}; done
Felipe Alcacibar

54

Tất cả đều là những gợi ý hay, nhưng phương pháp nhanh nhất và ít dài dòng nhất là chỉ cần gõ như sau trong terminal:

mount

sẽ đưa ra một danh sách tất cả các thiết bị được gắn (điều này giả sử ổ USB được gắn, thường là trường hợp với các bản phân phối Linux hiện đại).


5
Không, nó không gắn thiết bị của bạn một cách kỳ diệu. Bạn phải chỉ định nó với mount /dev/id /mount/point, để nó không hoạt động.
polym

9
Câu trả lời của tôi giải quyết câu hỏi của người dùng 'Có cách nào để xem qua dmesg hoặc / Proc hoặc ở nơi nào khác để tìm ra nút thiết bị nào là ổ USB không.', Và không có ý định cung cấp hướng dẫn về tính thực tế của việc gắn ổ đĩa trong Linux .
AnotherLongUsername

Câu trả lời này đã giải quyết một câu hỏi gần như giống hệt tôi.
Matthew Brown hay còn gọi là Lord Matt

1
Tôi nghĩ rằng hành vi automount phụ thuộc rất nhiều vào loại distro.
jiggunjer

1
dftôi cũng vậy
Alexey

24

Hãy thử lệnh udevinfo -q all -n /dev/sda, đâu /dev/sdalà đường dẫn đến đĩa của bạn. Điều này cung cấp cho bạn một lượng lớn thông tin về đĩa bạn đang xem - có một mục cho bạn biết về chiếc xe buýt được kết nối.

Điều này tất nhiên giúp bạn không phải grep thông qua dmesg và / hoặc nhật ký.

Cập nhật

udevadm info --query=all -n /dev/sda 

Từ ít nhất là tháng 7 năm 2010 [ 1 ] udevinfo đã được thay thế trong Debian (và có nguồn gốc) bằng udevadm infomột chút thoáng qua mà có các liên kết tượng trưng sớm bị loại bỏ và bạn có thể tìm thấy chúng trong máy cũ chưa được cập nhật). Luôn luôn từ [ 1 ] chúng ta có thể đọc:

Trong udev 117, udevadmđã được giới thiệu udevinfovà các chương trình khác đã biến thành các liên kết tương thích. Các liên kết tượng trưng không được chấp nhận trong udev 128 và được gỡ bỏ trong udev 147 .


8
Trong Debian, udevinfođược đổi tên udevadm.
Steve Pomeroy

8
Trên Ubuntu, lệnh dường như là "udevadm information --query = all -n / dev / sda"
machineghost

Tôi cho rằng họ đã đổi tên lệnh tại một số điểm - khi tôi viết câu trả lời (cách đây rất lâu) lệnh đã hoạt động trên hệ thống
ubfox

Lệnh vẫn hoạt động trong Ubuntu,udevadm info --query=all -n /dev/ttyUSB1
Siddharth

1
udevadm info --query=all -n /dev/ttyUSBở Fedora cũng vậy.
slm

22

phương pháp đơn giản nhất để xem những gì đang diễn ra chỉ là gõ (tất nhiên là root):

blkid -c /dev/null

điều này cung cấp cho bạn tổng quan hoàn chỉnh về tất cả các thiết bị khối ngay cả khi không được gắn


Không phải tất cả các distro có điều này. Mà bạn đã sử dụng?
New Alexandria

Điều này đầu ra không có gì trên bản phân phối Raspbian của tôi.
IgorGanapolsky

Lệnh không được tìm thấy: blkid
IgorGanapolsky

Không có đầu ra từ lệnh này trên Ubuntu 14.04 64-bit.
gbmhunter

11

/dev/disk/by-* là cách dễ nhất trong trường hợp này, nếu vì lý do nào đó bạn muốn làm cho cuộc sống thú vị hơn, bạn có thể sử dụng HAL.

Để liệt kê tất cả các thiết bị bạn sử dụng:

hal-device

Để có được một tài sản cụ thể mà bạn sử dụng (điều này sẽ trở lại /dev/sd*trên thiết bị lưu trữ USB):

hal-get-property --udi $UDI --key block.device

Ngoài ra còn có:

hal-find-by-capability
hal-find-by-property

Nếu bạn muốn làm cho nó phức tạp hơn nữa, bạn có thể dễ dàng tự viết cho mình một công cụ tự động dựa trên HAL , điều này có thể khá tiện lợi nếu bạn muốn tự động hóa mọi thứ hoàn toàn.

Và chỉ để hoàn thiện cũng có:

lsusb -v
lshw

Cung cấp một số thông tin chung về USB và phần cứng của bạn nói chung.


2
/ dev / đĩa / by-id / * usb * rất hữu ích.
Cướp

/ dev / đĩa / by-nhãn ftw. Cảm ơn :)
Triptych

10
sudo fdisk -l

Và chỉ cần phân tích kết quả.


1
Trang man fdisk "Nếu không có thiết bị nào được cung cấp, những thiết bị được đề cập trong / Proc / phân vùng (nếu tồn tại) được sử dụng." Chạy fdisk có thể không phải là một tùy chọn ... Dựa trên một hệ thống Debian mà tôi biết là chưa cài đặt nó, tôi đoán là một số hệ thống GPT có thể không cài đặt phần mềm không cần thiết. Tuy nhiên, kiểm tra / Proc / phân vùng nên là một tùy chọn.
TUYỆT VỜI 10/11/2015

Đây là lựa chọn duy nhất làm việc tốt cho tôi. Tôi xin lỗi nếu nó không làm việc cho bạn!
Felipe

8

Sử dụng

ls -l /dev/disk/by-id/usb*

Theo quy tắc udev mặc định, điều đó sẽ hiển thị cho bạn hầu hết các thiết bị usb và nó sẽ hiển thị cho bạn liên kết tượng trưng đến tên thiết bị chặn của chúng trên hệ thống.

Nếu điều đó không làm việc, hãy nhìn /dev/disk/by-id/trực tiếp.


6

Đối với thiết bị USB, bạn chỉ cần làm

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
+1. Kịch bản đơn giản và súc tích để thực hiện các nhiệm vụ tự động.
leesei

2

Hãy nhìn vào cây dưới /dev/disk. Nó liệt kê các đĩa và phân vùng của chúng (hệ thống tệp) theo các sơ đồ khác nhau.


2

/ var / log / message nếu dmesg không còn thông tin.


0

Nếu bạn rút ổ đĩa USB và cắm lại, bạn sẽ thấy nó khởi tạo từ kernel (dmesg)


0

Dựa trên câu trả lời tuyệt vời từ cơn bão và với sự phụ thuộc vào udev để điền vào cây thiết bị "/ dev / đĩa / by-id / usb", bạn có thể định nghĩa một vị ngữ (Bash) như sau:

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
}

Và sau đó sử dụng nó:

if is_usb_device "/dev/sdg"; then
    echo "/dev/sdg is a usb device"
else
    echo "/dev/sdg is not a usb device"
fi
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.