जब वे अनजाने में USB थंब ड्राइव को अनप्लग कर देते हैं, तो उपयोगकर्ता को अलर्ट करें


13

उपयोगकर्ताओं को बार-बार USB अंगूठे ड्राइव पर खोए हुए डेटा के बारे में शिकायत करने के बाद वे उन्हें बिना सोचे-समझे अनप्लग कर देते हैं। हम अपनी मशीनों पर Ubuntu 14.04 LTS चलाते हैं। ऑटो-माउंटिंग सक्षम है।

जैसा कि मैं उन्हें अनप्लग करने से पहले एक सुरक्षित निष्कासन करने के लिए याद करते हुए थक गया हूं, मैं उबंटू प्रदर्शन को एक चेतावनी देना चाहता हूं जब भी एक माउंटेड यूएसबी ड्राइव अनप्लग होता है।

मैंने एक udevनियम जोड़ने के बारे में सोचा notify-sendजो ड्राइव को हटाने के मामले में अभी भी चालू है। यदि यूएसबी ड्राइव को हटाने पर माउंट किया गया था तो मैं कैसे निर्धारित कर सकता हूं?


तो आपने कहा है कि ऑटो-माउंटिंग सक्षम है, लेकिन फिर आप पूछते हैं कि "मैं यह कैसे निर्धारित कर सकता हूं कि यूएसबी नियम को चलाने वाले यूएसबी को माउंट किया गया था?" । अब, मुझे लगता है कि आप का मतलब है कि आपको हटाने या घुड़सवार होने पर यूएसबी की स्थिति निर्धारित करने की आवश्यकता है। मैं इसे व्यक्तिगत रूप से एक स्टार्टअप स्क्रिप्ट के साथ संपर्क करूँगा जो केवल df -a | grep 'sd[b-z]' कमांड के साथ यूएसबी के बढ़ते / अनमाउंटिंग समय की निगरानी करता है । एक udv नियम किसी प्रकार के लॉग को हटाने की तारीख भेज सकता है। यदि स्क्रिप्ट द्वारा दिए गए निष्कासन का समय udev नियम से मेल खाता है (कम से कम मिनटों में, सेकंड के साथ विलंब हो सकता है), तो usb माउंट नहीं किया गया था।
सर्गी कोलोडियाज़नी

2
यहाँ एक स्क्रिप्ट भी है जो मैंने लॉगिंग उद्देश्यों के लिए लिखी है। paste.ubuntu.com/11748191 यदि आप इस विचार को पसंद करते हैं, तो मैं इसे एक उत्तर के रूप में पोस्ट कर सकता हूं, लेकिन मैं व्यक्तिगत रूप से इन दो टिप्पणियों को एक सुझाव मानता हूं, बजाय एक काम के समाधान के
सर्जियो कोलोडियाजनी

जवाबों:


4

मुझे फैबी का दृष्टिकोण पसंद है, लेकिन इस बुरी आदत के बारे में लोगों को सिखाना अच्छा है (वे हर समय नियंत्रित मशीनों पर काम नहीं कर रहे हैं)। यह एक OSX सुविधा के समान है, जैसा कि यहां वर्णित है

एक छोटा सा अंतर है जिसे आप यह जानने के लिए उपयोग कर सकते हैं कि क्या यह एक सुरक्षित निष्कासन था:

  • udev चर ID_PART_TABLE_TYPE=dosके लिए निर्धारित है sdxडिस्क नोड ( नहीं विभाजन नोडsdxY असुरक्षित निकालने में)।

  • जहां इसे सुरक्षित निकालने में सेट नहीं किया गया है

Udev घटनाओं की निगरानी के द्वारा सूचित:

udevadm monitor -u --environment
  • सुरक्षित निकालें

    UDEV  [8292.380554] change   /devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.0/host16/target16:0:0/16:0:0:0/block/sdb (block)
    ACTION=change
    DEVLINKS=/dev/disk/by-id/usb-ADATA_USB_Flash_Drive_8d90ec535e6663-0:0 /dev/disk/by-path/pci-0000:00:14.0-usb-0:2:1.0-scsi-0:0:0:0
    DEVNAME=/dev/sdb
    DEVPATH=/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.0/host16/target16:0:0/16:0:0:0/block/sdb
    DEVTYPE=disk
    DISK_MEDIA_CHANGE=1
    ID_BUS=usb
    ID_INSTANCE=0:0
    ID_MODEL=USB_Flash_Drive
    ID_MODEL_ENC=USB\x20Flash\x20Drive\x20
    ID_MODEL_ID=c96a
    ID_PATH=pci-0000:00:14.0-usb-0:2:1.0-scsi-0:0:0:0
    ID_PATH_TAG=pci-0000_00_14_0-usb-0_2_1_0-scsi-0_0_0_0
    ID_REVISION=0.00
    ID_SERIAL=ADATA_USB_Flash_Drive_8d90ec535e6663-0:0
    ID_SERIAL_SHORT=8d90ec535e6663
    ID_TYPE=disk
    ID_USB_DRIVER=usb-storage
    ID_USB_INTERFACES=:080650:
    ID_USB_INTERFACE_NUM=00
    ID_VENDOR=ADATA
    ID_VENDOR_ENC=ADATA\x20\x20\x20
    ID_VENDOR_ID=125f
    MAJOR=8
    MINOR=16
    SEQNUM=2989
    SUBSYSTEM=block                                                              
    TAGS=:systemd:                                                               
    USEC_INITIALIZED=554873
    
  • असुरक्षित हटाना

    UDEV  [8391.320280] remove   /devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3:1.0/host17/target17:0:0/17:0:0:0/block/sdb (block)
    ACTION=remove
    DEVLINKS=/dev/disk/by-id/usb-ADATA_USB_Flash_Drive_8d90ec535e6663-0:0 /dev/disk/by-path/pci-0000:00:14.0-usb-0:3:1.0-scsi-0:0:0:0
    DEVNAME=/dev/sdb
    DEVPATH=/devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3:1.0/host17/target17:0:0/17:0:0:0/block/sdb
    DEVTYPE=disk
    ID_BUS=usb
    ID_INSTANCE=0:0
    ID_MODEL=USB_Flash_Drive
    ID_MODEL_ENC=USB\x20Flash\x20Drive\x20
    ID_MODEL_ID=c96a
    ID_PART_TABLE_TYPE=dos
    ID_PATH=pci-0000:00:14.0-usb-0:3:1.0-scsi-0:0:0:0
    ID_PATH_TAG=pci-0000_00_14_0-usb-0_3_1_0-scsi-0_0_0_0
    ID_REVISION=0.00
    ID_SERIAL=ADATA_USB_Flash_Drive_8d90ec535e6663-0:0
    ID_SERIAL_SHORT=8d90ec535e6663
    ID_TYPE=disk
    ID_USB_DRIVER=usb-storage
    ID_USB_INTERFACES=:080650:
    ID_USB_INTERFACE_NUM=00
    ID_VENDOR=ADATA
    ID_VENDOR_ENC=ADATA\x20\x20\x20
    ID_VENDOR_ID=125f
    MAJOR=8
    MINOR=16
    SEQNUM=3022
    SUBSYSTEM=block
    TAGS=:systemd:
    USEC_INITIALIZED=436355
    

  1. एक udv नियम बनाएँ (बदलें useranme)

    $ sudo nano /etc/udev/rules.d/90-unsafe-remove-notify.rules
    
    ACTION=="remove", KERNEL=="sd?", ENV{ID_PART_TABLE_TYPE}!="", RUN+="/usr/bin/sudo -u username DISPLAY=:0 notify-send 'Unsafe Remove' '<b><i>Your long message</b></i>' -i /usr/share/icons/gnome/48x48/emotes/face-worried.png -t 10000"
    
  2. रीलोड नियम

    sudo udevadm control --reload-rules
    

दूसरा तरीका, आप एक स्क्रिप्ट (अजगर) का उपयोग कर सकते हैं जो udisksDBUS से जुड़ता है । इसमें सभी आवश्यक जानकारी है जो आपको विभाजन माउंट / अनमाउंट, डिस्क प्लग / अनप्लग के बारे में चाहिए ...

संदर्भ / स्रोत : जेंटू विकी: उडिक्स - USB_Thumb_Drive_Example


1
जबकि मुझे फैबी का दृष्टिकोण पसंद है, यह वही है जो मैं देख रहा था! मैं अब एक पायथन स्क्रिप्ट लिखने की योजना बना रहा हूं जो udisksDBUS पर घटनाओं को सुनता है और फिर संदेश संवाद आदि का प्रदर्शन संभालता है
RenWal

8

दुर्भाग्य से, यह एक चीज है माइक्रो $ टीटी वास्तव में काफी सही है: यूएसबी हटाने ... और आप इस समस्या को तब तक रखेंगे जब तक आप:

  1. स्वत: बढ़ते अक्षम करें

    यदि उपयोगकर्ताओं को मैन्युअल रूप से माउंट करना है, तो उन्हें आसान बनाने के लिए उन्हें प्रशिक्षित करना आसान होगा।

  2. USB डिस्क पर सभी कैशिंग को बंद करने वाला एक udev नियम बनाएं ...


2
+1 - कैश को अक्षम करना समस्या को कम करने में मदद करता है। जब तक वे एक लिखने के दौरान डिवाइस को अनप्लग नहीं करते हैं (जो आमतौर पर डिवाइस पर एक एलईडी को प्रकाश / फ्लैश करने का कारण बनता है) वे ठीक हो जाएंगे।
नाथन उस्मान

ठीक है, कि कंप्यूटर की तरफ अच्छा काम करेगा। लेकिन कैश को अक्षम करना या माउंट चिप पर सिंक फ़्लैग स्थापित करना फ्लैश चिप को जल्दी से बाहर नहीं जलाता है? वे USB ड्राइव सभी VFAT हैं और मैंने सुना है कि लिनक्स FAT टेबल को अपडेट करने में काफी आक्रामक है - टेबल वाले सेक्टरों को पहनना।
नवीनीकरण जू

मैं केवल एसएलसी स्टिक्स खरीदता हूं और फाइल सिस्टम की परवाह किए बिना मुझ पर कोई मर नहीं गया है ... (और मेरे पास केवल 2 हैं)
Fabby

@RenWal: जैसा कि आपने इस साइट पर कभी कोई उत्तर स्वीकार नहीं किया है: इस पाठ के बाईं ओर ग्रे ☑ पर क्लिक करना न भूलें, जिसका अर्थ है हाँ, यह उत्तर मान्य है!
फाबिन

1
FWIW, विंडोज निष्क्रिय रूप से FAT- स्वरूपित USB ड्राइव पर कैश लिखता है, उन्हीं कारणों से, इसलिए मुझे लगता है कि ड्राइव पर किसी भी अतिरिक्त पहनने को कम बुराई के रूप में देखा गया था।
थोमसट्रेटर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.