osdev.labedz.org

Urządzenia loopdevice

Praca ze stacją dyskietek wiąże się z wieloma problemami. Przede wszystkim medium te jest bardzo wolne - maksymalny transfer jaki można osiągnąć jest rzędu kilkudziesięciu KB/s, do tego dochodzi długi czas pozycjonowania głowicy między ścieżkami. Zmiany zawartości dyskietki trwają więc dość długo, co przy częstym kompilowaniu implementowanego systemu jest bardzo uciążliwe.

Kolejną wadą używania stacji dysków elastycznych jako nośnika danych podczas implementacji systemu operacyjnego, jest fakt, że dyskietka z obrazem zajmuje, zazwyczaj pojedynczy, napęd 3,5''. Najważniejszą jednak wadą stacji dyskietek, szczególnie widoczną w ostatnich latach, jest bardzo słaba jakość nośników danych - typowa dyskietka wytrzymuje obecnie zazwyczaj nie więcej niż miesiąc normalnej pracy.

Aby uniknąć ewentualnych problemów z dyskietkami, warto jest zastosować mechanizm urządzeń loopdevice, obecnie implementowany w większości systemów operacyjnych. Dzięki temu mechanizmowi możemy użyć zwykłego pliku na dysku jako obrazu odrębnego urządzenia pamięci masowej. Zaletą tego rozwiązania jest również to, że obraz taki od razu nadaje się do naniesienia na rzeczywisty nośnik danych (np. dyskietkę).

Chcąc korzystać z urządzenia loopdevice w systemie Linux należy jego obsługę wkompilować w jądro systmu. Opcja ta znajduje się w menu Device drivers -> Block Device i nazywa się Loopback device support. Po ustawieniu tej opcji i skompilowaniu jądra systemu Linux w katalogu /dev/ powinny pojawić się dodatkowe urządzenia /dev/loop0 do /dev/loop15.

Urządzenie loopdevice łączy się z obrazem dysku za pomocą polecenia losetup.

$ losetup /dev/loop0 obraz.img

Następnie tak przygotowane urządzenie możemy standardowo zamontować do systemu plików

$ mount /dev/loop0 /mnt/floppy

Tak zamontowany plik można podać jako argument dotyczący obrazu stacji dyskietek w pliku konfiguracyjnym emulatora Bochs.

Po zakończeniu pracy, oraz po każdej zmianie obrazu, należy odmontować obraz, a następnie odłączyć go od urządzenia loopback. Uwaga!!! Nie wykonanie tych czynności grozi utratą zmian dokonanych na obrazie plików!!!

$ umount /mnt/floppy $ losetup -d /dev/loop0

Wykonywanie powyższych czynności jest jednak problematyczne. Aby móc montować inne urządzenia w systemach Unix'owych najczęściej potrzebne są uprawnienia administratora systemu. Ze względu bezpieczeństwa jest to najczęściej niemożliwe. Drugim problemem jest ciągłe montowanie i odmontowywanie obrazu dyskietki, za każdym razem, kiedy były dokonywane jakiekolwiek zmiany w plikach na tym obrazie.

Najlepszym wyjściem z tej sytuacji jest dopisanie odpowiedniej linii z parametrami, do pliku systemowego /etc/fstab, co umożliwi montowanie odpowiedniego pliku określonej grupie użytkowników za pomocą pojedynczej instrukcji mount.

/home/janek/floppy.img /home/janek/img auto loop,user 0 0

Montowanie tak skonfigurowanego pliku odbywa się po wykonaniu przez użytkownika polecenia

/home/janek/$ mount floppy.img

Obraz pliku zostanie automatycznie zamontowany do katalogu określonego w pliku /etc/fstab (w tym wypadku do /home/janek/img).