USB storage devices (Русский)

From ArchWiki
Jump to: navigation, search

Ссылки по теме

Tango-preferences-desktop-locale.pngЭта страница нуждается в сопроводителеTango-preferences-desktop-locale.png

Статья не гарантирует актуальность информации. Помогите русскоязычному сообществу поддержкой подобных страниц. См. Команда переводчиков ArchWiki

В этом документе описываются способы использования различных USB накопителей в Linux. Это также касается и других устройств, таких как цифровые камеры или телефоны, которые распознаются как обычные USB накопители.

Монтирование USB устройств

Если у вас свежая система со стандартным ядром Arch и современная среда рабочего стола, USB устройство должно автоматически появляться на рабочем столе при подключении, и лезть в консоль не потребуется.

Если этого не произошло см. далее.

Автоматическое монтирование с помощью udev

См. Udev:Автомонтирование USB-устройств[broken link: invalid section]. Простой способ настройки автомонтирования жестких дисков для однопользовательских систем с использованием 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> .

Монтирование вручную

Примечание: Перед тем, как обвинить Arch Linux в том, что он не монтирует USB устройства, стоит проверить все доступные порты. Часть разъёмов могут не обслуживаться контроллером (или не подключены к контроллеру вообще, в случае портов на передней панели), и устройства физически не смогут монтироваться. Теоретически контроллер портов может оказаться выключенным; для того, чтобы это проверить, нужно зайти в BIOS и отыскать параметр с названием вроде "Onboard USB Controller" — должен быть "Enabled".

Где взять ядро, поддерживающее 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 накопитель

Tip: Если 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 <тип файловой системы>, а также глянуть в man mount для просвещения.

Примечание: Если же вообще ничего не помогло, то, возможно, нужно чинить флэшку, см. Format a device. Но перед этим имеет смысл попробовать на другом компьютере или операционной системе.
От имени обычного пользователя при помощи 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
Примечание: Извлекать флэшку, не выполнив размонтирование, опасно.