Thông báo cho người dùng khi họ rút phích cắm ổ USB một cách không an toàn


13

Người dùng liên tục phàn nàn về dữ liệu bị mất trên các ổ USB sau khi họ rút phích cắm mà không ngắt kết nối. Chúng tôi chạy Ubuntu 14.04 LTS trên các máy của mình. Tự động gắn được bật.

Vì tôi mệt mỏi khi phải nhớ họ thực hiện xóa an toàn trước khi rút phích cắm, tôi muốn làm cho Ubuntu hiển thị cảnh báo mỗi khi rút ổ USB gắn.

Tôi nghĩ đến việc thêm một udevquy tắc chạy notify-sendkhi gỡ bỏ trong trường hợp ổ đĩa vẫn được gắn. Làm cách nào để xác định xem ổ USB có được gắn khi gỡ bỏ không?


Vì vậy, bạn đã nói rằng tự động gắn kết được bật, nhưng sau đó bạn hỏi "làm thế nào tôi có thể xác định xem usb đã kích hoạt quy tắc udev đã được gắn chưa?" . Bây giờ, tôi nghĩ bạn có nghĩa là bạn cần xác định trạng thái của USB khi gỡ bỏ - gắn hoặc không đếm được. Cá nhân tôi sẽ tiếp cận điều này với một tập lệnh khởi động chỉ theo dõi thời gian gắn / ngắt kết nối của usb bằng df -a | grep 'sd[b-z]' lệnh. Một quy tắc udev có thể gửi ngày loại bỏ đến một bản ghi của một số loại. Nếu thời gian loại bỏ được đưa ra bởi tập lệnh khớp với quy tắc udev (ít nhất là bằng phút, với số giây có thể có độ trễ), thì usb không được gắn.
Sergiy Kolodyazhnyy

2
Đây cũng là một kịch bản mà tôi đã viết cho mục đích đăng nhập. paste.ubfox.com/11748191 Nếu bạn thích ý tưởng này, tôi có thể đăng bài này dưới dạng câu trả lời, nhưng cá nhân tôi coi hai ý kiến ​​này là một đề xuất, thay vì một giải pháp hiệu quả
Sergiy Kolodyazhnyy

Câu trả lời:


4

Tôi thích cách tiếp cận của Fabby, nhưng thật tốt khi dạy mọi người về thói quen xấu này (Họ không làm việc mọi lúc trên các máy được kiểm soát). Điều này tương tự như một tính năng OSX, như được mô tả ở đây .

Có một sự khác biệt nhỏ mà bạn có thể sử dụng để biết đó có phải là loại bỏ an toàn không:

  • Biến udev ID_PART_TABLE_TYPE=dosđược đặt cho sdxnút đĩa ( nút phân vùng KHÔNGsdxY ) trong loại bỏ không an toàn.

  • Trường hợp không được đặt trong an toàn loại bỏ

Thông báo bằng cách theo dõi các sự kiện udev:

udevadm monitor -u --environment
  • Loại bỏ an toàn

    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
    
  • Loại bỏ không an toàn

    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. Tạo quy tắc udev (thay đổi 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. Quy tắc tải lại

    sudo udevadm control --reload-rules
    

Một cách khác, bạn có thể sử dụng một tập lệnh (python) kết nối với udisksDBUS. Nó có tất cả thông tin cần thiết về nhu cầu gắn kết / ngắt kết nối, cắm / rút đĩa ...

Tham khảo / Nguồn: Gentoo Wiki: Udisks - USB_Thumb_Drive_Example


1
Trong khi tôi thích cách tiếp cận của Fabby, đây là thứ tôi đang tìm kiếm! Bây giờ tôi có kế hoạch viết một kịch bản python lắng nghe các udiskssự kiện trên DBUS và sau đó xử lý hiển thị các hộp thoại thông báo, v.v.
RenWal

8

Thật không may, đó là điều mà Micro $ oft thực sự đã hoàn toàn đúng: Loại bỏ USB ... Và bạn sẽ tiếp tục gặp vấn đề này cho đến khi bạn:

  1. Vô hiệu hóa tự động gắn

    Nếu người dùng phải gắn kết thủ công, việc đào tạo họ cũng sẽ dễ dàng hơn.

  2. Tạo quy tắc udev tắt tất cả bộ nhớ đệm trên đĩa USB ...


2
+1 - vô hiệu hóa bộ đệm giúp giảm sự cố. Miễn là họ không rút phích cắm thiết bị trong khi ghi (điều này thường làm cho đèn LED trên thiết bị sáng lên / flash) thì chúng sẽ ổn.
Nathan Osman

Được rồi, nó sẽ hoạt động tốt ở phía máy tính. Nhưng không vô hiệu hóa bộ nhớ cache hoặc cài đặt cờ đồng bộ hóa trên mount sẽ đốt cháy chip flash khá nhanh? Các ổ USB đó đều là VFAT và tôi nghe nói Linux khá tích cực trong việc cập nhật các bảng FAT - làm hao mòn các cung có chứa bảng.
RenWal

Tôi chỉ mua gậy SLC và chưa có bất kỳ cái chết nào cho tôi bất kể hệ thống tệp ... (và tôi chỉ có 2)
Fabby

@RenWal: Vì bạn chưa bao giờ chấp nhận câu trả lời trên trang web này: đừng quên nhấp vào màu xám ☑ ở bên trái của văn bản này, có nghĩa là Có, câu trả lời này là hợp lệ!
Fabby

1
FWIW, Windows vô hiệu hóa ghi bộ nhớ cache trên các ổ USB có định dạng FAT theo mặc định, vì những lý do tương tự, vì vậy tôi đoán rằng bất kỳ hao mòn nào trên ổ đĩa đều được coi là một tội ác nhỏ hơn.
thomasrutter
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.