หากฉันเชื่อมต่ออุปกรณ์ทางกายภาพฉันจะรู้ได้อย่างไรว่าไฟล์อุปกรณ์ใดเป็นของมัน


13

สมมติว่าฉันเสียบไดรฟ์ USB หลายตัวที่ไม่ได้เมาท์โดยอัตโนมัติ ฉันจะทราบได้อย่างไรว่าไฟล์อุปกรณ์ใดเป็นของอุปกรณ์ฟิสิคัลดังนั้นฉันจึงสามารถเมานต์ไฟล์ได้?

ฉันใช้ Mac OS X แต่ฉันชอบคำตอบที่ใช้ได้กับระบบ Unix ทั้งหมด (หรืออย่างน้อยก็เป็นที่นิยมที่สุด) ฉันมีปัญหากับ Linux ในอดีต


บน Linux คำตอบมีแนวโน้มที่จะเกี่ยวข้องกับ udev ดังนั้นคุณลองดูudev ที่เทียบเท่าบน OSX ; นำไปสู่การนี้โดยเฉพาะอย่างยิ่งทางเลือกการทำงาน udev ใน OSXและOSX USB Device Interface คู่มือ
Gilles 'หยุดชั่วร้าย'

บน MacOSX วิธีที่ง่ายที่สุดคือการระบุโวลุ่มโดยใช้เลเบล แต่กิลส์มีสิทธิ์ในการแก้ปัญหาที่สมบูรณ์แบบ
peterh - Reinstate Monica

คำตอบ:


14

ใช้ udev:

คุณสามารถรับการสืบค้นข้อมูลที่เป็นประโยชน์udev(ในระบบที่ใช้มัน - เกือบทุกประเภท Linuxes แน่นอน) ตัวอย่างเช่นหากคุณต้องการทราบว่าไดรฟ์ที่แนบมานั้นเชื่อมโยงกับ/dev/sdbอะไรคุณสามารถใช้:

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

มันจะแสดงรายการคุณสมบัติของอุปกรณ์นั้นรวมถึงอนุกรม (ID_SERIAL_SHORT) มีข้อมูลนั้นคุณสามารถดูผลลัพธ์lsusb -vและค้นหาสิ่งต่าง ๆ เช่นผู้ผลิตและชื่อผลิตภัณฑ์

เส้นทางที่สั้นลงในการทำเช่นนี้จะเป็น

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

และดูบรรทัดที่มีการจับคู่ ในผลลัพธ์ที่สั้นมากของ$ID_VENDOR_ID:$ID_MODEL_IDlsusb

udevadm monitorอีกหนึ่งทางเลือกที่มีประโยชน์ ใช้มันหากคุณต้องการทราบว่าโหนดอุปกรณ์จะถูกสร้างขึ้นที่จุดของการติดตั้งอุปกรณ์ ดังนั้นวิ่งครั้งแรก

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

จากนั้นเชื่อมต่ออุปกรณ์ คุณจะเห็นชื่ออุปกรณ์ของอุปกรณ์บล็อกที่ตรวจพบ (ดิสก์ / พาร์ติชัน) ที่พิมพ์ที่ส่วนท้ายของแต่ละบรรทัดเอาต์พุต

ฟังก์ชั่นเปลือกตัวอย่างการปฏิบัติ:

นี่คือฟังก์ชั่นที่คุณสามารถใส่ใน.bashrc(หรือ.zshrc):

listusbdisks () 
{
    [["x $ 1" == "xv"]] && shift && local VERBOSE = -v
    สำหรับ dsk ใน $ {@ - / dev / sd?}
    ทำ
        / sbin / udevadm ข้อมูล --query = path --name = "$ dsk" | grep --colour = auto -q usb || ต่อ
        echo "===== อุปกรณ์ $ dsk คือ:"
        (eval $ (/ sbin / udevadm ข้อมูล - แบบสอบถาม = คุณสมบัติ - ชื่อ = "$ dsk" | grep "\ (MODEL \ | VENDOR \) _ ID")
          ["$ ID_VENDOR_ID: $ ID_MODEL_ID" == ":"] && echo "ไม่ทราบ" || \
            lsusb $ VERBOSE -d "$ ID_VENDOR_ID: $ ID_MODEL_ID"
        )
        grep -q "$ dsk" / proc / mounts && echo "----- มีการติดตั้งอุปกรณ์ ----"
        เสียงสะท้อน
    เสร็จแล้ว
}

ใช้มันแบบนี้:

  • listusbdisks- เพื่อรับรู้/dev/sdxอุปกรณ์ทั้งหมด
  • listusbdisks sdbหรือlistusbdisks /dev/sdbหรือlistusbdisks sdb sdc- เพื่อรับข้อมูลเกี่ยวกับอุปกรณ์บางอย่างเท่านั้น
  • listusbdisks -v [optional devices as above] - เพื่อแสดงเอาท์พุตอย่างละเอียดของ lsusb

[แก้ไข]:lsusbเพิ่มฟังก์ชั่นบางอย่างเช่นการสอบถามอุปกรณ์จำนวนมากตรวจสอบม้าและการควบคุมของฟุ่มเฟื่อย


พอทรูเท่าที่มันจะไป udevแต่ไม่ได้ใช้ระบบทั้งหมด
Caleb

@Caleb True ... ที่จริงแล้วlsusbเป็นโปรแกรมเสริม แต่ทั้งคู่เป็นเรื่องธรรมดามาก
rozcietrzewiacz

@rozcietrzewiacz คำถามนี้เกี่ยวกับ OSX เป็นหลัก แต่ udev นั้นเฉพาะกับ Linux เท่านั้น
Gilles 'หยุดความชั่วร้าย'

@Gil ดีจริง ฉันไม่มีประสบการณ์กับ OSX ดังนั้นฉันเพิ่งอัปเดตคำตอบเพื่อไม่ให้เข้าใจผิด
rozcietrzewiacz

dmesgสิ่งที่ฉันมักจะทำในกรณีดังกล่าวคือผมเสียบอุปกรณ์และทำงานทันที แต่สิ่งนี้จะไม่เป็นประโยชน์หากเสียบอุปกรณ์ไว้แล้วและหากมีอุปกรณ์ต่ออยู่มากกว่าอุปกรณ์แรก :)
Abhishek A

3

ไม่มีคำตอบสากล บนลีนุกซ์วิธีที่ง่ายที่สุดน่าจะเป็นเพียงแค่ไฟ gnome disk utility และมันจะแสดงดิสก์ที่ตรวจพบทั้งหมดไม่ว่าจะติดตั้งหรือไม่ก็ตาม จากบรรทัดคำสั่งคุณสามารถปรึกษาการส่งออกของหรือblkidudevadm info --export-db



1

ด้วยความเคารพต่อยูนิกซ์ทั้งหมดฉันไม่คิดว่ามันจะเป็นไปได้

ปกติแล้วรถเมล์ภายนอกในปัจจุบันไม่ได้ใช้รูปแบบการกำหนดหมายเลขที่แน่นอนสำหรับพอร์ตของตนเช่นเดียวกับ IDE ดังนั้นแหล่งข้อมูลที่เหลืออยู่เพียงอย่างเดียวสำหรับการแมปที่คุณต้องการคือชื่อผู้ผลิตไดรฟ์หมายเลขซีเรียลหรือ UID ของพาร์ติชัน

ชื่อผู้ผลิตไม่จำเป็นต้องซ้ำกันในเครื่องที่กำหนด (สมมติว่าคุณเชื่อมต่อไดรฟ์ภายนอกสองชุดจากซีรี่ส์เดียวกัน - พวกเขาจะระบุตัวตนเดียวกัน) หมายเลขซีเรียลไม่สามารถ "มองเห็นได้จากภายนอก" เช่นเดียวกับ UID ของพาร์ติชัน

ดังนั้นเกี่ยวกับวิธีแก้ปัญหาสากลเดียวที่ฉันคิดได้คือติดฉลากฮาร์ดไดรฟ์ด้วยหมายเลขซีเรียลและใช้คำสั่ง udevadm ที่กำหนดในคำตอบของ rozcietrzewiacz ถ้ามี UDEV

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.