USB storage devices (Русский)
В этом документе описываются способы использования различных USB накопителей в Linux. Это также касается и других устройств, таких как цифровые камеры или телефоны, которые распознаются как обычные USB накопители.
Монтирование USB устройств
Если у вас свежая система со стандартным ядром Arch и современная среда рабочего стола, USB устройство должно автоматически появляться на рабочем столе при подключении, и лезть в консоль не потребуется.
Если этого не произошло см. далее.
Автоматическое монтирование с помощью udev
См. Udev:Монтирование съёмных устройств.
Простой способ настройки автомонтирования жестких дисков для однопользовательских систем с использованием udev заключается в следующем: создается файл /etc/udev/rules.d/automount.rules
со следующим содержимым:
ACTION=="add", ENV{DEVTYPE}=="partition", RUN+="domount %N"
и исполняемый от root файл /usr/lib/udev/domount
со следующим содержимым (необходимо вставить корректные для Вашей системы значения):
#!/bin/sh #edit the following variables to suit your needs MYUID=1000 # your user uid MYGID=100 # your user gid MYLOGIN=al # your login TERM=lxterminal # your terminal emulator MYSHELL=zsh # your shell export DISPLAY=:0 # your X display TMPFILE=/run/automount.$RANDOM DIR=`cat /etc/fstab | grep -v '#' | grep $* | awk '{print $2;}'` if [ "x$DIR" = "x" ]; then MYUUID=`blkid -o value -s UUID $*` if [ "x$MYUUID" = "x" ]; then MYUUID="unknown" fi DIR=/run/media/$MYUUID fi mkdir -p /run/media mkdir -p $DIR cat > $TMPFILE << EOF #!/bin/sh echo "$* will be mounted on $DIR. " sudo /bin/mount -o uid=$MYUID,gid=$MYGID $* $DIR cd $DIR $MYSHELL cd sudo /bin/umount $DIR EOF chmod a+x $TMPFILE su $MYLOGIN -c "$TERM -t 'Terminal - $* mounted on $DIR' -e $TMPFILE" sleep 1; rm -f $TMPFILE
При подключении USB-диска происходит автомонтирование и открывается окно терминала. Чтобы размонтировать устройства, просто нажмите Ctrl + D в окне терминала. Место монтирования определяется в /etc/fstab
или, при его отсутствии, создается на основе UUID раздела.
Чтобы ваш пароль не запрашивался при команде размонтирования, добавьте (заменить на ваше имя пользователя) имя_пользователя
в /etc/sudoers
с помощью команды visudo. См. Sudo (Русский)
имя_пользователя ALL=(ALL) NOPASSWD: /bin/umount
Если терминал не появляется проверьте команду его запуска. Например, в xfce4, используется команда "Terminal -T <title> -e <script-file> .
Автомонтирование с использованием systemd
Предыдущий способ плох тем что выключает скрипт через 3 минуты, и окно с консолью завершится в любом случае. Поэтому создаем новый файл /etc/systemd/flash-mount@.service и пишем туда:
[Unit] Description=Автомонтирование съемных устройств [Service] Type=oneshot ExecStart=/usr/lib/udev/domount %I [Install] WantedBy=multi-user.target
Теперь отредактируем файл /etc/udev/rules.d/automount.rules:
ACTION=="add", ENV{DEVTYPE}=="partition", DRIVERS=="usb-storage", ENV{SYSTEMD_WANTS}="flash-mount@%N.service"
Теперь скрипт /usr/lib/udev/domount, вот улучшенная версия скрипта которая поддерживает русские символы:
#!/bin/sh MYUID=1000 # Ваш uid MYGID=100 # группа users MYLOGIN=user # ваш логин TERM=xterm # ваш эмулятор терминала MYSHELL=bash # ваш шелл export DISPLAY=:0 # Ваш X дисплей TMPFILE=/run/automount.$RANDOM DIR=`cat /etc/fstab | grep -v '#' | grep $* | awk '{print $2;}'` if [ "x$DIR" = "x" ]; then MYUUID=`blkid -o value -s UUID $*` if [ "x$MYUUID" = "x" ]; then MYUUID="unknown" fi DIR=/run/media/$MYUUID fi mkdir -p /run/media mkdir -p $DIR cat > $TMPFILE << EOF #!/bin/sh echo "$* был примонтирован в $DIR. " sudo /bin/mount -o iocharset=utf8,uid=$MYUID,gid=$MYGID $* $DIR cd $DIR $MYSHELL sudo /bin/umount -l $DIR EOF export LANG=ru_RU.UTF-8 export LC_CTYPE=ru_RU.UTF-8 export LC_NUMERIC=ru_RU.UTF-8 export LC_TIME=ru_RU.UTF-8 export LC_COLLATE=ru_RU.UTF-8 export LC_MONETARY=ru_RU.UTF-8 export LC_MESSAGES=ru_RU.UTF-8 export LC_PAPER=ru_RU.UTF-8 export LC_NAME=ru_RU.UTF-8 export LC_ADDRESS=ru_RU.UTF-8 export LC_TELEPHONE=ru_RU.UTF-8 export LC_MEASUREMENT=ru_RU.UTF-8 export LC_IDENTIFICATION=ru_RU.UTF-8 export LC_ALL= chmod a+x $TMPFILE su $MYLOGIN -c "$TERM -e $TMPFILE" sleep 1 rm -f $TMPFILE rmdir "$DIR"
Теперь применяем правила:
udevadm control --reload-rules && udevadm trigger
Монтируем флешку и проверяем!
Монтирование вручную
Где взять ядро, поддерживающее usb_storage
Если не используется самодельное (самосборное) ядро, то можно скачать одно из готовых, все имеющиеся ядра Arch Linux настроены должным образом. В случае самосборного ядра, следует убедиться, что при компиляции была включена поддержка SCSI, SCSI-Disk и usb_storage. Если установлена последняя версия udev, то можно просто подключить носитель, и система автоматически подгрузит все необходимые модули ядра. Более ранним версиям udev дополнительно потребуется наличие HotPlug. Либо то же самое можно сделать вручную:
# modprobe usb-storage # modprobe sd_mod (только для ядер без SCSI)
Опознавание устройств
Самое первое, что нужно знать об устройстве, так это его идентификатор, присвоенный ядром.
Использование системных имен (node names) ( /sd* )
Это наиболее простой способ, но присвоение имен зависит от порядка, в котором устройства были подключены. способы получения системных имён (именований по шине):
- поиск среди результатов вывода команды
dmesg
системного имени устройства, для удобства можно использовать в сочетании сgrep
:
# dmesg | egrep "sd[a-z]"
- выполнением команды:
# fdisk -l
которая отобразит все доступные таблицы разделов.
lsusb
, чтобы убедиться, что оно действительно было опознано системой.Использование UUID
Для каждого устройства существует UUID (Universally Unique Identifier — уникальный идентификатор как один из методов постоянных именований устройств), эти идентификаторы предназначены для отслеживания устройств в независимости от их системных имен, а значит расположения на шине и порядка обнаружения (например /dev/sda
).
Чтобы узнать все UUIDы, известные системе, нужно выполнить:
# blkid -o list -c /dev/null
device fs_type label mount point UUID ------------------------------------------------------------------------------------------ /dev/sda1 ext2 /boot 7f4cef7e-7ee2-489a-b759-d52ba23b692c /dev/sda2 swap (not mounted) a807fff3-e89f-46d0-ab17-9b7ad3efa7b5 /dev/sda3 ext4 / 81917291-fd1a-4ffe-b95f-61c05cfba76f /dev/sda4 ext4 /home c4c23598-19fb-4562-892b-6fb18a09c7d3 /dev/sdb1 ext4 X2 /mnt/X1 4bf265f7-da17-4575-8758-acd40885617b /dev/sdc1 ext4 X1 /mnt/X2 4bf265f7-da17-4575-8758-acd40885617b /dev/sdd1 ext4 Y2 /mnt/Y2 8a976a06-3e56-476f-b73a-ea3cad41d915 /dev/sde1 ext4 Z2 /mnt/Z2 9d35eaae-983f-4eba-abc9-434ecd4da09c /dev/sdf1 ext4 Y1 /mnt/Y1 e2ec37a9-0689-46a8-a07b-0609ce2b7ea2 /dev/sdg1 ext4 Z1 /mnt/Z1 9fa239c1-720f-42e0-8aed-39cf53a743ed /dev/sdj1 ext4 RAPT (not mounted) a9ed7ecb-96ce-40fe-92fa-e07a532ed157 /dev/sdj2 swap <swap> 20826c74-eb6d-46f8-84d8-69b933a4bf3f
Здесь можно видеть целый список дисков, видимых системой, и длинные строчки с символами. Так вот эти строчки и есть те самые uuidы.
- Теперь нужно подключить USB устройство и подождать несколько секунд . . .
- Заново выполнить
blkid -o list -c /dev/null
Появилось новое устройство и UUID? Это и есть USB накопитель
blkid
не работает так, как ожидалось (или не работает вообще), то можно заглянуть в поисках UUIDов в /dev/disk/by-uuid/
:
$ ls -lF /dev/disk/by-uuid/
Монтирование USB флэш-памяти
Для этого нужно создать папку, в которую в дальнейшем будет монтироваться флэшка:
# mkdir /mnt/usbstick
От имени суперпользователя (root)
Монтировать устройство рутом при помощи команды (только нужно заменить device_node найденным устройством, как было показано выше):
# mount device_node /mnt/usbstick
или
# mount -U UUID /mnt/usbstick
Если mount
не распознаёт формат устройства (файловой системы), то можно попробовать с ключом -t <тип файловой системы>
, а также глянуть в mount(8) для просвещения.
От имени обычного пользователя при помощи mount
Чтобы непривилегированные пользователи могли записывать данные на USB носитель, нужно прописать следующую команду:
$ sudo mount -o gid=users,fmask=113,dmask=002 /dev/sda1 /mnt/usbstick
От имени обычного пользователя посредством fstab
Для того, чтобы простой поьзователь мог спокойно монтировать USB-накопитель через fstab, нужно добавить следующую строку в файл /etc/fstab
:
/dev/sda1 /mnt/usbstick vfat user,noauto,noatime,flush 0 0
или, что ещё лучше:
UUID=E8F1-5438 /mnt/usbstick vfat user,noauto,noatime,flush 0 0
(см. описание для user и других параметров в статье main article)
/dev/sda1
должно быть заменено на имя флэшки (если оно не /dev/sda1, конечно). Если непонятно, см. Монтирование USB флэш-памяти.Все, теперь любой пользователь может монтировать флэшку при помощи:
$ mount /mnt/usbstick
И отмонтировать, используя:
$ umount /mnt/usbstick