Nếu tôi kết nối một thiết bị vật lý, làm thế nào tôi có thể biết tập tin thiết bị nào thuộc về nó?


13

Giả sử tôi cắm vào một số ổ USB không được gắn tự động. Làm cách nào tôi có thể tìm ra tập tin thiết bị thuộc về thiết bị vật lý nào, để tôi có thể gắn nó vào ví dụ?

Tôi đang chạy Mac OS X nhưng tôi thích một câu trả lời hoạt động trên tất cả (hoặc ít nhất là các hệ thống Unix phổ biến nhất). Tôi đã có vấn đề này với Linux trong quá khứ.


Trên Linux, câu trả lời sẽ có xu hướng liên quan đến udev. Vì vậy, bạn hãy thử tìm kiếm tương đương udev trên OSX ; điều này đặc biệt dẫn đến chức năng Thay thế cho udev trên Hướng dẫn giao diện thiết bị USB OSXOSX .
Gilles 'SO- ngừng trở nên xấu xa'

Trên MacOSX đơn giản nhất là xác định khối lượng bằng nhãn của chúng. Nhưng Gilles có quyền về giải pháp hoàn hảo.
peterh - Tái lập Monica

Câu trả lời:


14

Sử dụng udev:

Bạn có thể nhận được truy vấn thông tin hữu ích udev(trên các hệ thống sử dụng nó - gần như tất cả các Linux loại máy tính để bàn). Chẳng hạn, nếu bạn muốn biết ổ đĩa gắn liền nào được liên kết với /dev/sdb, bạn có thể sử dụng:

udevadm info --query=property --name=sdb

Nó sẽ hiển thị cho bạn một danh sách các thuộc tính của thiết bị đó, bao gồm nối tiếp (ID_SERIAL_SHORT). Có thông tin đó, bạn có thể nhìn vào đầu ra lsusb -vvà tìm ra những thứ như tên nhà sản xuất và sản phẩm.

Một con đường ngắn hơn để làm điều này sẽ là

udevadm info --query=property --name=sdb | grep "\(MODEL_ID\|VENDOR_ID\)"

và xem dòng có khớp với $ID_VENDOR_ID:$ID_MODEL_IDđầu ra ngắn hơn nhiều lsusb.

Một lựa chọn hữu ích khác là udevadm monitor. Sử dụng nó nếu bạn muốn biết nút thiết bị nào được tạo tại điểm gắn thiết bị . Vì vậy, lần đầu tiên chạy

 udevadm monitor --udev --subsystem-match=block

Và sau đó kết nối thiết bị. Bạn sẽ thấy tên thiết bị của các thiết bị khối được phát hiện (đĩa / phân vùng) được in ở cuối mỗi dòng đầu ra.

Một ví dụ thực tế hàm shell:

Đây là một chức năng bạn có thể đặt trong .bashrc(hoặc .zshrc):

listusbdisks () 
{
    [["x $ 1" == "xv"]] && shift && ĐỘNG TỪ cục bộ = -v
    cho dsk bằng $ {@ - / dev / sd?}
    làm
        / sbin / udevadm thông tin --query = path --name = "$ dsk" | grep --colour = auto -q usb | | tiếp tục
        tiếng vang "===== thiết bị $ dsk là:"
        (eval $ (/ sbin / udevadm thông tin --query = property --name = "$ dsk" | grep "\ (MODEL \ | VENDOR \) _ ID")
          ["$ ID_VENDOR_ID: $ ID_MODEL_ID" == ":"] && tiếng vang "Không xác định" || \
            lsusb $ ĐỘNG TỪ -d "$ ID_VENDOR_ID: $ ID_MODEL_ID"
        )
        grep -q "$ dsk" / Proc / mounts && echo "----- THIẾT BỊ ĐƯỢC TẠO ----"
        tiếng vang
    làm xong
}

Sử dụng nó như thế này:

  • listusbdisks- để nhận ra tất cả các /dev/sdxthiết bị;
  • listusbdisks sdbhoặc listusbdisks /dev/sdbhoặc listusbdisks sdb sdc- để nhận thông tin về một số thiết bị nhất định;
  • listusbdisks -v [optional devices as above] - để hiển thị đầu ra dài dòng của lsusb

[Chỉnh sửa]: Đã thêm một số chức năng như truy vấn nhiều thiết bị, kiểm tra gắn kết và kiểm soát mức độ chi tiết của lsusb.


Đúng như vậy, nhưng không phải tất cả các hệ thống đều sử dụng udev.
Caleb

@Caleb Đúng ... Thật ra, lsusbđây cũng là một chương trình tùy chọn. Nhưng cả hai đều cực kỳ phổ biến.
rozcietrzewiacz

@rozcietrzewiacz Câu hỏi chủ yếu là về OSX, nhưng udev thực chất là dành riêng cho Linux.
Gilles 'SO- ngừng trở nên xấu xa'

@Gil Vâng, đúng rồi. Tôi chưa có kinh nghiệm với OSX, vì vậy tôi chỉ cập nhật câu trả lời của mình để không gây hiểu lầm.
rozcietrzewiacz

Những gì tôi thường làm trong trường hợp như vậy là, tôi cắm thiết bị vào và chạy ngay lập tức dmesg. Nhưng điều này sẽ không hữu ích nếu thiết bị đã được cắm và nếu có nhiều thiết bị được cắm sau thiết bị đầu tiên. :)
Abhishek A

3

Không có câu trả lời phổ quát. Trên Linux, cách đơn giản nhất có lẽ là chỉ cần kích hoạt tiện ích đĩa gnome và nó sẽ hiển thị tất cả các đĩa được phát hiện, cho dù chúng có được gắn hay không. Từ dòng lệnh, bạn có thể tham khảo đầu ra của blkidhoặc udevadm info --export-db.


3

Trong Mac OS X, bạn có thể thử sử dụng diskutil list.


1

Đối với tất cả các Unix, tôi không nghĩ rằng điều này là khả thi.

Các xe buýt bên ngoài thông thường ngày nay không sử dụng sơ đồ đánh số cố định cho các cổng của chúng, giống như IDE đã làm. Vì vậy, các nguồn dữ liệu duy nhất còn lại cho ánh xạ bạn cần là tên nhà sản xuất của ổ đĩa, số sê-ri của chúng hoặc UID của phân vùng.

Tên nhà sản xuất không nhất thiết phải là duy nhất trên một máy nhất định (giả sử bạn kết nối hai ổ đĩa ngoài từ cùng một chuỗi - chúng sẽ xác định danh tính giống hệt nhau). Số sê-ri không "hiển thị từ bên ngoài", cũng như các UID phân vùng.

Vì vậy, về giải pháp phổ quát duy nhất tôi có thể nghĩ đến là gắn nhãn các ổ đĩa vật lý với số sê-ri và sử dụng lệnh udevadm được đưa ra trong câu trả lời của rozcietrzewiacz, nếu có sẵn UDEV.

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.