मैं एक प्लग कंप्यूटर (इसलिए एसएसएच केवल, कोई जीयूआई) पर डेबियन स्क्वीज़ नहीं चला रहा हूं और जो मैं करने की कोशिश कर रहा हूं वह यह है कि जब यूएसबी स्टिक प्लग किया जाता है, तो यह स्वचालित रूप से माउंट हो जाता है।
मैंने autofs
जो किया है, वह स्थापित है जो मैं इकट्ठा करता हूं, जो कि स्वचालित रूप से संभालता है, बशर्ते यह जानता है कि डिवाइस कहां है /dev
।
समस्या यह है कि यूएसबी स्टिक हमेशा एक ही डिवाइस के नाम पर नहीं होती है। कभी-कभार /dev/sdc1
, कभी-कभी /dev/sdd1
, आदि।
मैं इसे इकट्ठा करने के लिए इकट्ठा हूं, मुझे यह udev
सुनिश्चित करने के लिए उपयोग करने की आवश्यकता है कि यूएसबी स्टिक को हमेशा एक ही नाम दिया जाए।
मुझे निम्नलिखित जानकारी मिली 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
यूएसबी स्टिक को नाम लेने के लिए मजबूर करने के लिए नियम लिखने की कोशिश कर रहा हूं, /dev/usbstick
लेकिन अभी तक मैं सफल नहीं हुआ हूं।
क्या कोई इस नियम से मदद कर सकता है कि मुझे अपने नियम फ़ाइल में निर्दिष्ट करने की आवश्यकता है कि इस USB छड़ी को हमेशा एक ही नाम प्राप्त करने के लिए क्या चाहिए?
- या, यूएसबी स्टिक को स्वचालित करने का बहुत आसान तरीका है कि मैं पूरी तरह से गायब हूं?
अपडेट करें
ठीक है, इसलिए मैंने कुछ प्रगति की है। मैंने निम्नलिखित नियम जोड़ा:
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-sdc1
और usbstick-sg2
।
हालाँकि, मैंने पाया है कि RUN
अनुभाग में कोड केवल एक बार निष्पादित होता है और बस एक निर्देशिका बनाता है mnt/usbstick-sdc
। मैंने यह भी पाया है कि निर्देशिका हमेशा खाली है, इसलिए कुछ स्पष्ट रूप से अभी भी गलत हो रहा है! (हालांकि मैं प्रगति कर रहा हूं)।
udev
प्रत्येक विभाजन के लिए डिवाइस नोड्स बनाने के लिए एक नियम का उपयोग करना चाहिए , लेकिन मुझे यकीन नहीं है कि udevadm
आउटपुट किस स्तर के लिए नियम बना रहा है!
ACTION==
, एक KERNEL==
और एक के साथ एक सरल बनाने की कोशिश करें ATTRS{something}==
(यह पूरी तरह से करने योग्य है - यह वही है जो मैं उपयोग करता हूं)। इसके अलावा, आदेशों की श्रंखला में शामिल एकल स्क्रिप्ट को चलाने पर विचार करें RUN+=
।
KERNEL=="sd??", NAME="%k", RUN+="mkdir /mnt/usbstick-%k; mount /dev/usbstick-%k /mnt/usbstick-%k"
- लेकिन नहीं, बेशक यह काम नहीं करता है। मैं अब लगभग पूरा दिन व्यतीत करने के बाद तेजी से निराश हो रहा हूँ बस काम करने की कोशिश कर रहा हूं कि कैसे एक यूएसबी स्टिक प्राप्त करने के लिए जो अपने आप को माउंट करने के लिए प्लग किया गया है। क्या चीजें वास्तव में यह मुश्किल होनी चाहिए? इसका आउटपुट udevadm test /sys/block/sdd
निश्चित रूप से - व्यावहारिक रूप से अपठनीय है, इसलिए मेरे पास यह जानने का कोई साधन नहीं है कि मैं कहां गलत हूं। क्या कोई मुझे इस पर सही दिशा में इशारा कर सकता है?
/dev/sdc1
माना जाता थाsdd1
? और आपblkid
ड्राइव को विशिष्ट रूप से पहचानने के लिए उपयोग कर सकते हैं (ठीक है, वास्तव में विभाजन; यह आपके द्वारा सुधार किए जाने पर बदल जाएगा)।