Linux/Problemy z montowaniem urządzeń emulujących dysk USB

Wstęp edytuj

Obecnie standardem już stały się urządzenia podłączane do komputera przez USB, (...) Wiele z urządzeń, najczęściej aparaty fotograficzne ma opcję, że są widziane przez komputer jako dysk USB (popularne synonimy: flash-drive, pendrive, usb-key). Jednak przy montowaniiu ich w Linuksie, okazuje się że mamy problemy z ich zamontowaniem, mimo iż normalny dysk USB montowaliśmy bez problemów.

Przykład nieudanego montowania edytuj

Mam w /etc/fstab następujący wpis dla dysku USB:

/dev/sda1 /media/pendrive vfat noauto,user,exec 0 0

Dysk USB z jedną partycją FAT16 lub FAT32 (zazwyczaj jest to FAT16) montuje się bez problemów. Mam również aparat cyfrowy, który w opcjach można ustawić aby był widziany przez komputer jako:

  • aparat fotograficzny (w systemie muszę mieć zainstalowany sterownik do tego modelu aparatu)
  • lub dysk USB.

Po ustawieniu aparatu jako dysk USB (zakładam, że będzie widziany jako system plików FAT; tak jest w większości przypadków), montujemy go:

$ mount /media/pendrive
FAT: bogus logical sector size 65535
VFS: Can't find a valid FAT filesystem on dev 08:00.
mount: wrong fs type, bad option, bad superblock on /dev/sda,
       or too many mounted file systems

Wyskoczył nam błąd. Zauważ, że tylko pierwsza linijka ("FAT: ...") opisuje błąd, następne to błędy spowodowane przez ten pierwszy. Co się dzieje? Przyczyna jest dość prosta: w /etc/fstab należy zmienić

/dev/sda1

na

/dev/sda

Dlaczego taka różnica? edytuj

Na początku wyjaśnienie - przykładowy /dev/sda jest to plik urządzenia podłączonego do USB - za pośrednictwem tego pliku Linux (kernel) "widzi" nasz dysk czy aparat. Jeśli jest to typowy dysk USB, to może on być podzielony na kilka partycji - żeby móc go używać, trzeba każdą z tych partycji osobno zamontować, i będzie to odpowiednio /dev/sda1, /dev/sda2 itd. Natomiast aparat fotograficzny, który ma własne oprogramowanie i nie potrzebuje formatowania pamięci, ma tylko jedną "partycję", i nie może mieć więcej.

Jak to jest rozwiązane w praktyce?

  • w dysku USB
    • w pierwszym bloku danych (sektorze) jest zapisana informacja, ile jest partycji, i w którym miejscu każda z nich się zaczyna
    • w pierwszym sektorze każdej partycji jest informacja o tym, jaki jest system plików
  • w aparacie
    • w pierwszym sektorze jest informacja o systemie plików (bez informacji o liczbie partycji)

Czyli zamontowanie /dev/sda spowoduje że mount sprawdza 1. sektor dysku (żeby otrzymać informacje o systemie plików), natomiast /dev/sda1 - pierwszy sektor pierwszej partycji (na temat której znalazł informacje w pierwszym sektorze całego dysku).

W powyższym tekście jest mowa o aparacie fotograficznym - lecz może to być dowolne inne urządzenie emulujące dysk USB. Jeżeli pamięć aparatu fotograficznego można sformatować za pośrednictwem komputera, to zapewne będzie się zachowywał tak jak typowy flash-disk.