Ключевые слова:usb, flash, linux, hotplug, mount, (найти похожие документы)
From: http://Knoppix.ru
Date: Mon, 6 Mar 2008 14:31:37 +0000 (UTC)
Subject: Использование USB Flash в Linux
Оригинал: http://knoppix.ru/adv200504.shtml
Всё большую популярность приобретают различные Flash-накопители с
интерфейсом USB. Кроме обычных брелоков сюда относятся и mp3-плейеры.
В Linux их использовать ненамного сложнее, чем обычные дискеты. Все
USB-накопители в Linux работают через модуль usb-storage. Поэтому
перед началом работы с флэшкой надо загрузить этот модуль (в Вашем
дистрибутиве это может делаться командой service usb start, а
универсальный способ - командой modprobe загрузить usb-storage и
модуль USB-контроллера, который в зависимости от версии ядра может
называться по-разному, для контроллеров Intel это uhci-hcd в ядрах 2.6
и usb-uhci в ядрах 2.4). Кроме того, в системе должна быть установлена
программа hotplug.
Если нужные модули загружены, при подключении устройства система при
помощи hotplug найдет накопитель и ассоциирует его с файлом устройства
/dev/sda (для USB-накопителей используется эмуляция SCSI). Впрочем,
при наличии других SCSI-накопителей или по иным причинам может
использоваться /dev/sdb и т.д. При подключении в системном журнале
появляются довольно подробные записи:
kernel: usb 1-2: new full speed USB device using address 2
kernel: scsi0 : SCSI emulation for USB Mass Storage devices
kernel: Vendor: PQI Model: JoyTone U800 Rev: 1.00
kernel: Type: Direct-Access ANSI SCSI revision: 02
kernel: SCSI device sda: 502528 512-byte hdwr sectors (257 MB)
kernel: sda: assuming Write Enabled
kernel: /dev/scsi/host0/bus0/target0/lun0: p1
kernel: Attached scsi removable disk sda at scsi0, channel 0, id 0, lun 0
kernel: USB Mass Storage device found at 2
Здесь, кстати, видно, что используется устройство sda. Теперь остается
подмонтировать накопитель как обычный диск. Для этого желательно
знать, какие разделы (и сколько) имеются на флэшке. Обычно там
находится 1 раздел, занимающий всё пространство; этому разделу
соответствует устройство /dev/sda1. Поэтому можно монтировать флэшку
командой
mount /dev/sda1 /mnt/flash
Разумеется, пустой каталог /mnt/flash должен существовать. Можно (даже
желательно) добавить строчку в /etc/fstab:
/dev/sda1 /mnt/flash vfat rw,users,noauto,iocharset=koi8-r,codepage=866,sync,umask=0 0 0
Здесь опция sync запрещает кэширование записи. Ее можно убрать, но
тогда перед отключением флэшки надо обязательно размонтировать ее,
иначе кэш может быть не сброшен, что приведет к порче ФС на флэшке.
Если есть сомнения в организации разделов на флэшке, ее можно узнать
командой fdisk -l /dev/sda:
$ sudo fdisk -l /dev/sda
Disk /dev/sda: 257 MB, 257294336 bytes
16 heads, 32 sectors/track, 981 cylinders
Units = cylinders of 512 * 512 = 262144 bytes
Device Boot Start End Blocks Id System
/dev/sda1 * 1 982 251256+ 6 FAT16
Иногда бывает, что разделов на флэшке нет вообще (как на дискете),
тогда монтировать надо прямо /dev/sda.
Кстати, флэшку вполне можно форматировать командой mkfs и даже
переразбивать при помощи cfdisk icon_wink.gif В т.ч. ее можно
отформатировать в ext2 (только после этого ее нельзя будет прочитать в
Windows).
А какие есть решения для работы с несколькими флешками одновременно.
Т.е. задача состоит в том, что бы адаптивно определять какая именно флешка подключена и монтировать ее с соответствующими конфигурациями. Вообще хорошо бы, что бы это было в виде определенного API к которому можно было бы прицепить shell-скрипты на определенные события.
Скажем простая ситуация - у меня 2 флешки. На одной vfat на другой ext2. Я хочу их монтировать от имени пользователя. Если я вставляю первую, то для нее в fstab должны быть прописаны одни опции, если же вторую, то другие. Но в обоих случаях они будут в моей системе как /deb/sdb1.
Отсюда же идет такая ситуация, когда я сначала вставил первую, а потом вторую - тогда я получаю на sdb1 vfat, а на sdb2 ext2. Если же очередность будет другая, то на sdb1 будет ext2, а на sdb2 vfat.
Есть ли гибкий инструмент, позволяющий решать данную задачу?
Спасибо за добрые советы...
С некоторых пор я могу смонтировать USB-устройство командой
mount -t vfat /dev/sda1 /mnt/USB-disk
(директорию USB-dusk я создал предварительно).
Но приразгрузке система ругается:
scsi: device set offline...