Saya menjalankan Debian Squeeze pada komputer steker (jadi SSH saja, tanpa GUI) dan yang saya coba lakukan adalah mendapatkannya sehingga ketika stik USB dicolokkan, ia akan dipasang secara otomatis.
Apa yang saya lakukan adalah menginstal autofs
yang dari apa yang saya kumpulkan menangani penghitungan otomatis yang mengetahui di mana perangkat itu berada /dev
.
Masalahnya adalah bahwa stik USB tidak selalu pada nama perangkat yang sama. Kadang- /dev/sdc1
kadang /dev/sdd1
, kadang-kadang , dll.
Saya mengumpulkan bahwa untuk memperbaiki ini, saya perlu menggunakan udev
untuk memastikan bahwa stik USB selalu diberi nama yang sama.
Saya mendapat info berikut dari 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==""
Saya sudah mencoba menulis udev
aturan untuk memaksa USB stick untuk mengambil nama, /dev/usbstick
tetapi sejauh ini saya belum berhasil.
Bisakah seseorang membantu dengan aturan apa yang perlu saya tentukan dalam file aturan saya untuk mendapatkan USB stick ini untuk selalu mendapatkan nama yang sama?
- Atau, adakah cara yang lebih mudah untuk mengautomatiskan stik USB yang saya lewatkan sepenuhnya?
MEMPERBARUI
OK jadi saya telah membuat beberapa kemajuan. Saya menambahkan aturan berikut:
SUBSYSTEMS=="scsi", ATTRS{model}=="Flash Disk ", DRIVERS=="sd", NAME="usbstick-%k" RUN+="mkdir /mnt/usbstick-%k; mount /dev/usbstick-%k /mnt/usbstick-%k"
Saya tahu ini masih membutuhkan beberapa pekerjaan dalam hal menangani add / remove, tapi itu hanya tes dasar untuk saat ini.
Efek dari ini adalah bahwa saya sekarang berhasil mendapatkan tiga node perangkat baru /dev
, yaitu /dev/usbstick-sdc
, /dev/usbstick-sdc1
dan usbstick-sg2
.
Namun, apa yang saya temukan adalah bahwa kode di RUN
bagian ini hanya dijalankan sekali dan hanya membuat direktori mnt/usbstick-sdc
. Saya juga menemukan bahwa direktori selalu kosong, jadi ada sesuatu yang jelas masih salah! (Meskipun saya membuat kemajuan).
/dev/sdc1
seharusnyasdd1
? Dan Anda dapat menggunakanblkid
untuk mengidentifikasi drive secara unik (well, sebenarnya partisi; itu akan berubah jika Anda memformat ulang).udev
aturan untuk membuat perangkat node untuk setiap partisi, tapi saya tidak yakin apa tingkatudevadm
output untuk membuat aturan!ACTION==
, satuKERNEL==
dan satuATTRS{something}==
(itu benar-benar bisa dilakukan - ini yang saya gunakan). Juga, pertimbangkan untuk menjalankan skrip tunggal yang diinstal pada rantai perintah diRUN+=
.KERNEL=="sd??", NAME="%k", RUN+="mkdir /mnt/usbstick-%k; mount /dev/usbstick-%k /mnt/usbstick-%k"
- tapi tidak, tentu saja ini tidak berhasil. Saya sekarang semakin frustrasi setelah menghabiskan hampir sepanjang hari hanya berusaha mencari cara untuk mendapatkan USB stick yang terhubung ke mount itu sendiri. Haruskah hal ini benar-benar sulit? Keluaran dariudevadm test /sys/block/sdd
- tentu saja - praktis tidak bisa dibaca, jadi saya tidak punya cara untuk mengetahui di mana saya salah. Adakah yang bisa mengarahkan saya ke arah yang benar dalam hal ini?Jawaban:
Berpikir harus ada cara yang lebih mudah untuk mengatasi masalah umum seperti itu, dan ada. Inilah yang saya coba di server wheezy / sid saya:
Tancapkan usb stick, selesai! Tongkat saya sekarang dapat diakses
/media/usb
.Btw, usbmount tidak memiliki halaman manual, silakan baca
/usr/share/doc/usbmount/README.gz
saja. Tampaknya usbmount memasang tongkat Anda dengan opsi sinkronisasi secara default. Mungkin jauh lebih baik bagi tongkat Anda untuk memasang async dan menjalankansync
atauumount
sebelum mencabutnya. Itu bisa dikonfigurasi.sumber
pumount
usbmount
tidak lagi mendukung NTFS sejak debian jessie: bugs.debian.org/774149Perhatikan bahwa Anda tidak bisa hanya memiliki satu simpul perangkat untuk mewakili segala pendrive yang mungkin terpasang. Bagaimana jika Anda menyambungkan keduanya? Atau ketika pendrive memiliki lebih dari satu partisi?
Secara umum, apa yang Anda gunakan untuk membuat simpul perangkat bernama kustom, adalah
SYMLINK+=
. grep untuk itu dalam aturan untuk melihat bagaimana hal itu digunakan:grep SYMLINK /etc/udev/rules.d/*
. Seperti dalam semua perintah yang dipicu udev, Anda dapat menggunakan beberapa variabel bermakna yang dijelaskan dalamman udev
. Anda mungkin menyadari bahwa Anda tidak benar-benar perlu memberikan nama khusus ke perangkat, karena Anda dapat memasukkan namanya ke skrip (melalui%k
variabel).Adapun solusi pemasangan otomatis, lihat UAM , yang telah saya jelaskan sedikit dalam jawaban untuk pertanyaan ini .
sumber
udev
aturan yang bagus dengan skrip yang menyertainya. Anda dapat melihat aturan dan mudah menyesuaikannya dengan kebutuhan Anda.udevadm
dan memberi tahu saya perangkat mana yang merupakan perangkat yang seharusnya saya targetkan dengan aturan saya? Berbagai contoh yang saya lihat online semua tampaknya melibatkan pohon yang jauh lebih pendek dan masing-masing contoh tampaknya menargetkan tingkat perangkat yang berbeda, tanpa penjelasan tentang mana yang harus ditargetkan dan mengapa.Inilah cara saya baru-baru ini melakukannya, dan saya cukup senang dengan pendekatan ini sekarang. Ini untuk Ubuntu 12.04 + Gentoo, tapi saya kira ada distro, yang memungkinkan untuk menginstal udev dan autofs akan berfungsi.
Prasyarat: Anda harus menginstal udev + autofs.
Langkah 1)
Buat file "/etc/udev/rules.d/90-usbsd-auto.rules" berikut (tentu saja Anda dapat menggunakan nama apa pun asalkan diakhiri dengan ".rules"). :
Apa yang dilakukan ini: Ini menciptakan dua symlink, satu untuk partisi perangkat penyimpanan USB di bawah "/ dev / usbdisks / <...>".
Symlink kedua akan ditautkan dari "/ media / usb / <...>" ke "/ media / autousb / <...>" ini dilakukan untuk dukungan automounter (lihat langkah 2).
Untuk memastikan udev membaca aturan ini, gunakan
Catatan: Nama yang sama untuk stik usb yang sama: Kemungkinan tetapi mungkin berbahaya: Anda dapat menggunakan misalnya "$ env {ID_FS_LABEL_ENC}", alih-alih "% k" dalam aturan UDEV di atas. Ini akan menggunakan label volume untuk membuat / media / usb / <...>, tetapi apa yang terjadi jika Anda mencolokkan dua stik USB dan keduanya menggunakan label volume yang sama ...
Dengan file aturan udev ini, semuanya diatur untuk mengotomatisasikan partisi perangkat penyimpanan USB. Perhatikan bahwa saat ini, perangkat TIDAK akan diotomatisasi (sengaja). Ini akan diautomatisasi setelah Anda menggunakannya
Langkah 2)
Setup autofs ke automount / media / autousb / <...>: Saya menambahkan baris berikut ke file "/etc/auto.master" saya (untuk Ubuntu 12.04):
Ini berarti bahwa AutoFS akan melepas perangkat setelah 60 detik tidak aktif. Anda mungkin ingin menggunakan lebih sedikit atau lebih, tergantung selera Anda.
Untuk Gentoo Anda harus memodifikasi "/etc/autofs/auto.master" sehingga masuk akal untuk menggunakannya
Sekarang saya membuat "auto.usb" dengan konten berikut:
Auto.usb ini perlu dieksekusi, sehingga autofs menggunakan ini sebagai skrip (bash). Jadi misalnya
Apa yang dilakukan ini: Script ini akan memberi tahu AutoFS (/ usr / sbin / automount) bagaimana me-mount partisi perangkat penyimpanan usb.
Script pertama-tama akan menggunakan "/ sbin / blkid" untuk mencari tahu jenis sistem file apa yang ada di partisi.
Skrip kemudian akan memberikan opsi pemasangan kanan tergantung pada partisi perangkat.
Catatan: Saya menyertakan kode sampel untuk "vfat" (mungkin yang paling umum untuk stik usb), "ntfs" dan "ext4" sistem file. Tentu saja cukup mudah untuk memperluas ini untuk mendukung lebih banyak sistem file.
Langkah 3)
Opsional ... Untuk "mengeluarkan" == unmount stick usb Anda (atau partisi pada stick usb Anda), buat skrip di bawah / sbin / usbeject:
Dengan skrip ini, Anda dapat menggunakan "sudo usbeject" untuk meng-unmount semua partisi perangkat USB yang terpasang (dengan mengatakan automount untuk meng-unmountnya).
Tentu saja Anda cukup memastikan bahwa partisi tidak digunakan di mana pun; automounter kemudian akan melepas partisi setelah batas waktu 60 detik ...
Trik sebenarnya di sini adalah dengan menggunakan symlink dari "/ media / usb" ke "/ media / autousb":
sumber
Maaf untuk menjawab pertanyaan saya sendiri, dan terima kasih banyak karena rozcietrzewiacz untuk berkontribusi, tetapi saya akhirnya berhasil membuat beberapa kemajuan besar menggunakan aturan berikut setelah berjam-jam membaca online:
SUBSYSTEMS=="scsi", KERNEL=="sd[a-h]1", SYMLINK+="removable", RUN+="/bin/mount /dev/removable /path/to/mount"
Ini akan memasang partisi pertama perangkat SCSI apa pun. Saya kira pertanyaan selanjutnya adalah bagaimana me-mount beberapa partisi, tapi itu masalah lain untuk hari lain.
sumber
removable
atribut yang harus Anda uji, dan alih-block
alihscsi
.Saya telah menemukan bahwa jawaban terbaik sebenarnya sudah usang, karena tidak dipertahankan dan tidak bekerja pada / dari Jessie (lihat komentar oleh malat)
Bagi saya (di Jessie), solusi di blog ini bekerja seperti pesona.
Kredit untuk "ddumont", tetapi memposting ikhtisar blognya / jawab di sini, untuk mengatasi kemungkinan pembusukan tautan di masa mendatang.
Tambahkan baris berikut ke
/etc/fstab
Anda dapat melakukan ini menggunakan nano:
Penjelasan:
/dev/sr0
adalah file perangkat. Anda juga dapat menggunakan salah satu pengaturan tautan simbolik oleh udev di / dev / disk / by-id. Anda harus mengubah ini sesuai dengan file perangkat Anda (sudo fdisk -l
ke daftar perangkat)/media/bluray
adalah titik mount. Anda dapat memilih titik pemasangan lainnofail
diperlukan untuk menghindari laporan kegagalan saat booting tanpa disk di drive optikx-systemd.automount
adalah opsi untuk mengkonfigurasi systemd untuk secara otomatis me-mount disk yang dimasukkanJangan menentukan noauto: ini akan mencegah systemd untuk secara otomatis me-mount disk, yang mengalahkan tujuannya.
Uji
Jalankan perintah
journalctl -x -f
di terminal untuk memeriksa apa yang terjadi dengan systemdMuat ulang konfigurasi systemd dengan
sudo systemctl daemon-reload
.memuat disk ke drive optis Anda
Maka, journalctl harus menunjukkan sesuatu seperti:
Lebih lanjut
Untuk berhasil me-mount drive NTFS saya harus menginstal ntfs-3g (ntfsprogs lama)
Saya tidak perlu menginstal hfsprogs untuk mendapatkan usb yang diformat OSX, tetapi Anda harus memeriksanya sendiri.
sumber