ฉันชอบวิธีการของ Fabby แต่เป็นการดีที่จะสอนผู้คนเกี่ยวกับนิสัยที่ไม่ดีนี้ (พวกเขาไม่ได้ทำงานตลอดเวลาบนเครื่องควบคุม) นี้จะคล้ายกับคุณลักษณะ OSX ตามที่อธิบายไว้ที่นี่
มีความแตกต่างเล็ก ๆ น้อย ๆ ที่คุณอาจใช้เพื่อทราบว่าปลอดภัยหรือไม่:
สังเกตได้จากการตรวจสอบเหตุการณ์ 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
สร้างกฎ udev (เปลี่ยน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"
โหลดกฎใหม่
sudo udevadm control --reload-rules
อีกวิธีหนึ่งคุณอาจใช้สคริปต์ (หลาม) ที่เชื่อมต่อกับudisks
DBUS มันมีข้อมูลที่จำเป็นทั้งหมดที่คุณต้องการเกี่ยวกับพาร์ทิชันเมานท์ / unmount ดิสก์ปลั๊ก / ถอดปลั๊ก ...
การอ้างอิง / ที่มา: Gentoo Wiki: Udisks - USB_Thumb_Drive_Example
df -a | grep 'sd[b-z]'
คำสั่ง กฎ udev สามารถส่งวันที่ลบออกไปยังบันทึกของบางประเภท หากเวลาของการลบที่สคริปต์กำหนดให้ตรงกับกฎของ udev (อย่างน้อยเป็นนาทีโดยที่วินาทีอาจมีความล่าช้า) แสดงว่ายูเอสบีไม่ได้ถูกเชื่อมต่อ