| Создание |
| О компании | Программ | Устройств | Linux |
| Контакты | Обучение |
| Инвестиционные проекты |
LsoL |
Обслуживание | ||||||
| Продукция | Советы | |||||||
Несмотря на то, что USB флеш диски поддерживаются на уровне ядра, в некоторых популярных сборках Linux-а, у пользователей возникают проблемы с их подключением. На самом деле подключить USB диск очень просто. Следующий скрипт подключает еще не подключенный USB диск к следующей свободной точке монтирования /mnt/usb, /mnt/usb1, /mnt/usb2 ...
#!/bin/sh
#
# 1. Проверяем загружены ли драйвер USB хост контроллера и если нет
# загружаем его
#
# Драйвера хост-контроллера это ehci_hcd, uhci_hcd, ohci_hcd, isp116x_hcd,
# sl811_hcd, u132_hcd
# Достаточно подгрузить только драйвер того контроллера который физически
# используется.
# Посмотреть какой контроллер установлен в вашей системе можно командой
# lspci или через файлы /proc/pci для ядер 2.4 и /proc/bus/pci для ядер 2.6
pci=/proc/pci
if [ -r /proc/bus/pci/devices ] ; then
pci=/proc/bus/pci/devices
fi
for i in ehci uhci ohci isp116x sl811 u132 ; do
if grep -i $i $pci && ! grep ${i}_hcd /proc/modules ; then
/sbin/modprobe ${i}_hcd ;
fi
done
#
# 2. Проверяем загружены ли драйвера usbcore и usb-storage и если нет
# загружаем их. Подключаем usbfs
#
for i in usbcore usb-storage ; do
if ! grep $i /proc/modules ; then
/sbin/modprobe $i
fi
done
if ! grep usbfs /proc/filesystems ; then
mount -t usbfs none /proc/bus/usb
fi
#
# 3. Ищем не подмонтированый USB раздел.
# USB диски представляются как устройства /dev/sda, /dev/sdb, /dev/sdc и т.д.
# также представляются и Serial ATA диски. Мы предполагаем, что съемный USB
# диск добавлен последним (вероятно он воткнут недавно) по этому начинаем
# поиск с конца списка. Обычно для флеш-дисков применяются два типа
# форматирования с таблицей разделов и одним разделом или вообще без таблицы
# разделов. В принципе возможны и другие варианты, но Windows понимает
# только диски этих двух типов.
# В первом случае монтировать нужно первый (и единственный) раздел. sda1,
# sdb1, sdc1, и т.д. Во втором случае сам диск.
# Разделы обнаруженные системой отображены в /proc/partitions
# Разделы которые уже примонтированы можно увидеть в /proc/mounts или в
# /etc/mtab
#
for i in sdh1 sdh sdg1 sdg sdf1 sdf sde1 sde sdc1 sdc sdd1 sdd sdb1 sdb sda1 sda ; do
if grep $i /proc/partitions && ! grep /dev/$i /proc/mounts ; then
#
# 4. Нашли неподмонтированный раздел. Теперь ищищем cвободную точку монтирования:
# для этого просматриваем /proc/mounts
#
for mnt in usb usb1 usb2 usb3 usb4 usb5 usb6 usb7 usb8 usb9 usb10; do
if ! grep /mnt/$i /proc/mounts ; then
#
# 5. Если эта точка еще не сусуществует то создаем ее.
#
mkdir -p /mnt/$mnt
#
# 6. Пытаемся подмонтировать диск:
#
if mount -t vfat /dev/$i /mnt/$mnt -o umask=0,codepage=866,iocharset=koi8-r ; then
#
# 7. Диск успешно подмонтирован, -- выходим из скрипта.
#
echo Ok mounted at /mnt/$mnt
exit 0
fi
fi
done
fi
done
Загрузить этот скрипт вы можможете отсюда перед запуском не забудьте выставить у файла атрибут исписполняемости chmod a+x mount_flash_drive.shЕсли в вашей системе права на монирование и загрузку модулей есть только у root - пользователя (что вообще говоря правильно) скрипт нужно запускать из под root-а или с помощью команды sudo ./mount_flash_drive.sh Также обратите внимание, что для работы этого скрипта должны существовать точки псевдоустройств /dev/sda, /dev/sda1, /dev/sdb, ... Если в вашей сборке Linux-а используется udev или devfs точки псевдоустройств появятся автоматически по мере появления физических устройств или разделов. В сборках не использующих udev как правило пред-устанавливаются все возможные точки псевдоустройств, но если вдруг в вашей системе таких точек нет, вы легко можете создать их командами: su cd /dev ./MAKEDEV sda ./MAKEDEV sda1 ./MAKEDEV sdb ./MAKEDEV sdb1 ... После работы со съемным носителем не забудьте корректно отключить его. Для этого используйте команду umount /mnt/usbВам кажется, что команды это слишком утомительно? Для любителей кнопок, можно немного изменить предложенный скрипт и ярлык (ссылку) на этот файл можно поместить на рабочий стол, так каждый раз при нажатии на этот ярлык будет искаться неподмонтированное устройство, при удачном монтировании открывался файловый менеджер с содержанием вновь примонтированого диска, а при закрытии менеджера, диск будет автоматически отключаться:
#!/bin/sh
pci=/proc/pci
if [ -r /proc/bus/pci/devices ] ; then
pci=/proc/bus/pci/devices
fi
for i in ehci uhci ohci isp116x sl811 u132 ; do
if grep -i $i $pci && ! grep ${i}_hcd /proc/modules ; then
/sbin/modprobe ${i}_hcd ;
fi
done
for i in usbcore usb-storage ; do
if ! grep $i /proc/modules ; then
/sbin/modprobe $i
fi
done
if ! grep usbfs /proc/filesystems ; then
mount -t usbfs none /proc/bus/usb
fi
for i in sdf1 sdf sde1 sde sdc1 sdc sdd1 sdd sdb1 sdb sda1 sda ; do
if grep $i /proc/partitions && ! grep /dev/$i /proc/mounts ; then
for mnt in usb usb1 usb2 usb3 usb4 usb5 usb6 usb7 usb8 usb9 usb10; do
if ! grep /mnt/$i /proc/mounts ; then
mkdir -p /mnt/$mnt
if mount -t vfat /dev/$i /mnt/$mnt -o umask=0,codepage=866,iocharset=koi8-r ; then
/opt/kde/bin/konqueror /mnt/$mnt
umount /mnt/$mnt
exit 0
fi
fi
done
fi
done
.
Как уже говорилось, такой скрипт скорей всего нужно запускать из под root-а. Что бы не запускать менеджер файлов из под root-а в скрипте команду 'konqueror /mnt/$mnt' лучше запускать с sudo: sudo -u username /opt/kde/bin/konqueror /mnt/$mntгде username -- имя ппользователя-- владельца рабочего стола -- возможно использовать.$USER или $SUDO_USER, если скрипт запускается c помощью sudo. Так же можно запускать скрипт из под обычного пользователя, а перед командами modprobe, mount и umount добавить sudo, но это не хороший вариант, по тому что либо в файле sudoers нужно перечислять все разрешенные варианты запуска modprobe, либо нужно спрашивать пароль, либо придется дать пользователю возможность подгружать любые драйвера ядра что крайне не желательно т.к. напрочь рушит идиально отстроенную систему безопасности. Для использования sudo пользователь и команда должны быть добавлен в sudoers Например чтобы любой пользователь мог без пароля через sudo запускать предложенный скрипт положенный в /usr/local/bin/open_flash_drive.sh, а из скрипта root пользователь без пароля мог запустить файловый ментжер в файле sudoers должны быть записи: . ALL ALL = NOPASSWD: /usr/local/bin/open_flash_drive.sh root ALL = NOPASSWD: /opt/kde/bin/konqueror. Загрузить этот скрипт вы можете отсюда |