আমি একটি প্লাগ কম্পিউটারে ডেবিয়ান স্কুইজ চালিয়ে যাচ্ছি (সুতরাং কেবল এসএসএইচ, কোনও জিইউআই নেই) এবং আমি যা করার চেষ্টা করছি তা এটি পাওয়া যাতে কোনও ইউএসবি স্টিকটি প্লাগ ইন করা হয় তা স্বয়ংক্রিয়ভাবে মাউন্ট হয়ে যায়।
আমি 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
তবে এখনও আমি সফল হতে পারি নি।
সর্বদা একই নামটি পেতে এই ইউএসবি স্টিকটি পেতে আমার নিয়ম ফাইলে আমার কী নিয়ম নির্দিষ্ট করতে হবে তা সম্পর্কে কেউ সাহায্য করতে পারেন?
- বা, আমি যে ইউএসবি স্টিকটি পুরোপুরি অনুপস্থিত তা স্বয়ংক্রিয়ভাবে চালানোর আরও সহজ কোনও উপায় আছে?
হালনাগাদ
ঠিক আছে তাই আমি কিছু অগ্রগতি করেছি। আমি নিম্নলিখিত নিয়মটি যুক্ত করেছি:
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
ড্রাইভটি অনন্যরূপে সনাক্ত করতে ব্যবহার করতে পারেন (ভাল, আসলে পার্টিশন; এটি পুনরায় ফর্ম্যাট করলে এটি পরিবর্তিত হবে)।