ฉันใช้ Debian Squeeze บนคอมพิวเตอร์ปลั๊ก (ดังนั้น SSH เท่านั้น, ไม่มี GUI) และสิ่งที่ฉันพยายามทำคือเอามันมาให้เมื่อเสียบปลั๊ก USB มันจะถูกเมาท์โดยอัตโนมัติ
สิ่งที่ฉันทำคือการติดตั้งautofsสิ่งที่ฉันรวบรวมได้จากการจัดการติดตั้งอัตโนมัติซึ่งรู้ว่าอุปกรณ์อยู่ที่/devใด
ปัญหาคือแท่ง USB ไม่ได้อยู่ในชื่ออุปกรณ์เดียวกันเสมอไป บางครั้งมัน/dev/sdc1บางครั้ง/dev/sdd1ฯลฯ
ฉันรวบรวมสิ่งนั้นเพื่อแก้ไขปัญหานี้ฉันต้องใช้udevเพื่อให้แน่ใจว่าแท่ง USB ได้รับชื่อเดียวกันเสมอ
ฉันได้รับข้อมูลต่อไปนี้จากudevadm:
Udevadm info starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.
looking at device '/block/sdd/sdd1':
KERNEL=="sdd1"
SUBSYSTEM=="block"
DRIVER==""
ATTR{partition}=="1"
ATTR{start}=="63"
ATTR{size}=="129339"
ATTR{ro}=="0"
ATTR{alignment_offset}=="0"
ATTR{discard_alignment}=="0"
ATTR{stat}==" 31 244 275 190 0 0 0 0 0 190 190"
ATTR{inflight}==" 0 0"
looking at parent device '/devices/platform/orion-ehci.0/usb1/1-1/1-1.2/1-1.2:1.0/host8/target8:0:0/8:0:0:0/block/sdd':
KERNELS=="sdd"
SUBSYSTEMS=="block"
DRIVERS==""
ATTRS{range}=="16"
ATTRS{ext_range}=="256"
ATTRS{removable}=="1"
ATTRS{ro}=="0"
ATTRS{size}=="129439"
ATTRS{alignment_offset}=="0"
ATTRS{discard_alignment}=="0"
ATTRS{capability}=="51"
ATTRS{stat}==" 56 727 783 520 0 0 0 0 0 520 520"
ATTRS{inflight}==" 0 0"
ATTRS{events}=="media_change"
ATTRS{events_async}==""
ATTRS{events_poll_msecs}=="-1"
looking at parent device '/devices/platform/orion-ehci.0/usb1/1-1/1-1.2/1-1.2:1.0/host8/target8:0:0/8:0:0:0':
KERNELS=="8:0:0:0"
SUBSYSTEMS=="scsi"
DRIVERS=="sd"
ATTRS{device_blocked}=="0"
ATTRS{type}=="0"
ATTRS{scsi_level}=="3"
ATTRS{vendor}==" "
ATTRS{model}=="Flash Disk "
ATTRS{rev}=="2.00"
ATTRS{state}=="running"
ATTRS{timeout}=="30"
ATTRS{iocounterbits}=="32"
ATTRS{iorequest_cnt}=="0x90"
ATTRS{iodone_cnt}=="0x90"
ATTRS{ioerr_cnt}=="0x0"
ATTRS{modalias}=="scsi:t-0x00"
ATTRS{evt_media_change}=="0"
ATTRS{queue_depth}=="1"
ATTRS{queue_type}=="none"
ATTRS{max_sectors}=="240"
looking at parent device '/devices/platform/orion-ehci.0/usb1/1-1/1-1.2/1-1.2:1.0/host8/target8:0:0':
KERNELS=="target8:0:0"
SUBSYSTEMS=="scsi"
DRIVERS==""
looking at parent device '/devices/platform/orion-ehci.0/usb1/1-1/1-1.2/1-1.2:1.0/host8':
KERNELS=="host8"
SUBSYSTEMS=="scsi"
DRIVERS==""
looking at parent device '/devices/platform/orion-ehci.0/usb1/1-1/1-1.2/1-1.2:1.0':
KERNELS=="1-1.2:1.0"
SUBSYSTEMS=="usb"
DRIVERS=="usb-storage"
ATTRS{bInterfaceNumber}=="00"
ATTRS{bAlternateSetting}==" 0"
ATTRS{bNumEndpoints}=="02"
ATTRS{bInterfaceClass}=="08"
ATTRS{bInterfaceSubClass}=="06"
ATTRS{bInterfaceProtocol}=="50"
ATTRS{modalias}=="usb:v1976p6025d0100dc00dsc00dp00ic08isc06ip50"
ATTRS{supports_autosuspend}=="1"
looking at parent device '/devices/platform/orion-ehci.0/usb1/1-1/1-1.2':
KERNELS=="1-1.2"
SUBSYSTEMS=="usb"
DRIVERS=="usb"
ATTRS{configuration}==""
ATTRS{bNumInterfaces}==" 1"
ATTRS{bConfigurationValue}=="1"
ATTRS{bmAttributes}=="80"
ATTRS{bMaxPower}=="100mA"
ATTRS{urbnum}=="383"
ATTRS{idVendor}=="1976"
ATTRS{idProduct}=="6025"
ATTRS{bcdDevice}=="0100"
ATTRS{bDeviceClass}=="00"
ATTRS{bDeviceSubClass}=="00"
ATTRS{bDeviceProtocol}=="00"
ATTRS{bNumConfigurations}=="1"
ATTRS{bMaxPacketSize0}=="64"
ATTRS{speed}=="12"
ATTRS{busnum}=="1"
ATTRS{devnum}=="11"
ATTRS{devpath}=="1.2"
ATTRS{version}==" 1.10"
ATTRS{maxchild}=="0"
ATTRS{quirks}=="0x0"
ATTRS{avoid_reset_quirk}=="0"
ATTRS{authorized}=="1"
looking at parent device '/devices/platform/orion-ehci.0/usb1/1-1':
KERNELS=="1-1"
SUBSYSTEMS=="usb"
DRIVERS=="usb"
ATTRS{configuration}==""
ATTRS{bNumInterfaces}==" 1"
ATTRS{bConfigurationValue}=="1"
ATTRS{bmAttributes}=="e0"
ATTRS{bMaxPower}=="100mA"
ATTRS{urbnum}=="197"
ATTRS{idVendor}=="1a40"
ATTRS{idProduct}=="0101"
ATTRS{bcdDevice}=="0111"
ATTRS{bDeviceClass}=="09"
ATTRS{bDeviceSubClass}=="00"
ATTRS{bDeviceProtocol}=="01"
ATTRS{bNumConfigurations}=="1"
ATTRS{bMaxPacketSize0}=="64"
ATTRS{speed}=="480"
ATTRS{busnum}=="1"
ATTRS{devnum}=="2"
ATTRS{devpath}=="1"
ATTRS{version}==" 2.00"
ATTRS{maxchild}=="4"
ATTRS{quirks}=="0x0"
ATTRS{avoid_reset_quirk}=="0"
ATTRS{authorized}=="1"
ATTRS{product}=="USB 2.0 Hub"
looking at parent device '/devices/platform/orion-ehci.0/usb1':
KERNELS=="usb1"
SUBSYSTEMS=="usb"
DRIVERS=="usb"
ATTRS{configuration}==""
ATTRS{bNumInterfaces}==" 1"
ATTRS{bConfigurationValue}=="1"
ATTRS{bmAttributes}=="e0"
ATTRS{bMaxPower}==" 0mA"
ATTRS{urbnum}=="24"
ATTRS{idVendor}=="1d6b"
ATTRS{idProduct}=="0002"
ATTRS{bcdDevice}=="0206"
ATTRS{bDeviceClass}=="09"
ATTRS{bDeviceSubClass}=="00"
ATTRS{bDeviceProtocol}=="01"
ATTRS{bNumConfigurations}=="1"
ATTRS{bMaxPacketSize0}=="64"
ATTRS{speed}=="480"
ATTRS{busnum}=="1"
ATTRS{devnum}=="1"
ATTRS{devpath}=="0"
ATTRS{version}==" 2.00"
ATTRS{maxchild}=="1"
ATTRS{quirks}=="0x0"
ATTRS{avoid_reset_quirk}=="0"
ATTRS{authorized}=="1"
ATTRS{manufacturer}=="Linux 2.6.38.8 ehci_hcd"
ATTRS{product}=="Marvell Orion EHCI"
ATTRS{serial}=="orion-ehci.0"
ATTRS{authorized_default}=="1"
looking at parent device '/devices/platform/orion-ehci.0':
KERNELS=="orion-ehci.0"
SUBSYSTEMS=="platform"
DRIVERS=="orion-ehci"
ATTRS{modalias}=="platform:orion-ehci"
looking at parent device '/devices/platform':
KERNELS=="platform"
SUBSYSTEMS==""
DRIVERS==""
ฉันพยายามเขียนudevกฎเพื่อบังคับให้ USB stick ใช้ชื่อ/dev/usbstickแต่จนถึงตอนนี้ฉันยังไม่ประสบความสำเร็จ
ใครสามารถช่วยด้วยกฎที่ฉันต้องระบุในไฟล์กฎของฉันเพื่อรับ USB stick นี้เพื่อให้ได้ชื่อเดียวกันเสมอ?
- หรือมีวิธีที่ง่ายกว่าในการเมานท์ USB แบบอัตโนมัติที่ฉันหายไปทั้งหมดหรือไม่
UPDATE
ตกลงดังนั้นฉันมีความคืบหน้าบางอย่าง ฉันเพิ่มกฎต่อไปนี้:
SUBSYSTEMS=="scsi", ATTRS{model}=="Flash Disk ", DRIVERS=="sd", NAME="usbstick-%k" RUN+="mkdir /mnt/usbstick-%k; mount /dev/usbstick-%k /mnt/usbstick-%k"
ฉันรู้ว่านี่ยังคงต้องใช้งานในแง่ของการจัดการเพิ่ม / ลบ แต่มันเป็นเพียงการทดสอบขั้นพื้นฐานสำหรับตอนนี้
ผลของการนี้ก็คือว่าตอนนี้ฉันจัดการเพื่อให้ได้สามโหนดอุปกรณ์ใหม่ใน/devคือ/dev/usbstick-sdc, และ/dev/usbstick-sdc1usbstick-sg2
แต่สิ่งที่ฉันได้พบก็คือว่ารหัสในการเพียงบางส่วนดำเนินการทันทีและเพียงแค่ทำให้ไดเรกทอรีRUN mnt/usbstick-sdcฉันยังพบว่าไดเรกทอรีนั้นว่างอยู่เสมอดังนั้นบางสิ่งบางอย่างยังคงผิดพลาดอยู่! (แม้ว่าฉันจะก้าวหน้า)
udevกฎเพื่อสร้างโหนดอุปกรณ์สำหรับแต่ละพาร์ติชัน แต่ฉันไม่แน่ใจว่าระดับของudevadmเอาต์พุตที่จะสร้างกฎสำหรับ!
ACTION==หนึ่งKERNEL==และหนึ่งATTRS{something}==(เป็นไปได้อย่างสมบูรณ์ - นี่คือสิ่งที่ฉันใช้) นอกจากนี้ให้พิจารณาการทำงานสคริปต์เดียว instaed RUN+=ของห่วงโซ่ของคำสั่งใน
KERNEL=="sd??", NAME="%k", RUN+="mkdir /mnt/usbstick-%k; mount /dev/usbstick-%k /mnt/usbstick-%k"- แต่ไม่แน่นอนว่ามันไม่ได้ผลเช่นกัน ตอนนี้ฉันเริ่มรู้สึกท้อแท้มากขึ้นหลังจากใช้เวลาเกือบทั้งวันแค่พยายามหาวิธีใช้แท่ง USB ที่ต่อเข้ากับตัวเอง สิ่งที่ควรจะเป็นเรื่องยากจริง ๆ ? แน่นอนว่าผลลัพธ์จากudevadm test /sys/block/sdd- แน่นอน - อ่านไม่ได้ในทางปฏิบัติดังนั้นฉันจึงไม่มีทางรู้ว่าฉันจะไปไหนผิด ใครช่วยชี้ทางฉันให้ถูกทาง?
/dev/sdc1ควรจะเป็นsdd1? และคุณสามารถใช้blkidเพื่อระบุไดรฟ์ที่ไม่ซ้ำกัน (จริงๆแล้วพาร์ทิชันมันจะเปลี่ยนถ้าคุณฟอร์แมตใหม่)