Pendrive - krótkie HOWTO
Aktualizacja: 2007.01.12

Wstęp
Z racji coraz popularniejszych pamieci USB Flash, często na forach internetowych pojawiają się pytania, jak używać ich pod Linuksem. Poniższy opis ma pomóc, głównie początkującym w używaniu tego, dosyć wygodnego nośnika informacji.

Będę wymiennie stosował termin "pendrive" i "dysk wymienny".

Wymagane sterowniki
W pierwszej kolejności podłacz pendrive'a, być może zaoszczędzisz sobie troche czasu...

Po podpięciu pendrive'a pod USB w dmesg powinny się pojawić komunikaty odnośnie nowego sprzętu (numery linii dodane przez autora):

1
usb 5-3: new high speed USB device using ehci_hcd and address 6
2
usb 5-3: configuration #1 chosen from 1 choice
3
scsi8 : SCSI emulation for USB Mass Storage devices
4
usb-storage: device found at 6
5
usb-storage: waiting for device to settle before scanning
6
  Vendor: Kingston  Model: DataTraveler 2.0  Rev: 6.16
7
  Type:   Direct-Access                      ANSI SCSI revision: 00
8
SCSI device sdb: 2004991 512-byte hdwr sectors (1027 MB)
9
sdb: Write Protect is off
10
sdb: Mode Sense: 45 00 00 08
11
sdb: assuming drive cache: write through
12
SCSI device sdb: 2004991 512-byte hdwr sectors (1027 MB)
13
sdb: Write Protect is off
14
sdb: Mode Sense: 45 00 00 08
15
sdb: assuming drive cache: write through
16
 sdb: sdb1 sdb2
17
sd 8:0:0:0: Attached scsi removable disk sdb
18
usb-storage: device scan complete

Otrzymaliśmy w zasadzie wszystkie niezbędne (i zbędne) informacje. Z najważniejszych linii:

1-2
wykrycie urządzenia przez jądro, określenie jego prędkości (hi speed - 480 Mb/s)
3
włączenie emulacji SCSI (dyski USB są widoczne w Linuksie jako dyski SCSI)
6-7
Dowiadujemy się jaki model posiadamy (przydaje się w przypadku producentów "noname")
8
widzimy rozmiar dysku (ok. 1GB)
9
blokada przed zapisem wyłączona
16
dysk widnieje jako /dev/sdb, mamy dwie partycje podstawowe sdb1 oraz sdb2, jeśli mamy penndrive prosto ze sklepu to najczęściej będzie jedna partycja
18
komunikat o zakonczeniu detekcji urządzenia

Mała dygresja (można ominąć):
Gdy w systemie mamy HAL, Udev oraz Hotplug inicjacja przebiega następująco: po podłączeniu urządzenia pod USB, hotplug stara się odnaleźć po identyfikatorze ($ACTION - informujący od podłączeniu/odłączeniu, $DEVICE - położenie w /proc/bus/usb, $PRODUCT - szczegółowa informacja o modelu) moduł, który odpowiada za dane urządzenie. Po załadowaniu modułu udev tworzy odpowiednie pliki w katalogu /dev. Dodatkowo o całym zdarzeniu jest informowany HAL, z którego z kolei korzystają programy typu Gnome Volumne Manager, do zarządzania z poziomu użytkownika.

W czasie swojego istnienia USB dorobiło się kilku standardół prędkości, dwie najważniejsze to Low Speed 1,5 Mb/s, Full Speed 12 Mb/s (oba występujące w USB 1.1 oraz 2.0), Hi Speed 480Mb/s (tylko 2.0). Niestety producenci nie zawsze informują, że mimo posiadania pendrive zgodnego z USB 2.0 nie będziemy mogli uzyskać wysokich transferów. Wynika to z szybkości fizycznego zapisu w pamięci flash, często zapis jest tak wykonywany, aby uzyskać równomierne zużycie pamięci (niestety trwałość dysków wymiennych nie jest najlepsza). Przykładowy, realny transfer na moim pendrive wynosi ~90Mb/s zapis, odczyt około 10Mb/s, co jak na USB 2.0 nie jest rewelacją. Dużo tutaj zależy od poszczególnych rozwiązań producenta. Głównym problemem jest zapis.

Do obsługi obydwu standardów mamy odpowiednio dwa moduły: 1.1 - OHCI, 2.0 - EHCI. Ten ostatni obsługuje Low/Full/Hi Speed. Aby uzyskać więcej informacji o szybkości należy podmontować /proc/bus/usb (o ile już tego nie mamy zrobione):

mount -t usbfs none /proc/bus/usb

I zajrzeć do /proc/bus/usb/devices i wyszukać  interesujące nas urządzenie (w moim przypadku pendrive):

T:  Bus=05 Lev=02 Prnt=02 Port=03 Cnt=01 Dev#=  4 Spd=480 MxCh= 0
D:  Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
P:  Vendor=08ec ProdID=0016 Rev= 2.00
S:  Manufacturer=Kingston
S:  Product=DataTraveler 2.0
S:  SerialNumber=0DF16260311398C8
C:* #Ifs= 1 Cfg#= 1 Atr=80 MxPwr= 94mA
I:  If#= 0 Alt= 0 #EPs= 2 Cls=08(stor.) Sub=06 Prot=50 Driver=usb-storage
E:  Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms

Interesującym parametrem jest Spd=480, jest to prędkość pracy (Mb/s - tutaj: Hi Speed), ponadto widzimy model i producenta (
DataTraveler 2.0, Kingston), maksymalny pobór prądu (MxPwr= 94mA), rodzaj sterownika (Driver=usb-storage - urządzenie pamięci masowej), wersja USB (Ver= 2.00).

W poszukiwaniu dodatkowych informacji odsyłam do dokumentacji jądra (linux-*/Documentation/usb/).

(Koniec dygresji)

Mamy już informację o rozmiarze i ilości partycji. Teraz warto sprawdzić, jaki typ partycji jest na nim. Zazwyczaj jest to FAT16, w moim przypadku jest trochę inaczej:

rutek:/home/maciek# fdisk -l /dev/sdb

Disk /dev/sdb: 1026 MB, 1026555392 bytes
32 heads, 62 sectors/track, 1010 cylinders
Units = cylinders of 1984 * 512 = 1015808 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1   *           1         886      878881    6  FAT16
/dev/sdb2             887        1010      123008   83  Linux

Pierwsza partycja (bootowalna) to FAT16, druga Linuksowa (u mnie ext3). Tutaj uwaga dla tych którzy lubują się w tworzeniu partycji. Windows 2000 nie radzi sobie gdy na dysku USB widzi dwie partycje w systemie FAT, dopiero w Windowsie XP rozwiązano ten problem. Wyjściem jest użycie - jak w moim przypadku - FAT oraz EXT, wtedy nie zobaczy drugiej partycji. Kolejna uwaga, Windows 2000 (nie wiem jak pozostałe) nie "trawią" FAT32 na dysku USB; wystarczy włożyć i bezpiecznie usunąc taki pendrive, a system będzie twierdził, że jest całkowicie zapełniony. Może to wybiega troche poza tematykę artykułu, jednak jak ktoś myśli o przenośności to musi o tym pamiętać. Linuks bez problemu radzi sobie z FAT32.

Niektóre dyski nie mają wydzielonej przestrzenii na partycje - zachowują się jak dyskietka - rozwiązanie dosyć popularne wśród odtwarzaczy mp3, wtedy w dmesg zobaczymy coś takiego:

sdc: assuming drive cache: write through
 sdc:

Montujemy to w systemie bez podawania numeru partycji. Jeśli wszystko do tej pory działa, to możesz przejść do rodziału "Plik /etc/fstab".

Gdy nie wykrywa...
Co jeśli system sobie nie poradził, co prawda jest możliwe, że trafiliśmy na jakiś model działający tylko pod systemami z rodziny MS Windows, ale w ciągu 4 lat użytkowania tylko raz sie z tym spotkałem (z resztą późniejsza akutalizacja systemu rozwiązała problem). Upewnij się czy masz załadowane wszystkie moduły oraz czy istnieją odpowiednie pliki w katalogu "/dev".

W wiekszości (współczesnych) dystrybucji wymagane sterowniki znajdują się już w jadrze (zwykle jako moduł). Będą potrzebne:

Sprawdzamy czy dany moduł został załadowany (na przykładzie usb-uhci):

/sbin/lsmod | grep usb-uhci

Jeśli otrzymamy coś podobnego:

usb-uhci               22960   0 (unused)
usbcore                62252   1 [usb-storage hid printer usb-uhci]

To oznacza, że moduł jest załadowany.

W przeciwnym przypadku moduł ładujemy poleceniem, jako root:

modprobe usb-uhci

Jeśli nie chcesz za każdym razem załadowywać modułów to zainstaluj sobie program hotplug (znajduje się w zdecydowaniej większości dystrybucji).

Katalog /dev
W powyższym katalogu szukamy urządzeń o nazwie sda, sda1 itd. Gdy mamy wiecej urządzeń to także sdb* itd.

Dwie pierwsze litery oznaczają dysk SCSI (Linuks widzi pendrive'y jako dyski SCSI). Trzecia litera określa kolejne urządzenie, zaś cyfra oznacza numer partycji, np:

sda1 - oznacza pierwszą (podstawową, bo liczba <=4) partycję pierwszego dysku USB
sdb5 - oznacza piątą (czy też inaczej mówiąc pierwszą  rozszerzoną) partycję drugiego dysku USB

Jeśli brakuje wpisów sda*, to wykonaj (jako root) następujące polecenia):

mknod /dev/sda b 8 0
mknod /dev/sda1 b 8 1
mknod /dev/sda2 b 8 2
mknod /dev/sda3 b 8 3
mknod /dev/sda4 b 8 4
mknod /dev/sda5 b 8 5
mknod /dev/sda6 b 8 6

Analogicznie postępujemy przy kolejnych dyskach (jeśli posiadamy) i partycjach.

Uwaga: Część dysków wymiennych nie ma partycji, wtedy urządzenie reprezentuje plik np. /dev/sda, już bez numeru partycji. W razie wątpliwości uruchom program fdisk -l /dev/sda, dla dysku sda, jak otrzymasz coś podobnego:

maciek:/home/maciek# fdisk -l /dev/sda

Disk /dev/sda: 261 MB, 261881856 bytes
9 heads, 56 sectors/track, 1014 cylinders
Units = cylinders of 504 * 512 = 258048 bytes

   Device Boot      Start         End      Blocks   Id  System
maciek:/home/maciek#

To oznacza, że nie ma potrzeby zakładania partycji na dysku (niekiedy nie jest to nawet zalecane).

W przypadku plików urządzeń i posiadania jądra z serii 2.6 polecam zainstalowanie programu udev odpowiedzialnego za pliki w katalogu /dev.

Plik /etc/fstab i uprawnienia
W powyższym pliku dodajemy wpis (pamietając aby zostawić na końcu pliku pusty wiersz - naciskając po prostu ENTER):

/dev/sda1    /mnt/pendrive_1    auto    user,noauto,iocharset=iso8859-2,codepage=852,umask=0,exec 0 0

Objaśnienia (co do ważniejszych opcji):

/dev/sda1 - oznacza naszą partycję na pendrivie, lub gdy nie ma partycji (patrz uwaga w poprzednim punkcie) wstaw /dev/sda
/mnt/pendrive_1 - katalog w którym wyświetlona zostanie zawartość partycji
auto - jądro ma samo wykryć system plików na dysku (w razie kłopotów wpisz vfat)
user - zwykły użyszkodnik ma prawo do montowania urządzienia
noauto - partycja nie będzie automatycznie montowana - zalecane
iocharset=iso8859-2 - kodowanie znaków nazw plików wyświetlanych na ekranie
codepage=852 - kodowanie znaków nazw plików zapisywanych na dysku

Tworzymy katalog /mnt/pendrie_1 nadając mu prawa dostępu dla wszyskich użytkowników (jako root):

chmod 777 /mnt/pendrive_1

Czasem jest wymagane zmiana właściciela danego katalogu:

chown -R uzytkownik:grupa /mnt/pendrive_1

Użytkowik i grupa to osoby, które mają prawo korzystać z urządzenia.

Gdy mamy pendirve'a w systemie plików EXT, to wpis w fstab może wyglądać następująco:

/dev/sdc2       /media/sdc2     ext3,ext2,vfat  users,noauto,rw,exec    0       0


Opcja "rw' oznacza prawo do zapisu i odczytu, "exec" prawo do wykonywania plików (programów, skryptów itp.) na dysku.

A co zrobić, gdy z komputera korzysta kilka osób i każda ma własne konto? Załóżmy, że mamy dwóch użytkowników o loginach: jas i malgosia. Stwórzmy dla nich grupę "pendrive" i dodajmy ich do tej grupy:

Tworzymy grupę:

rutek:/home/maciek# addgroup pendrive
Dodawanie grupy `pendrive' (GID 1005)...
Gotowe.

Zajrzyjmy do /etc/group, na końcu znajdziemy naszą grupę:

pendrive:x:1005:

Dodajemy naszych użytkowników dopisując ich (oddzielając przecinkiem):

pendrive:x:1005:jas,malgosia

Potem zmieniamy grupę:

chown -R :pendrive /mnt/pendrive_1

Oczywiście są programy pozwalające na automatyczne montowanie, ale o tym później.

Testowanie
Jako zwykły użytkownik podmontujmy  dysk poleceniem:

mount /mnt/pendrive_1

Na chwilę dioda w urządzeniu powinnna zamigać.

Skopiujmy sobie jakiś plik na pendrive'a, podobnie jak wcześniej, na chwilę dioda w urządzeniu powinnna zamigać.

Wyjdzmy z katalogu /mnt/pendrive_1 i odmontujmy go poleceniem:

umount /mnt/pendrive_1

Odłączamy pendrive'a i patrzymy czy w katalogu /mnt/pendrive_1 coś pozostało (a nie powinno).

Ponownie montujemy i patrzymy czy dane zostały zapisane. Jeśli jest OK, to odmontowujemy i na tym konfiguracja jest zakończona.

Problemy
Często na forach dyskusyjnych i na podstawie własnego doswiadczenia, wiem że czasami mogą się pojawić problemy z używaniem przenośnych dysków. Wynika to czesto z nieprawidłowej partycji plików (FAT), co ciekawe Windows poprawnie (ale niekiedy długo) odczytuje dane, ale Linuks sobie z tym nie radzi. Rozwiązaniem jest:
Sprawdzenie poprawności danych na dysku
Odmontowujemy  urządzenie i sprawdzamy (jako root, dla systemu plików FAT):

dosfsck -artvV /dev/sda1

Dla partycji /dev/sda1

Jeśli nie było błedów to powinniśmy otrzymać komunikat podobny do poniższego

maciek:/home/maciek# dosfsck -artvV /dev/sda1
dosfsck 2.10 (22 Sep 2003)
dosfsck 2.10, 22 Sep 2003, FAT32, LFN
Checking we can access the last sector of the filesystem
Boot sector contents:
System ID "mkdosfs"
Media byte 0xf8 (hard disk)
       512 bytes per logical sector
      2048 bytes per cluster
         1 reserved sector
First FAT starts at byte 512 (sector 1)
         2 FATs, 16 bit entries
     32256 bytes per FAT (= 63 sectors)
Root directory starts at byte 65024 (sector 127)
       512 root directory entries
Data area starts at byte 81408 (sector 159)
     16080 data clusters (32931840 bytes)
32 sectors/track, 2 heads
         0 hidden sectors
     64480 sectors total
Starting check/repair pass.
Checking for bad clusters.
Reclaiming unconnected clusters.
Starting verification pass.
Checking for unused clusters.
/dev/sda1: 80 files, 2996/16080 clusters

W przeciwnym razie, gdy pojawi sie pytanie dotyczące naprawienia bładów odpowiedz twierdząco.

Dla systemów plików EXT postepujemy podobnie:

rutek:/home/maciek# fsck.ext3 -f /dev/sdb2
e2fsck 1.40-WIP (14-Nov-2006)
Przebieg 1: Sprawdzanie i-węzłów, bloków i rozmiarów
Przebieg 2: Sprawdzanie struktury katalogów
Przebieg 3: Sprawdzanie łączności katalogów
Przebieg 4: Sprawdzanie liczników odwołań
Przebieg 5: Sprawdzanie sumarycznych informacji o grupach
linux: 98/30840 files (12.2% non-contiguous), 13728/122881 blocks


Ponowne formatowanie dysku

Wydajemy polecenie (jako root)

mkdosfs -F 16 /dev/sda1

Dla partycji /dev/sda1
-F 16 oznacza FAT16 (można ją zmienić na FAT32 - parametr -F 32).

Dla dysków bez partycji używamy opcji -I:

mkdosfs -I -F 16 /dev/sda

W przeciwnym przypadku otrzymamy komunikat:

maciek:/home/maciek# mkdosfs -F 16 /dev/sda
mkdosfs 2.11 (12 Mar 2005)
mkdosfs: Will not try to make filesystem on full-disk device '/dev/sda' (use -I if wanted)
maciek:/home/maciek#

W przypadku systemu plików EXT3 polecenie wygląda następująco:

mkfs.ext3 /dev/sdb2

Ponowne założenie nowej partycji (na przykładzie programu cfdisk)

Poniższy przykład obrazuje stworzenie jednej partycji głownej i logicznej w systemie plików FAT (jeśli chcesz EXT to wybierz typ partycji "83 Linux").

cfdisk /dev/sdb

Dla dysku /dev/sdb

Otrzymamy  podobny ekran:

cfdisk

Zaznaczamy uszkodzone/wszyskie partycje i po kolei je usuwamy za pomoca "Delete"

Po usunieciu wszyskich partycji otrzymamy:

cfdisk po usunieciu partycji

Następnie wybieramy New->Primary.
Wybieramy rozmiar:

cfdisk_rozmiar

Po wybraniu zaznaczamy "Beginning":

cfdisk_primary

Zaznaczamy wolną przestrzeń , wybieramy "New"->"Logical" wybieramy rozmiar (możemy wybrać domyślny, maksymalny).
W ostatecznóści otrzymamy:

cfdisk_koniec

Otrzymaliśmy dwie partycje: sdb1 i sdb5. Podświetlamy partycje i
wybieramy  "Type" - typ systemu plików. Najczęsciej będzie to 06 (FAT16) lub 0B (FAT32). Wybieramy bootowalną partycję ("Bootable"). Na koniec wybieramy "Write" i wpisujemy "yes"

Formatujemy je (patrz poprzedni podrozdział):

mkdosfs -F 16 /dev/sdb1
mkdosfs -F 16 /dev/sdb5

Ochrona danych
Problemem, o którym się zapomina jest ochrona danych na pendrive. Zdjęcia z naszych imienin nie powinny wpaść w niepowołane ręce :-) Można użyć szyfrowania całej partycji, lecz - moim zdaniem - wygodniejsze jest szyfrowanie danego katalogu. Wkorzystam tutaj narzędzie EncFS - szyfrowanego systemu plików. Do poprawnej pracy potrzebujemy program:

http://encfs.sourceforge.net/

system plików FUSE, znajduje się on w konfiguracji jądra (menuconfig) w gałęzi: File systems ->
Filesystem in Userspace support. Ponadto narzędzi fuse-utils i biblioteki libfuse. Nie będę opisywał samej instalacji, często program już jest w postaci pakietów pod daną dystrybucję, poniższy opis opiera się na dystrybucji Debiana.

Na pendrive stwórzmy katalog "wazne" i wejdźmy do niego:

[email protected]:/media/sdb1$ mkdir wazne
[email protected]:/media/sdb1$ cd wazne/

Stwórzmy podkatalog "zaszyfrowane" gdzie będą przechowywane pliki w postaci zaszyfrowanej i katalog "odszyfowane" gdzie będą już widoczne po podaniu hasła:

[email protected]:/media/sdb1/wazne$ mkdir zaszyfrowane
[email protected]:/media/sdb1/wazne$ mkdir odszyfrowane

Teraz wykonamy dwa skrypty (wszystko w katalogu "wazne") "otworz.sh", który będziemy uruchamiać aby uzyskać dostęp i skrypt "zamknij.sh" który odmontuje zasób. Zawartość plików niech będzie następująca:

otworz.sh:

#!/bin/sh
export sciezka=`pwd`
export in=$sciezka/zaszyfrowane/
export out=$sciezka/odszyfrowane/
modprobe fuse
encfs -i 5 --public $in $out

opcja "--public" pozwoli udostępnić zawartość wszystkim użytkownikom, "-i <liczba>" określa czas w minutach po jakim katalog zostanie odmontowany automatycznie, w przypadku gdy nie jest używany - tutaj 5 minut

zamknij.sh:

#!/bin/sh
export sciezka=`pwd`
export OUT=$sciezka/odszyfrowane/
sync && fusermount -u $OUT
mount | grep encfs

Nadajemy atrybuty wykonywalności tym plikom (chmod +x nazwa_pliku). Jako root uruchamiamy skrypt otworz.sh:

[email protected]:/media/sdb1/wazne$ chmod +x otworz.sh
[email protected]:/media/sdb1/wazne$ chmod +x zamknij.sh
[email protected]:/media/sdb1/wazne$ su
Password:
rutek:/media/sdb1/wazne# ./otworz.sh

Otrzymamy następujący komunikat:
Creating new encrypted volume.
Please choose from one of the following options:
 enter "x" for expert configuration mode,
 enter "p" for pre-configured paranoia mode,
 anything else, or an empty line will select standard mode.
?>

Wybierzmy standardowe opcje, naciskając ENTER:

Standard configuration selected.

Configuration finished.  The filesystem to be created has
the following properties:
Filesystem cipher: "ssl/blowfish", version 2:1:1
Filename encoding: "nameio/block", version 3:0:1
Key Size: 160 bits
Block Size: 512 bytes
Each file contains 8 byte header with unique IV data.
Filenames encoded using IV chaining mode.

Now you will need to enter a password for your filesystem.
You will need to remember this password, as there is absolutely
no recovery mechanism.  However, the password can be changed
later using encfsctl.

Nowe hasło EncFS:

tutaj podajemy hasło - w miarę skomplikowane, po czym je powtarzamy. Gdy nie pojawi się żaden błąd możemy już korzystać z szyfrowanego katalogu. Zauważmy, że w podkatalogu zaszyfrowane pojawił się pierwszy plik .encfs5:

[email protected]:/media/sdb1/wazne$ cd zaszyfrowane/
[email protected]:/media/sdb1/wazne/zaszyfrowane$ ls -la
razem 48
...
-rwxrwxrwx 1 maciek maciek   224 2006-12-29 23:01 .encfs5

Pamiętaj, do katalogu "odszyfrowane" wrzucasz pliki, zaś katalogu "zaszyfrowane" nigdy nie ruszaj!

Skopiuj coś do "odszyfrowane" (jako zwykły użytkownik) zobacz czy coś się pojawiło w "zaszyfrowane". Aby odmontować, w katalogu "wazne", będąc rootem, wywołaj skrypt "zamknij.sh":

rutek:/media/sdb1/wazne/zaszyfrowane# cd ..
rutek:/media/sdb1/wazne# ./zamknij.sh

Podkatalog "odszyfrowane" powinien już być pusty

Synchronizacja danych
Załóżmy, że potrzebujemy synchronizować wybrany katalog na pendrive z katalogiem na pulpicie. Przy częstym użytkowaniu ręczne kopiowanie może być niewygodne, szczególnie że można łatwo nadpisać pliki starszymi wersjami. Pomoncym programem jest rsync. Niech na pendrive (katalog /media/sdb1) i pulpicie istnieje katalog "work" oraz skrypt work.sh umieszczone następująco:

Katalogi:
/media/sdb1/work
~/Desktop/work

Plik work.sh:
/media/sdb1/work.sh

Zawartość skryptu work.sh:

#!/bin/sh
export sciezka=`pwd`
export KAT_1=$sciezka/work/
export KAT_2=~/Desktop/work/
export OPTIONS='-v -r -u -t'
if [ -e $KAT_1 ];then
    chmod -R 777 $KAT_1
else
    mkdir $KAT_1
fi
if [ -e $KAT_2 ];then
    chmod -R 777 $KAT_2
else
    mkdir $KAT_2
fi
rsync $OPTIONS $KAT_2 $KAT_1
sync
echo "Zaktualizowano katalog 1"
sleep 3
rsync $OPTIONS $KAT_1 $KAT_2
sync
echo "Zaktualizowano katalog 2"
sleep 3

Nadajemu atrybut wykonywalności i uruchamiamy w katalogu /media/sdb1 (gdzie zamontowaliśmy pendrive):

chmod +x work.sh
./work.sh


Zakończenie
Powyższy artykuł miał jedynie pomóc w użytkowaniu pendrive'ów. Szerzej ten temat został omówiony pod adresem:
http://www.ibiblio.org/pub/Linux/docs/HOWTO/other-formats/html_single/Flash-Memory-HOWTO.html
Hotplug:
http://linux-hotplug.sourceforge.net

Maciek Rutecki