воскресенье, 14 августа 2011 г.

поработали тягачом

Ехали вчера на дачу. Ночью, часа в два. Дождь. И перед Новинкой на крутом повороте обнаружили в канаве кювета машинку и двух парней, бродящих вокруг неё. Они удачно сверзились в яму, не покарябав машину, но выехать сами не могли.
Вот и поработали первый раз в жизни тягачом, вытянув их и ямы, благо трос есть :) Зацепили за крюк под мордой и спокойно без усилий вытянул.
На следующий день, уезжая, сфоткал это место. Левее знака крутого поворота они и лежали.


среда, 10 августа 2011 г.

centos usb drive automount (udev)

Настроил тут на работе хост под торренты на centos 6. Т.к. временами к нему подключается usb-винт для скидывания информации, то захотелось настроить так, чтобы этот диск автоматически монтировался куда надо, а при выдергивании - размонтировался. Поиск в инете долго не мог дать мне искомого, поэтому запишу себе на будущее, как это делается.

Делается средствами udev, достаточно просто. Есть правило, которое реагирует на все диски /dev/sd[e-z][1-9] (потому как четыре диска sda,sdb,sdc,sdd в системе уже присутствуют). Для такого диска программой blkid загружается информация о нем (нас интересуют метка диска и файловая система), на основе метки диска задается директория, куда он будет смонтирован. На основе файловой системы формируются опции для монтирования и команда монтирования.

Дальше срабатывает команда монтирования.

При извлечении диска он отмонтируется и директория, куда он монтировался, удаляется. Все просто и понятно :)

KERNEL!="sd[e-z][1-9]", GOTO="ro_auto_mount_end"

# Import FS infos
IMPORT{program}="/sbin/blkid -o udev -p %N"

# Get a label if present, otherwise specify one
ENV{ID_FS_LABEL}!="", ENV{dir_name}="%E{ID_FS_LABEL}"
ENV{ID_FS_LABEL}=="", ENV{dir_name}="storage-%k"

# Global mount options
ACTION=="add", ENV{mount_options}="rw,noauto,user,noexec,nodev,noatime,uid=t,gid=t"

# Filesystem-specific mount options
ACTION=="add", ENV{ID_FS_TYPE}=="ntfs", ENV{mount_options}="$env{mount_options},umask=002"
ACTION=="add", ENV{ID_FS_TYPE}=="msdos", ENV{mount_options}="$env{mount_options},umask=002, quiet"
ACTION=="add", ENV{ID_FS_TYPE}=="vfat", ENV{mount_options}="$env{mount_options},umask=002,flush,quiet"
ACTION=="add", ENV{ID_FS_TYPE}=="xfs", ENV{mount_options}="norecovery,$env{mount_options}"
ACTION=="add", ENV{ID_FS_TYPE}=="jfs", ENV{mount_options}="nointegrity,$env{mount_options}"
ACTION=="add", ENV{ID_FS_TYPE}=="reiserfs", ENV{mount_options}="nolog,$env{mount_options}"

# Create the mount point
ACTION=="add", RUN+="/bin/mkdir -p /media/%E{dir_name}"

# Mount the device

# Special Mounts for ext3, ext4 and hfs

# Mount ext2 and ext3 as ext2
ACTION=="add", ENV{ID_FS_TYPE}=="ext2|ext3", RUN+="/bin/mount -t ext2 -o $env{mount_options} /dev/%k /media/%E{dir_name}", GOTO="mount_complete"

# Mount hfs and hfsplus as hfsplus
ACTION=="add", ENV{ID_FS_TYPE}=="hfs|hfsplus", RUN+="/bin/mount -t hfsplus -o $env{mount_options} /dev/%k /media/%E{dir_name}", GOTO="mount_complete"

# Execute mount with no fstype specified (auto)
ACTION=="add", RUN+="/bin/mount -o $env{mount_options} /dev/%k /media/%E{dir_name}"

# Clean up after removal
ACTION=="remove", ENV{dir_name}!="", RUN+="/bin/umount -l /media/%E{dir_name}", RUN+="/bin/rmdir /media/%E{dir_name}"

# Exit
LABEL="mount_complete"
LABEL="ro_auto_mount_end"

Я в процессе поиска решения модифицировал под себя подобный набор правил udev, все заработало, но хотелось еще красивого создания/удаления точек монтирования при условии, что диск может и не иметь метки и тогда он монтируется по имени своего устройства. И тут наткнулся на вот этот набор правил, который радостно и подогнал под себя. Где взял - уже не помню...