Beri tahu pengguna saat mencabut USB thumb drive dengan tidak aman

13

Pengguna berulang kali mengeluh tentang data yang hilang pada USB thumb drive setelah mereka mencabutnya tanpa melepas. Kami menjalankan Ubuntu 14,04 LTS di mesin kami. Pemasangan otomatis diaktifkan.

Karena saya bosan mengingat mereka untuk melakukan penghapusan yang aman sebelum mencabut kabel, saya ingin membuat Ubuntu menampilkan peringatan kapan pun drive USB yang terpasang dicabut.

Saya berpikir untuk menambahkan udevaturan yang berjalan notify-sendpada penghapusan kalau-kalau drive masih terpasang. Bagaimana saya bisa menentukan apakah drive USB dipasang pada saat dilepas?

RenWal
sumber
Jadi Anda telah mengatakan bahwa pemasangan otomatis diaktifkan, tetapi kemudian Anda bertanya "bagaimana saya bisa menentukan apakah usb yang mengeluarkan aturan udev sudah terpasang?" . Sekarang, saya pikir maksud Anda, Anda perlu menentukan status USB saat melepas - terpasang atau tidak terpasang. Saya pribadi akan mendekati ini dengan skrip startup yang hanya memonitor waktu pemasangan / unmount usb dengan df -a | grep 'sd[b-z]' perintah. Aturan udev dapat mengirim tanggal penghapusan ke semacam log. Jika waktu penghapusan yang diberikan oleh skrip cocok dengan aturan udev (setidaknya beberapa menit, dengan detik mungkin ada penundaan), maka usb tidak dipasang.
Sergiy Kolodyazhnyy
2
Berikut ini juga skrip yang saya tulis untuk tujuan logging. paste.ubuntu.com/11748191 Jika Anda menyukai ide ini, saya dapat memposting ini sebagai jawaban, tetapi saya pribadi menganggap kedua komentar ini sebagai saran, daripada solusi yang berfungsi
Sergiy Kolodyazhnyy

Jawaban:

4

Saya suka pendekatan Fabby, tetapi itu baik untuk mengajar orang-orang tentang kebiasaan buruk ini (Mereka tidak bekerja sepanjang waktu pada mesin yang dikendalikan). Ini mirip dengan fitur OSX, seperti dijelaskan di sini .

Ada sedikit perbedaan yang dapat Anda gunakan untuk mengetahui apakah itu penghapusan yang aman:

  • variabel udev ID_PART_TABLE_TYPE=dosdiatur untuk sdxsimpul disk ( BUKAN simpul partisisdxY ) pada penghapusan yang tidak aman.

  • Di mana itu tidak diatur dalam penghapusan aman

Diperhatikan dengan memonitor acara udev:

udevadm monitor -u --environment
  • Hapus aman

    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
    
  • Hapus tidak aman

    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. Buat aturan udev (ubah 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. Muat ulang aturan

    sudo udevadm control --reload-rules
    

Cara lain, Anda dapat menggunakan skrip (python) yang terhubung ke udisksDBUS. Ini memiliki semua info yang diperlukan yang Anda perlukan tentang partisi mount / unmount, plug disk / cabut ...

Referensi / Sumber: Wiki Gentoo: Udisks - USB_Thumb_Drive_Example

user.dz
sumber
1
Meskipun saya menyukai pendekatan Fabby, inilah yang saya cari! Saya sekarang berencana untuk menulis skrip python yang mendengarkan udisksacara di DBUS dan kemudian menangani tampilan dialog pesan, dll.
RenWal
8

Sayangnya, itu hal yang benar-benar dilakukan oleh Micro $: Penghapusan USB ... Dan Anda akan terus mengalami masalah ini sampai Anda:

  1. Nonaktifkan pemasangan otomatis

    Jika pengguna harus memasang secara manual, itu akan lebih mudah untuk melatih mereka untuk turun juga.

  2. Buat aturan udev yang mematikan semua caching di disk USB ...

Fabby
sumber
2
+1 - menonaktifkan cache membantu mengurangi masalah. Selama mereka tidak mencabut perangkat saat menulis (yang biasanya menyebabkan LED pada perangkat menyala / flash) mereka akan baik-baik saja.
Nathan Osman
Oke, itu akan bekerja dengan baik di sisi komputer. Tapi bukankah menonaktifkan cache atau mengatur flag sync on mount membakar chip flash agak cepat? Drive USB itu semuanya VFAT dan saya dengar Linux cukup agresif memperbarui tabel FAT - membuat sektor-sektor yang berisi tabel menjadi lelah.
RenWal
Saya hanya membeli stik SLC dan belum pernah mati pada saya terlepas dari sistem file ... (dan saya hanya punya 2)
Fabby
@RenWal: Karena Anda belum pernah menerima jawaban di situs ini: jangan lupa klik abu-abu ☑ di sebelah kiri teks ini, yang berarti Ya, jawaban ini valid!
Fabby
1
FWIW, Windows menonaktifkan menulis cache pada drive USB yang diformat FAT secara default, untuk alasan yang sama, jadi saya kira setiap keausan tambahan pada drive dianggap sebagai kejahatan yang lebih rendah.
thomasrutter