[OpenBSD]

[Spis treści] [Do sekcji 13 - Multimedia] [Do sekcji 15 - Pakiety i Porty]

14 - Konfiguracja dysków


Spis treści


14.1 - Program disklabel(8) w OpenBSD

Co to jest disklabel(8)?

Na początku proszę przeczytać stronę podręcznika systemowego disklabel(8).

Szczegóły konfiguracji dysków w OpenBSD różnią się pomiędzy różnymi platformami. Dla i386, amd64, macppc, zaurus, oraz armish, konfiguracja dysku następuje w dwóch etapach. Na początku określany jest "plaster" dysku przydzielony OpenBSD przy pomocy fdisk(8), później fragment ten jest dzielony na partycje OpenBSD przy pomocy disklabel(8).

Jednakże dla wszystkich platform OpenBSD, disklabel(8) jest podstawową metodą do zarządzania partycjami OpenBSD. Platformy dla których wykorzystuje się fdisk(8), umieszczają partycje disklabel(8) na jednej partycji w rozumieniu programu fdisk(8).

Etykiety przechowują pewne informacje o twoim dysku, takie jak jego geometrię, i informacje o systemach plików na danym dysku. Zawierają także informacje dotyczące samego dysku, takie jak prędkość obrotową, rozmiar przestrzeni miedzy sektorami, itd., jest tak ze względów historycznych i często dane te są niepoprawne. Nie przejmuj się tym. Dane te są wykorzystywane przez program ładowania początkowego (ang. bootstrap program) do zainicjowania dysku oraz do identyfikacji systemu plików na dysku. Więcej na ten temat można dowiedzieć się poprzez lekturę strony podręcznika systemowego disklabel(5).

Na niektórych platformach, etykiety pozwalają ominąć ograniczenia danej architektury w zakresie partycjonowania dysków. Przykładowo na maszynach i386, można mieć tylko 4 partycje podstawowe, ale z disklabel(8), na tylko jednej podstawowej partycji pomieścić można *wszystkie* partycje systemu OpenBSD (np. 'swap', '/', '/usr' i '/var'). Dzięki temu pozostałe 3 podstawowe partycje dostępne dla innych OS.

disklabel(8) podczas instalacji OpenBSD

Jedną z głównych czynności dokonywanych podczas instalacji OpenBSD jest tworzenie etykiet. Podczas instalacji używa się disklabel(8) do tworzenia partycji. Jako część procesu instalacji, możesz zdefiniować punkty montowania poprzez disklabel(8), ale możesz to zmienić później podczas instalacji lub post-instalacji.

Nie istnieje "jedyna właściwa" droga do tworzenia etykiet na dysku, istnieje jednak wiele złych dróg. Zanim przystąpisz do tworzenia etykiet na dysku, zobacz tą dyskusję o partycjonowaniu i rozmiarach partycji.

Jako przykład korzystania z disklabel(8) podczas instalacji, zobacz część dotyczącą Konfiguracji dysków w Instalacja OpenBSD.

Korzystanie z disklabel(8) po instalacji

Po instalacji, jednym z najczęstszych powodów korzystania z disklabel(8) jest sprawdzenie jak twój dysk został podzielony. Poniższe polecenie pokaże ci aktualny układ etykiet bez ich modyfikacji:

# disklabel wd0 <-- albo jakiekolwiek inne urządzenie # Inside MBR partition 3: type A6 start 63 size 29880837 # /dev/rwd0c: type: ESDI disk: ESDI/IDE disk label: Maxtor 51536H2 flags: bytes/sector: 512 sectors/track: 63 tracks/cylinder: 16 sectors/cylinder: 1008 cylinders: 16383 total sectors: 29888820 rpm: 3600 interleave: 1 trackskew: 0 cylinderskew: 0 headswitch: 0 # microseconds track-to-track seek: 0 # microseconds drivedata: 0 16 partitions: # size offset fstype [fsize bsize cpg] a: 2071440 65583 4.2BSD 1024 8192 16 # (Cyl. 65*- 2120) b: 65520 63 swap # (Cyl. 0*- 65) c: 2654064 0 unused 0 0 # (Cyl. 0 - 2632) d: 6291936 1024128 4.2BSD 2048 16384 328 # Cyl 1016 - 7257 e: 409248 7316064 4.2BSD 2048 16384 328 # Cyl 7258 - 7663 f: 1024128 9822960 4.2BSD 2048 16384 328 # Cyl 9745 - 10760 h: 2097648 7725312 4.2BSD 2048 16384 328 # Cyl 7664 - 9744

Zauważ, że dysk ten ma w tej chwili przypisaną tylko część przestrzeni dyskowej. Disklabel zapewnia dwa różne tryby edycji etykiet dyskowych, wbudowaną obsługę z wiersza poleceń, oraz pełny edytor, podobny do vi(1). Możesz stwierdzić, że obsługa z wiersza poleceń jest "łatwiejsza", ponieważ prowadzi cię poprzez wszystkie kroki i dostarcza pomoc na żądanie, ale pełnoekranowy edytor posiada również jasną użyteczność.

Dodajmy partycję do powyższego systemu.

Ostrzeżenie: Za każdym razem gdy bawisz się bezmyślnie z etykietami dysków, narażasz wszystkie swoje dane na dysku na ryzyko. Upewnij się że posiadasz kopię zapasową swoich danych zanim rozpoczniesz edycję istniejących etykiet!

Będziemy korzystać w wbudowanego edytora, wywoływanego poprzez opcję "-E" polecenia disklabel(8).

# disklabel -E wd0 ... > a k offset: [10847088] size: [19033812] 2g Rounding to nearest cylinder: 4194288 FS type: [4.2BSD] > p m device: /dev/rwd0c type: ESDI disk: ESDI/IDE disk label: Maxtor 51536H2 bytes/sector: 512 sectors/track: 63 tracks/cylinder: 16 sectors/cylinder: 1008 cylinders: 16383 total bytes: 14594.2M free bytes: 7245.9M rpm: 3600 16 partitions: # size offset fstype [fsize bsize cpg] a: 300.2M 0.0M 4.2BSD 2048 16384 328 # Cyl 0*- 609 b: 199.8M 300.2M swap # Cyl 610 - 1015 c: 14594.2M 0.0M unused 0 0 # Cyl 0 - 29651* d: 3072.2M 500.1M 4.2BSD 2048 16384 328 # Cyl 1016 - 7257 e: 199.8M 3572.3M 4.2BSD 2048 16384 328 # Cyl 7258 - 7663 f: 500.1M 4796.4M 4.2BSD 2048 16384 328 # Cyl 9745 - 10760 h: 1024.2M 3772.1M 4.2BSD 2048 16384 328 # Cyl 7664 - 9744 k: 2048.0M 5296.4M 4.2BSD 2048 16384 16 # Cyl 10761 - 14921 > q Write new label?: [y]
W tym przypadku, disklabel(8) był na tyle uprzejmy że obliczył dobrą wartość początkowego offsetu dla partycji. W wielu przypadkach, będzie mógł tak robić, lecz jeżeli posiadasz "dziury" w etykietach dysków (np. usunąłeś partycję, lub po prostu lubisz czynić swoje życie przykrym), będziesz musiał usiąść nad kartką papieru z ołówkiem o obliczyć właściwą wartość. Zwróćmy uwagę, że disklabel(8) wykonuje pewne sprawdzenia kondycji, jest bardzo możliwe że sprawy mogą pójść bardzo źle w tym punkcie. Bądź ostrożny oraz staraj się zrozumieć znaczenie liczb które wprowadzasz.

Na większości platform OpenBSD, dostępne jest szesnaście partycji disklabel, oznaczanych od "a" do "p" (niektóre "specjalizowane" systemy mogą posiadać tylko osiem). Każde etykiety dysku powinny zawierać partycję "c", z "fstype" "unused" obejmującą całą fizyczną wielkość dysku. Jeżeli twój disklabel do takich nie należy, musisz to poprawić, opcja "D" (poniżej) może być pomocna. Staraj się nigdy nie używać partycji "c" do czegokolwiek innego niż dostęp do surowych sektorów dysku, nie próbuj tworzyć systemu plików na "c". Na urządzeniu startowym, partycja "a" jest zarezerwowana na główny (root) system plików, oraz "b" jako partycję swap, ale tylko urządzenie bootujące ma takie ograniczenia. Inne dyski mogą korzystać z wszystkich piętnastu partycji innych niż "c" na systemy plików.

Sztuczki i kruczki w disklabel

14.2 - Program fdisk(8) w OpenBSD

Proszę przeczytać stronę podręcznika systemowego fdisk(8).

fdisk(8) jest używany na niektórych platformach (i386, amd64, macppc, zaurus i armish) do tworzenia partycji rozpoznawalnych przez umieszczony w pamięci ROM system bootujący, w których umieszczane są etykiety partycji OpenBSD. Inne platformy nie potrzebują lub nie korzystają z fdisk(8). Można także wykorzystać fdisk(8) do manipulacji MBR (Master Boot Record), co może mieć wpływ na każdy system operacyjny w komputerze. W przeciwieństwie do innych narzędzi fdisko-podobnych w niektórych systemach operacyjnych, fdisk w OpenBSD zakłada że wiesz co zamierzasz zrobić i, przez większość czasu, pozwala ci robić to czego potrzebujesz, tym samym stając się potężnym narzędziem w twoich rękach. Pozwoli ci także robić rzeczy których nie powinieneś robić lub których nie zamierzałeś zrobić, zatem używaj go ostrożnie.

Zazwyczaj tylko jedna partycja OpenBSD jest umieszczana na dysku twardym. Partycja ta zostanie podzielona przez narzędzie disklabel na właściwe partycje systemu plików OpenBSD.

Tablicę partycji można wyświetlić przy pomocy następującego polecenia:

# fdisk sd0

Wynik działania będzie podobny do tego przedstawionego poniżej:

Disk: sd0 geometry: 553/255/63 [8883945 Sectors] Offset: 0 Signature: 0xAA55 Starting Ending LBA Info: #: id C H S - C H S [ start: size ] ------------------------------------------------------------------------ *0: A6 3 0 1 - 552 254 63 [ 48195: 8835750 ] OpenBSD 1: 12 0 1 1 - 2 254 63 [ 63: 48132 ] Compaq Diag. 2: 00 0 0 0 - 0 0 0 [ 0: 0 ] unused 3: 00 0 0 0 - 0 0 0 [ 0: 0 ] unused

W powyższym przykładzie pokazana jest tablica partycji pierwszego dysku SCSI. Jak można zauważyć jest tam partycja OpenBSD (A6). Gwiazdka (*) przy jej opisie oznacza, że jest ona aktywna.

W poprzednim przykładnie wyświetliliśmy tylko informacje o partycjach. A co jeśli chcemy zmienić tablicę partycji? Służy do tego opcja -e - uruchomi ona program fdisk w trybie interaktywnym.

# fdisk -e wd0 Enter 'help' for information fdisk: 1> help help Command help list manual Show entire OpenBSD man page for fdisk reinit Re-initialize loaded MBR (to defaults) setpid Set the identifier of a given table entry disk Edit current drive stats edit Edit given table entry flag Flag given table entry as bootable update Update machine code in loaded MB select Select extended partition table entry MBR print Print loaded MBR partition table write Write loaded MBR to disk exit Exit edit of current MBR, without saving changes quit Quit edit of current MBR, saving current changes abort Abort program without saving current changes fdisk: 1>

Poniżej znajduje się przegląd poleceń dostępnych w momencie uruchomienia z flagą -e:

Sztuczki i kruczki w fdisk

14.3 - Dodawanie nowych dysków w OpenBSD

Programy potrzebne do PRAWIDŁOWEJ instalacji dysku w OpenBSD to fdisk(8) (tylko i386) i disklabel(8).

Na platformie i386 pracę rozpoczyna się od narzędzia fdisk(8). Posiadacze innych architektur mogą zignorować ten krok. Poniżej opisane będzie dodanie trzeciego dysku SCSI do systemu.

# fdisk -i sd2
To polecenie spowoduje inicjalizację tablicy partycji. Stworzona zostanie tylko jedna partycja, obejmująca cały dysk i przeznaczona dla OpenBSD. W następnym kroku należy utworzyć etykietę dysku. Ta czyność może wydawać się nieco zagmatwana.
# disklabel -e sd2 (screen goes blank, your $EDITOR comes up) type: SCSI ...bla... sectors/track: 63 total sectors: 6185088 ...bla... 16 partitions: # size offset fstype [fsize bsize cpg] c: 6185088 0 unused 0 0 # (Cyl. 0 - 6135) d: 1405080 63 4.2BSD 1024 8192 16 # (Cyl. 0*- 1393*) e: 4779945 1405143 4.2BSD 1024 8192 16 # (Cyl. 1393*- 6135)
Po pierwsze, nie należy zmieniać partycji 'c' - opisuje ona cały dysk i jest niezbędna do prawidłowej pracy disklabel. Łączna liczba sektorów odpowiada liczbie sektorów na dysku. Dysk ma 3 GB. Trzy gigabajty według producentów dysków to 3000 MB. Dzieląc 6185088 przez 3000 (można wspomóc się programem bc(1)) otrzymasz 2061. Aby obliczyć wielkość w sektorach dla partycji a, d, e, f, g, ... wystarczy pomnożyć żądany rozmiar w megabajtach przez 2061. Offset dla pierwszej partycji powinien być taki sam jak pokazana wcześniej wartość "sector/track". W tym przypadku będzie to 63. Przesunięcie każdej następnej partycji winno być sumą przesunięcia i rozmiaru partycji ją poprzedzającej (wyjątkiem jest etykieta 'c', która nie bierze udziału w takim wyrównywaniu).

W sytuacji gdy na dysku ma być tylko jedna partycja, np. zamierzasz używać jej do przechowywania stron WWW lub katalogów domowych użytkowników, wystarczy od całkowitego rozmiaru dysku odjąć ilość sektorów przypadających na jedną ścieżkę (w tym przypadku 63), tak więc 6185088 - 63 = 6185025. A ostateczny wygląd etykiety dysku będzie przedstawiał się następująco:

d: 6185025 63 4.2BSD 1024 8192 16
Jeśli to wszystko wydaje się zbyt skomplikowane, można użyć opcji -E programu disklabel, a uruchomi się on w takim samym trybie jak podczas instalacji systemu! W tym trybie można używać oznaczeń takich jak "96M" do określenia "96 megabajtów". (Jeśli twój dysk jest wystarczająco duży można użyć "96G" do określenia 96 gigabajtów!). Na nieszczęście tryb -E używa geometrii BIOS-u, a nie prawdziwej geometrii dysku, a w bardzo wielu przypadkach nie jest to zupełnie to samo. By ominąć to ograniczenie i używać geometrii dysku wpisz 'g d'. (Innymi opcjami są 'g b' - geometria zgodnie z BIOS-em oraz 'g u', czyli po prostu to, co "label" miał ustawione przed dokonaniem jakichkolwiek zmian przez disklabel.)

Zostało zrobione już dużo, ale to jeszcze nie koniec. Należy jeszcze utworzyć system plików na partycjach używając do tego newfs(8).

# newfs sd2a

Oczywiście parametr dla tej komendy zależny jest od tego jak dyski są nazywane i numerowane przez OpenBSD. (Spójrz na wynik działania polecenia dmesg(8) aby dowiedzieć się jak nazywają się dyski w twoim systemie.)

Teraz można już zamontować nowoutworzoną partycję. Punktem montowania będzie katalog /u. Tak więc, najpierw należy założyć katalog /u, a dopiero później zamontwać partycję.

# mount /dev/sd2a /u

Jeśli wszystko poszło sprawnie można dopisać nową partycję do /etc/fstab(5).

/dev/sd2a /u ffs rw 1 1

Jeśli chcesz przenieść istniejący katalog, jak np. /usr/local na nową partycję wystarczy zamontować nowy system plików w katalogu /mnt i użyć polecenia cpio -pdum. Zawartość /usr/local zostanie przeniesiona do /mnt. W pliku /etc/fstab(5) należy zaznaczyć, że /usr/local jest teraz na partycji /dev/sd2a.

/dev/sd2a /usr/local ffs rw 1 1

Uruchom komputer w trybie jednego użytkownika (boot -s), przenieś istniejący katalog /usr/local do /usr/local-backup (lub po prostu go skasuj, jeśli uważasz się za szczęściarza) i stwórz pusty katalog /usr/local. Uruchom komputer ponownie, i voila, pliki są na swoim miejscu!

14.4 - Plik wymiany

(Uwaga: jeśli szukasz dodatkowej przestrzeni wymiany ponieważ otrzymujesz komunikat "brak pamięci wirtualnej" (ang. "virtual memory exhausted"), powinieneś najpierw spróbować ograniczyć jej zużycie przez procesy przy pomocy poleceń csh unlimit(1), lub sh ulimit(1).)

Korzystanie z pliku wymiany nie wymaga specjalnych opcji przy kompilacji kernela. Istnieje jeszcze druga metoda, która wymaga zmian w jądrze. Ten dokument opisze oba sposoby.

Plik wymiany

Wymiana do pliku jest najprostszym i najszybszym sposobem na zdobycie dodatkowej pamięci wirtualnej. Plik, który będzie wykorzystywany do tego celu, nie może znajdować się na partycji wykorzystującej SoftUpdates (domyślnie jest to wyłączone). Zanim zaczniesz przygotowywać plik wymiany możesz zobaczyć jak dużo pamięci wirtualnej posiadasz i jak dużo jest aktualnie wykorzystywane. Służy do tego polecenie swapctl(8).

$ swapctl -l Device 512-blocks Used Avail Capacity Priority swap_device 65520 8 65512 0% 0

Powyższa komenda wyświetla wszystkie urządzenia wykorzystywane jako pamięć wirtualna oraz podstawowe statystki ich dotyczące. W tym przykładzie jest tylko jedno urządzenie nazwane &qout;swap_device" - to partycja wymiany (na etykiecie dysku oznaczona literą b). Jak można zauważyć przestrzeń wymiany nie jest wykorzystywana jednak, na potrzeby tego dokumentu, utworzymy dodatkowe 32 MB pamięci wirtualnej.

Pierwszym krokiem, niezbędnym do wykorzystania pliku jako pamięci wirtualnej jest utworzenie tego pliku. Najlepszym narzędziem do tego będzie dd(1). Oto przykład stworzenia pliku /var/swap o rozmiarze 32 MB.

$ sudo dd if=/dev/zero of=/var/swap bs=1k count=32768 32768+0 records in 32768+0 records out 33554432 bytes transferred in 20 secs (1677721 bytes/sec)

Kiedy plik będzie gotowy należy oznaczyć go jako dodatkową przestrzeń wymiany. Użyj poniższych poleceń aby dodać do systemu plik jako urządzenie pamięci wirtualnej.

$ sudo chmod 600 /var/swap $ sudo swapctl -a /var/swap

Teraz należy się upewnić czy dodatkowa pamięć wirtualna jest dostępna.

$ swapctl -l Device 512-blocks Used Avail Capacity Priority swap_device 65520 8 65512 0% 0 /var/swap 65536 0 65536 0% 0 Total 131056 8 131048 0%

Po prawidłowym utworzeniu i skonfigurowaniu pliku wymiany można umieścić odpowiedni wpis w /etc/fstab aby przy każdym starcie systemu automatycznie włączyć wykorzystanie dodatkowej pamięci wirtualnej.

$ cat /etc/fstab /dev/wd0a / ffs rw 1 1 /var/swap /var/swap swap sw 0 0

Plik wymiany poprzez urządzenie vnode

Opisana poniżej metoda jest trwałym sposobem na dodatkową pamięć wirtualną. Po pierwsze należy przygotować jądro z urządzeniem vnd0c jako plikiem wymiany. Jeśli na wd0a znajduje się główny system plików, a wd0b jest dotychczas wykorzystywaną partycją wymiany, wystarczy zmienić jedną linię w pliku konfiguracyjnym kernela, w sposób pokazany poniżej, a następnie skompilować jądro:

config bsd root on wd0a swap on wd0b and vnd0c dumps on wd0b

Po odpowiednim przygotowaniu jądra, niezbędne będzie utworzenie pliku wymiany. Posłużymy się w tym celu identycznym poleceniem jak w poprzednim przykładzie.

$ sudo dd if=/dev/zero of=/var/swap bs=1k count=32768 32768+0 records in 32768+0 records out 33554432 bytes transferred in 20 secs (1677721 bytes/sec)

Następnie należy umieścić odpowiedni wpis w pliku /etc/fstab.

$ cat /etc/fstab /dev/wd0a / ffs rw 1 1 /dev/vnd0c none swap sw 0 0

W tym momencie niezbędne jest ponowne uruchomienie komputera, tak aby wykorzystywał już nowe jądro. Po tym przychodzi czas na konfigurację urządzenia wymiany. Wykonuje się to przy pomocy narzędzia vnconfig(8).

$ sudo vnconfig -c -v vnd0 /var/swap vnd0: 33554432 bytes on /var/swap

Ostatni krok polega na włączeniu dodatkowej pamięci wirtualnej. Wykorzystamy do tego, podobnie jak w poprzednim przykładzie, polecenie swapctl(8). Po wszystkim, warto sprawdzić czy wszystko przebiegło zgodnie z naszym życzeniem.

$ sudo swapctl -a /dev/vnd0c $ swapctl -l Device 512-blocks Used Avail Capacity Priority swap_device 65520 8 65512 0% 0 /dev/vnd0c 65536 0 65536 0% 0 Total 131056 8 131048 0%

14.5 - Soft Updates

Soft Updates, w swej pierwotnej wersji, powstało na podstawie pomysłu Grega Gangera i Yale'a Patt'a, i napisane przez Kirka McKusick'a. SoftUpdates narzuca konieczność uprzedniego zamówienia operacji w buforze pamięci podręcznej co pozwala zrezygnować z kodu FFS odpowiedzialnego za synchroniczne zapisywanie wpisów katalogów. Dzięki temu daje się zauważyć bardzo duży przyrost wydajności dla operacji zapisu.

Soft Updates włączane jest podczas montowania systemów plików. Montując partycję poleceniem mount(8) należy zaznaczyć, że chcemy korzystać z Soft Updates. Poniżej znajduje się przykładowy wpis w pliku /etc/fstab(5) pokazujący użycie Soft Updates dla partycji sd0a.

/dev/sd0a / ffs rw,softdep 1 1

Uwaga dla użytkowników architektury sparc: Nie należy włączać Soft Updates na maszynach sun4 i sun4c. Pozwalają one na wykorzystanie przez jądro jedynie niewielkiej ilości pamięci, przez co nie mogą wykorzystywać Soft Updates. Problem ten nie dotyczy komputerów sun4m.

14.6 - Jak wygląda bootowanie OpenBSD?

Proces uruchamiania OpenBSD/i386 nie jest rzeczą banalną, a zrozumienie jej będzie pomocne przy rozwiązywaniu różnorakich problemów. Bootowanie OpenBSD składa się czterech głównych części.
  1. Master Boot Record (MBR): Master Boot Record jest to pierwszy fizyczny sektor (512 bajtów) dysku. Zawarta jest w nim tablica partycji oraz niewielki program który ładuje PBR (ang. Partition Boot Record). Proszę zwrócić uwagę, że w niektórych środowiskach termin "MBR" używany jest do określenia jedynie części, w której zawarty jest kod ładujący, a nie całego pierwszego bloku na dysku (włącznie z tablicą partycji). Szczególnie istotne jest zrozumienia znaczenia "inicjalizacji MBR" - co w terminologii OpenBSD oznacza nadpisanie od nowa całego sektora MBR, a nie tylko programu ładującego, jak to spotyka się w niektórych systemach operacyjnych. Nie jest to zbyt często przeprowadzana operacja. Zamiast tego częściej używa się opcji "-u" programu fdisk(8) ("fdisk -u wd0").

    Chociaż OpenBSD dostarcza własny MBR nie jest konieczne instalowanie go na dysku - generalnie dowolny MBR jest w stanie załadować OpenBSD. Do zarządzania MBR-em służy program fdisk(8), który używany jest zarówno do edycji tablicy partycji, a także do instalacji kodu MBR na dysku.

    MBR OpenBSD przy uruchomieniu wyświetla komunikat podobny do poniższego:

    Using drive 0, partition: 3.
    Określa on numer dysku oraz partycji z której zostanie załadowany PBR. Rzeczą, która rzuca się w oczy jest kropka na końcu powyższej linijki (".") - oznacza ona, że maszyna umożliwia bootowanie w trybie LBA. W przypadku, gdy sprzęt nie pozwala na używanie translacji LBA, znak kropki zostanie zastąpiony średnikiem (";"), który oznacza translację CHS:
    Using Drive 0, Partition 3;
    Proszę zauważyć, że ostatni znak w postaci kropki lub przecinka został wprowadzony w "nowym" MBR, dostępnym od wersji OpenBSD 3.5.
  2. Partition Boot Record (PBR): Partition Boot Record w skrócie PBR, nazywany także biosboot(8) (od kiedy plik o tej nazwie przechowuje program ładujący) jest to pierwszy fizyczny sektor na partycji OpenBSD na dysku. PBR to "program ładujący pierwszego poziomu". Sam PBR wczytywany jest do pamięci przez kod znajdujący się w MBR, a jego zadaniem jest uruchomienie programu ładującego drugiego poziomu - boot(8). Podobnie jak MBR, PBR jest bardzo małym programem: kod i dane to nie więcej jak 512 bajtów. Ta ilość nie wystarczy do stworzenia aplikacji obsługującej system plików, tak więc PBR zamiast przeszukiwać dysk w poszukiwaniu /boot, dostępne z poziomu BIOS-u komputera położenie /boot jest fizycznie zakodowane w PBR podczas instalacji.

    Instalacja PBR odbywa się przy pomocy programu installboot, który szczegółowo opisany jest w dalszej części tego dokumentu. Podczas uruchamiania PBR wyświetla komunikat podobny do poniższego:

    Loading...
    wypisując na ekranie kropkę wraz z każdym odczytanym sektorem. Podobnie jak w przypadku MBR, PBR zaznacza czy używa translacji LBA czy CHS. W przypadku wykorzystania CHS, do powyższego komunikatu dołączony jest średnik:
    Loading;...
    Poprzednie wersje (sprzed OpenBSD 3.5) wyświetlają komunikat "reading boot...".
  3. Program Ładujący Drugiego Poziomu (ang. Second Stage Boot Loader) /boot: /boot jest ładowany przez PBR, a jego zadaniem jest uzyskanie dostępu do systemu plików OpenBSD, a następnie odszukanie i załadowanie jądra do pamięci. Dzięki boot(8) możliwe jest także przekazanie różnych opcji i informacji do kernela.

    boot(8) jest programem interaktywnym. Po załadowaniu przystępuje on do odczytania swojego pliku konfiguracyjnego /etc/boot.conf i wykonania zawartych w nim poleceń (domyślna instalacja OpenBSD nie tworzy jednak takiego pliku). Jeśli brak pliku /etc/boot.conf lub zawarte w nim polecenia nie załadują jądra OpenBSD, przed użytkownikiem ukaże się znak zachęty:

    probing: pc0 com0 com1 apm mem[636k 190M a20=on] disk: fd0 hd0+ >> OpenBSD/i386 BOOT 2.10 boot>
    W tym momencie użytkownik ma (w domyślnej instalacji) pięć sekund aby wydać polecenie inne polecenie, jeśli tego nie zrobi, boot(8) załaduje jądro nazwane bsd znajdujące się na głównej partycji pierwszego dysku twardego. Program ładujący drugiego poziomu rozpoznaje sprzęt zainstalowany w komputerze na podstawie danych odczytanych z BIOS-u (jako, że jądro OpenBSD nie jest jeszcze załadowane). Powyżej można zobaczyć, że boot(8) odnalazł: Znak '+' po "hd0" oznacza, że BIOS przekazał do /boot, że dostęp do dysku odbywa się w trybie LBA. Podczas pierwszej instalacji OpenBSD, można zauważyć znak '*' po symbolu dysku twardego - oznacza to, że na tym dysku nie znaleziono poprawnej etykiety dysku.
  4. Jądro: /bsd: celem bootowania jest załadowanie jądra OpenBSD do pamięci i poprawne uruchomienie go. W momencie gdy jądro znajdzie się w pamięci komputera OpenBSD zaczyna komunikować się bezpośrednio ze sprzętem bez pomocy BIOS-u.
Poniższy przykład przedstawia najczęstszy przebieg bootowania OpenBSD:
Using drive 0, partition: 3. <- MBR Loading.... <- PBR probing: pc0 com0 com1 apm mem[636k 190M a20=on] <- /boot disk: fd0 hd0+ >> OpenBSD/i386 BOOT 2.10 boot> booting hd0a:/bsd 4464500+838332 [58+204240+181750]=0x56cfd0 entry point at 0x100120 [ using 386464 bytes of bsd ELF symbol table ] Copyright (c) 1982, 1986, 1989, 1991, 1993 <- Kernel The Regents of the University of California. All rights reserved. Copyright (c) 1995-2007 OpenBSD. All rights reserved. http://www.OpenBSD.org OpenBSD 4.2 (GENERIC) #375: Tue Aug 28 10:38:44 MDT 2007 deraadt@i386.openbsd.org:/usr/src/sys/arch/i386/compile/GENERIC ...

Jakie przeszkody można napotkać podczas bootowania OpenBSD/i386?

Jako że PBR jest bardzo mały, tak i komunikaty o błędach są bardzo lakoniczne i trochę tajemnicze: Inne komunikaty błędów zostały opisane na stronie manuala biosboot(8). Bardziej szczegółowe informacje dotyczące procesu ładowania OpenBSD/i386 można znaleźć w poniższych dokumentach:

14.7 - O czym należy wiedzieć używając dużych dysków w OpenBSD?

OpenBSD obsługuje do 231-1 (czyli 2,147,483,647) sektorów, a ponieważ jeden sektor to 512 bajtów, otrzymamy odrobinę mniej niż 1T.

Istnieje wprawdzie limit 1T na fizyczny rozmiar dysku, aczkolwiek w *pewnych* warunkach nie powinno być problemów aż do 2T, nie jest to jednak gwarantowane.

Oczywiście możliwości systemu plików i możliwości sprzętu to dwie różne sprawy. Nowy, 250GB dysk IDE może mieć problemy z pracą na starym (obsługującym napędy >137 GB) kontrolerze. Podobne problemy mogą dotyczyć adapterów SCSI, czasem także niektóre starsze BIOS-y mogą odmówić współpracy z nowymi dużymi dyskami.

Ograniczenia pojemności i rozmieszczenia partycji

Na nieszczęście wszystkie możliwości danego OS nie są dostępne zanim zostanie on załadowany do pamięci. Podczas bootowania wykorzystywany jest BIOS komputara i co za tym idzie ograniczenia BIOS-u.

Z tej właśnie przyczyny, cały plik /bsd (czyli jądro) musi znajdować się wewnątrz obszaru, który jest dostępny dla procedur bootujących z BIOS-u. Oznacza to, że niektóre stare komputer i386, muszą posiadać główną partycję znajdującą się w pierwszych 504 MB, ale nowsze maszyny mogą mieć limit 2G, 8G, 32G, 128G lub więcej. Warto zauważyć, że nowe komputery, które umożliwiają używanie dysków większych niż 128G, posiadają ograniczenie uniemożliwiające bootowanie powyżej tej granicy. Jeśli używasz takiech systemów zmuszony będziesz umieścić główną partycję we wnętrzu pierwszych 128G.

Zauważ, że możliwe jest zainstalowanie 40 GB dysku i załadowanie OpenBSD z jednej wielkiej partycji na starej maszynie i486. Możesz pomyśleć, że udało się pomyślnie złamać opisane powyżej ograniczenia. Jednak dość szybko prawda może wyjść na jaw i to w całkiem nieprzyjemny sposób:

Dlaczego? Nawet jeśli stary plik /bsd został zastąpiony nowym, jego nowa wersja nie znajduje się dokładnie w tym samym miejscu co poprzednik. Najprawdopodobniej gdzieś powyżej granicy 504 MB obsługiwanej przez BIOS. Program ładujący nie jest w stanie odczytać pliku jądra i system zatrzymuje się.

Proces bootowania OpenBSD wymaga, aby programy ładujące (biosboot(8) i /boot w przypadku i386) oraz jądro (/bsd) znajdowały się w obszarze, który jest obsługiwany przez BIOS. Można to rozwiązać w bardzo prosty sposób:

Cała partycja '/' musi znajdować się wewnątrz obszaru, który jest dostępny dla BIOS-u (lub boot ROM-u) komputera.

Niektóre platformy inne niż i386 mogą zdawać się być odporne na tego typu problemy, jednak i one posiadają ograniczenia wynikające z ograniczeń boot ROM-ów. Jednak dokładne określenie tych limitów może być nieco kłopotliwe.

Opisane wyżej problemy są jeszcze jednym dobrym powodem, aby podzielić dysk na partycje, zamiast używać jednej dużej partycji.

Wymagania odnoście pamięci i czasu dla fsck(8)

Problemem, który wymaga omówienia, a dotyczy dużych systemów plików, jest ilość pamięci i czasu niezbędnego do sprawdzenia go programem fsck(8) po zawieszeniu się systemu lub przerwy w dopływie prądu. Nie można zainstalować OpenBSD na 120G systemie plików w maszynie wyposażonej w 32M pamięci RAM, a następnie oczekiwać pomyślnego uruchomienia fsck(8) po załamaniu się systemu. Dobrą zasadą jest założenie, że komputer powinien posiadać przynajmniej 1M pamięci RAM na każdy 1G przestrzeni dyskowej do poprawnego sprawdzenia systemu plików. Można użyć pamięci swap, jednak zostanie to okupione znacznym spadkiem wydajności i uciążliwość taka jest często nieakceptowalna, oczywiście poza kilkoma wyjątkami. Wraz ze wzrostem rozmiaru partycji zwiększa się także czas niezbędny do uruchomienia fsck, jednak sprawdzenie fsck należy wykonać tylko dla przestrzeni dyskowej przydzielonej do zamontowanych systemów plików. Pamiętaj, że w sytuacji gdy posiadasz kilka dysków w systemie, wszystkie powinny być sprawdzone fsck(8) w tym samym czasie i może to wymagać więcej pamięci RAM niż dla pojedynczego dysku.

14.8 - Instalacja bootbloku - tylko i386/amd64

Współczesne wersje OpenBSD (3.5 i późniejsze) mają bardzo rozbudowanego "programu ładującego" ("boot loader"), który jest znacznie bardziej niezależny od geometrii dysków niż poprzednie wersje, tym nie mniej są one wrażliwe na polożenie pliku /boot na dysku. Jeśli zrobisz coś co spowoduje przeniesienie boot(8) na inne miejsce na dysku (czyli do nowego inode-a), "zepsujesz" swój system uniemożliwiając jego poprawne uruchomienie. W takich sytuacjach konieczne będzie uaktalnienie bootbloku aby umożliwić ponowny start systemu. Należy posłużyć się dyskietką bootującą (lub płytą CD) i przy znaku zachęty programu ładującego napisać: "b hd0a:/bsd", by wymusić start z pierwszego dysku twardego, a nie dyskietki. OpenBSD powinno uruchomić się w normalny sposób. Teraz musisz przeinstalować program ładujący pierwszego poziomu (biosboot(8)) w oparciu o położenie pliku /boot, korzystając z programu installboot(8).

Poniższy przykład zakłada, że dyskiem startowym będzie sd0 (jeśli posiadasz interfejs IDE będzie to wd0, itd.):

# cd /usr/mdec; ./installboot /boot biosboot sd0

Jeśli potrzebujesz nowszej wersji bootbloku, możesz ją samodzielnie skompilować. To bardzo proste:

# cd /sys/arch/i386/stand/ # make && make install # cd /usr/mdec; cp ./boot /boot # ./installboot /boot biosboot sd0 (lub jakiekolwiek inne urządzenie)

14.9 - Zapobieganie katastrofie: archiwizowanie i odtwarzanie z taśmy

Wstęp:

Jeśli uruchomiłeś właśnie maszynę wykorzystywaną jako serwer produkcyjny zalecane jest posiadanie kopii bezpieczeństwa na wypadek, gdyby któryś z dysków zawiódł.

Poniższe informacje pomogą zaznajomić Czytelnika z programami dump(8)/restore(8), znajdującymi się w standartowej instalacji OpenBSD. Bardziej zaawansowane narzędzie do robienia kopii zapasowych, "Amanda" dostępne w kolekcji pakietów, pozwala także archiwizować dane z wielu serwerów na jednej taśmie. W większości przypadków, narzędzia dump(8)/restore(8) wystarczą. Jednak, jak już zostało wcześniej napisane, jeśli chcesz zarchiwizować dane z kilku, Amanda może być godna uwagi.

Urządzenia opisane w tym dokumencie, zarówno dyski jak i streamery, to urządzenia wykorzystujące interfejs SCSI. W środowisku produkcyjnym, zaleca się raczej użycie dysków SCSI niż IDE. Wynika to ze sposobu w jaki oba interfejsy radzą sobie z uszkodzonymi sektorami. Nie znaczy to jednak, że informacje tutaj zawarte są bezużyteczne jeśli wykorzystujesz dyski IDE lub taśmy innego rodzaju, po prostu urządzenia będą nosiły troszkę inne nazwy. Na przykład odpowiednikiem sd0a w przypadku IDE będzie wd0a.

Archiwizowanie danych na taśmę

Aby zarchiwizować dane na taśmę, należy najpierw sprawdzić, gdzie są podmontowane systemy plików. Można się tego dowiedzieć używając z poziomu konsoli polecenia mount(8) Wynik powinien wyglądać mniej więcej tak:

# mount /dev/sd0a on / type ffs (local) /dev/sd0h on /usr type ffs (local)

W naszym przypadku, partycja root (/), istnieje fizycznie na sd0a, co oznacza dysk twardy SCSI nr 0, partycję a. System plików /usr jest na sd0h, czyli na dysku twardym SCSI nr 0, na partycji h.

Inny, bardziej zaawansowany przykład:

# mount /dev/sd0a on / type ffs (local) /dev/sd0d on /var type ffs (local) /dev/sd0e on /home type ffs (local) /dev/sd0h on /usr type ffs (local)

W tym przykładzie, system plików root (/), rezyduje na sd0a, /var na sd0d, /home na sd0e zaś /usr na sd0h.

Aby zarchiwizować swoje dane, należy podać programowi dump nazwę każdej partycji twardego dysku. Oto, jak należałoby zarchiwizować maszynę z naszego pierwszego, prostszego przykładu:

# /sbin/dump -0au -f /dev/nrst0 /dev/rsd0a # /sbin/dump -0au -f /dev/nrst0 /dev/rsd0h # mt -f /dev/rst0 rewind

Z kolei w przypadku drugiego, bardziej zaawansowanego przykładu, należało by użyć poleceń:

# /sbin/dump -0au -f /dev/nrst0 /dev/rsd0a # /sbin/dump -0au -f /dev/nrst0 /dev/rsd0d # /sbin/dump -0au -f /dev/nrst0 /dev/rsd0e # /sbin/dump -0au -f /dev/nrst0 /dev/rsd0h # mt -f /dev/rst0 rewind

Proszę zajrzeć do strony podręcznika systemowego polecenia dump(8), aby dowiedzieć się, jakie znaczenie mają poszczególne flagi tego programu. My przedstawimy jedynie krótki opis opcji użytych w naszym przypadku:

I, ostatecznie, którą partycję zarchiwizować (/dev/rsd0a, itd.).

Polecenie mt(1) służy do przewijania taśmy. Proszę przeczytać stronę podręcznika systemowego polecenia mt, by zapoznać się jego opcjami (takimi jak eject).

Jeśli istnieje niepewność co do nazwy urządzenia taśmowego, proszę posłużyć się poleceniem dmesg. Przykładowy opis urządzenia taśmowego w dmesg może wyglądać tak:

st0 at scsibus0 targ 5 lun 0: <ARCHIVE, Python 28388-XXX, 5.28>

Uważny Czytelnik zapewne dostrzegł, że przy archiwizowaniu urządzenie taśmowe nazywa się nrst0, a nie st0, jak podaje dmesg. Odwołując się do st0 jako do nrst0 zaznaczamy, że nie chcemy przewijać taśmy po dokonaniu archiwizacji, a żądamy dostępu do urządzenia w trybie surowym. Aby zarchiwizować kilka systemów plików na jednej taśmie, upewnij się, że korzystasz z urządzenia non-rewind, ponieważ jeżeli użyjesz urządzenia przewijającego (rst0/) do archiwizacji wielu systemów plików, drugi archiwizowany system plików nadpisze pierwszy, trzeci drugi itd. Dokładniejszy opis różnych urządzeń taśmowych znaleźć można w podręczniku systemowym polecenia dump.

Napiszemy teraz mały skrypt archiwizujący (nazwiemy go "backup")

echo " Rozpoczynam pelna archiwizacje..." /sbin/dump -0au -f /dev/nrst0 /dev/rsd0a /sbin/dump -0au -f /dev/nrst0 /dev/rsd0d /sbin/dump -0au -f /dev/nrst0 /dev/rsd0e /sbin/dump -0au -f /dev/nrst0 /dev/rsd0h echo echo -n " Przewijanie tasmy, prosze czekac..." mt -f /dev/rst0 rewind echo "Gotowe." echo

Jeśli chcemy tworzyć kopie zapasowe np. codziennie w nocy, to można użyć programu cron(8) który będzie uruchamiał nasz skrypt "backup" automatycznie.

Bardzo pomocne jest zapisanie sobie (np. na skrawku papieru) jak dużo miejsca na dysku zajmuje każda partycja. Można do tego celu użyć komendy df -h. Będzie to przydatne, jeśli napęd zawiedzie i trzeba będzie odtworzyć tablicę partycji na nowym dysku.

Przywracanie danych spowoduje również zmniejszenie się fragmentacji. Aby na pewno zarchiwizować wszystkie pliki, najlepiej jest zrestartować komputer i uruchomić system w trybie pojedyńczego użytkownika. Nie trzeba podmontowywać systemów plików, aby je zarchiwizować. Po zalogowaniu się w trybie pojedynczego użytkownika trzeba jednak podmontować partycję root (/) w trybie r/w. W przeciwnym przypadku program dump zgłosi błąd przy zapisywaniu danych o zrzutach. Aby zalogować się w trybie pojedynczego użytkownika, należy wpisać "bsd -s" po znaku zachęty "boot>", pojawiającym się w trakcie uruchamiania systemu.

Wyświetlanie zawartości taśmy

Po dokonaniu pierwszej archiwizacji, dobrze jest upewnić się, że na taśmie jest rzeczywiście to, czego oczekiwaliśmy.

Można wydać następującą komendę by wyświetlić zawartość taśmy, na którą dokonaliśmy zrzutu:

# /sbin/restore -tvs 1 -f /dev/rst0

Wypisze to listę plików istniejących na pierwszej partycji taśmy. Zazwyczaj jest to system plików root (/).

Aby sprawdzić, co zawiera druga partycja i zapisać wynik do pliku, wystarczy użyć następującego polecenia:

# /sbin/restore -tvs 2 -f /dev/rst0 > /home/me/list.txt

W przypadku naszego prostszego przykładu, numer 2 oznaczałby /usr, zaś w przypadku trudniejszego - /var. Jak widać, partycje są zapisywane na taśmę w takiej kolejności, w jakiej są na dysku.

Przywracanie danych z taśmy

Przykładowy scenariusz przedstawiony poniżej jest przydatny w przypadku, gdy dysk twardy kompletnie zawiedzie. Jeżeli naszym celem jest odtworzenie pojedynczego pliku, to należy zaznajomić się ze stroną podręcznika systemowego programu restore, zwracając podczas lektury szczególną uwagę na instrukcje trybu interaktywnego.

Wymiana dysku i przywracanie danych z taśmy jest zwykle procesem szybkim i łatwym. Standardowa dyskietka instalacyjna (bootująca) OpenBSD zawiera zarówno wymagane narzędzie "restore", jak i binaria wymagane do partycjonowania i ustawienia nowego dysku jako bootowalny. W większości przypadków, dyskietka ta i taśma ze zrzutem zawartości dysku są wszystkim, co potrzeba mieć, aby odtworzyć system.

Po fizycznej wymianie zepsutego dysku na nowy, należy postępować w następujący sposób:

14.10 - Montowanie obrazów dysków w OpenBSD

Aby zamontować obraz dysku (np. obraz ISO, obraz dysku stworzony za pomocą dd itp.), należy najpierw skonfigurować urządzenie vnd(4). Na przykład, jeżeli obraz ISO jest umieszczony w pliku /tmp/ISO.image, to aby go zamontować należy wydać następujące polecenia:

# vnconfig svnd0 /tmp/ISO.image # mount -t cd9660 /dev/svnd0c /mnt

Proszę zauważyć, że ponieważ obraz ten jest obrazem ISO-9660, wykorzystywanym w płytach CD i DVD, musisz określić typ na cd9660 gdy go podmontowujesz. To prawda, nie ma znaczenia jaki typ, musisz podać ext2fs gdy montujesz linuksowy obraz dysku.

Do odmontowywania obrazów służą następujące dwa polecenia:

# umount /mnt # vnconfig -u svnd0

Więcej informacji znajduje się w podręczniku systemowym programu vnconfig(8).

14.11 - Pomocy! Otrzymuje komunikaty błędów podczas pracy z urządzeniami IDE DMA!

Transfery IDE DMA, obsługiwane przez pciide(4), są niestabilne w wielu konfiguracjach sprzętowych. Do niedawna, większość "mainstreamowych" systemów operacyjnych, które chwaliły się obsługą transferów DMA na dyskach IDE, nie miały domyślnie włączonej tej opcji z powodu problemów ze sprzętem. Teraz jednak wiele z tych maszyn może być używanych z OpenBSD.

OpenBSD jest agresywny i zawsze próbuje używać najwyższych trybów DMA jakie są dostępne. W przypadku niektórych konfiguracji sprzętowych jest to jednak przyczyną niszczenia danych w trakcie ich transferu. Jest to spowodowane błędami w chipsetach płyt głównych, błędami w dyskach, a także zakłóceniem na łączach. Na szczęście, tryb Ultra-DMA za pomocą CRC wykrywa uszkodzenia danych powstałe podczas ich transferu. Kiedy Ultra-DMA CRC zawiedzie, pojawia się komunikat o błędzie i cała operacja jest powtarzana. Oto przykład takiego komunikatu:

wd2a:  aborted command, interface CRC error reading fsbn 64 of 64-79 (wd2 bn 127; cn 0 tn 2 sn 1), retrying

Jeśli operacja transferu nie powiedzie się kilka razy z rzędu, OpenBSD przełączy tryb Ultra-DMA na wolniejszy (a co za tym idzie, bardziej niezawodny). Jeśli tryb Ultra-DMA osiągnie w końcu wartość 0, to napęd przechodzi w tryb PIO.

Błędy w obsłudze UDMA bardzo często powodowane są przez uszkodzone lub kiepskiej jakości kable. I właśnie one powinny być brane pod uwagę jako główni podejrzani w sprawie błędów DMA lub też niskiej wydajności przy transferach. Nie jest także dobrym pomysłem umieszczanie na tym samym kanale dysku twardego i CD-ROM-u.

Jeśli wymiana kabli nie rozwiąże problemu, a OpenBSD nie będzie mógł zmniejszyć szybkości transmisji lub proces ten spowoduje zawieszenie komputera lub wyświetlenie ogromnej ilości komunikatów systemowych, można spróbować wymusić na systemie domyślne używanie niższego poziomu DMA lub UDMA. Można to osiągnąć przy pomocy UKC lub config(8) zmieniając domyślne flagi urządzenia wd(4).

14.13 - Macierze RAID dla OpenBSD

Dzięki macierzom RAID (Redundant Array of Inexpensive Disks) można używać wielu dysków w celu zwiększenia wydajności, pojemności i/lub redundancji. Pełne przedyskutowanie zalet i niebezpieczeństw związanych z macierzami RAID nie jest zadaniem tego rozdziału. Należy jednak podkreślić dwa ważne fakty: Jeśli te dwie rzeczy są dla Czytelnika nowością, to artykuł ten nie jest dla niego dobrym miejscem na rozpoczęcie przygody z macierzami RAID.

Opcje programowe

OpenBSD zawiera narzędzie RAIDframe, który programowo symuluje RAID. Dokumentacja tego programu znajduje się w następujących miejscach:

Partycja root może być mirrorowana bezpośrednio przez system. Wystarczy użyć opcji "Autoconfiguration" programu RAIDframe.

OpenBSD 3.7-stable, i późniejsze zawierają obsługę mirroringu jako opcję dla sterownika ccd(4). Ten system wbudowano w jądro GENERIC oraz w jądro bsd.rd dla niektórych platform (amd64, hppa, hppa64, i386), zatem może być znacznie prostszy w użyciu, aczkolwiek posiada pewne ograniczenia odnośnie przebudowywania macierzy. Zobacz:

Opcje sprzętowe

Wiele wspieranych przez OpenBSD platform obsługuje wszelakie (sprzętowe) macierze RAID. Jakie dokładnie, można sprawdzić na stronie danej platformy (można się tam dostać stąd).

Inną możliwością, dostępną dla wielu platform, jest zakup jednego z wielu istniejących na rynku urządzeń, które powodują, że kilka dysków IDE czy SCSI działa jako jeden duży dysk. Takie urządzenia działają praktycznie na każdej platformie, warunkiem koniecznym jest obsługa interfejsu SCSI lub IDE przez nią.

Oto niektórzy producenci takiego sprzętu:

(Uwaga: to jest tylko lista firm, których produkty, z pozytywnym skutkiem, zostały przetestowane przez użytkowników OpenBSD. Nie zmuszamy nikogo do korzystania z tylko z tych urządzeń!)

Opcje "nie"

Na listach mailingowych często pojawia się pytanie o obsługę przez OpenBSD tanich kontrolerów IDE RAID lub SATA RAID (opartych na chipsetach firm Promise, HighPoint lub Adaptec HostRAID). Odpowiedz brzmi: nie. Te karty i chipsety nie są prawdziwymi sprzętowymi kontrolerami RAID. Jest to programowo realizowany RAID dzięki odpowiednim procedurom zapisanym w BIOS-ie urządzenia. Jako że OpenBSD obsługuje RAID w sposób niezależny od sprzętu, nie widzimy potrzeby implementacji obsługi dla tych kart.

Prawie wszystkie kontrolery SATA lub IDE "RAID" wbudowane w płyty główne są tylko rozwiązaniami softwarowymi i powinny pracować poprawnie jako SATA lub IDE wykorzystując standardowy sterownik IDE ( pciide(4)), nie będą jednak pracowały jako sprzętowy RAID w OpenBSD.

14.14 - Dlaczego df pokazuje, że używam więcej niż 100% dysku?

Ludzie są zazwyczaj zaskoczeni odkrywając, że mają ujemną ilość wolnego miejsca, lub więcej niż 100% zużycia systemu plików, pokazywane przez df(1).

W trakcie tworzenia systemu plików przy pomocy newfs(8), część dostępnej przestrzeni jest zachowywana jako rezerwa. Zapewnia to margines błędu w gdy przepełnisz dysk, oraz pozwala utrzymać minimalną fragmentację. Domyślnie jest to 5% pojemności dysku, zatem jeśli użytkownik root nędznie wypełni dysk, możesz zobaczyć 105% dostępnej pojemności.

Jeżeli wartość 5% nie jest właściwa dla ciebie, możesz ją zmienić przy pomocy polecenia tunefs(8).

14.15 - Przywracanie partycji po skasowaniu etykiety dysku.

Jeżeli posiadasz uszkodzoną tablicę partycji, jest kilka różnych rzeczy którymi możesz usiłować ją odzyskać.

Na początek - panikuj. Zwykle i tak się to robi, więc może być dobrze mieć to już za sobą. Po prostu nie rób głupich rzeczy. Pozostaw panikę poza swoim komputerem. Następnie zrelaksuj się i zobacz czy kroki opisane poniżej nie redą pomocne.

Kopie etykiet każdego dysku są przechowywane w w /var/backups jako efekt pracy dziennych narzędzi zarządzających. Załóżmy, że wciąż posiadasz partycję var, możesz po prostu przeczytać wyjście i umieścić je w etykiecie dysku.

W przypadku w którym nie możesz zobaczyć tej partycji, są dwie opcje. Naprawić dysk wystarczająco, tak być mógł ją zobaczyć, lub naprawić dysk tak byś mógł zabrać z niego zwoje dane. W zależności od tego co się wydarzyło, pierwsza lub druga opcja może być lepsza (z umierającym dyskiem najpierw chcesz dane, z niestarannymi rękami możesz po prostu mieć etykietę).

Pierwszym narzędziem którego potrzebujesz jest scan_ffs(8) (zwróć uwagę na podkreślenie: to nie jest "scanffs"). scan_ffs(8) przejrzy cały dysk i spróbuje znaleźć partycje a także poda informacje jakie na ich temat znajdzie. Możesz użyć tych informacji do ponownego stworzenia etykiet dysku. Jeżeli po prostu chcesz odzyskać /var, możesz odtworzyć partycję /var, a później odzyskać zarchiwizowaną etykietę i dodać resztę.

disklabel(8) zaktualizuje zarówno informacje jądra o etykietach dysków, jak również spróbuje zapisać etykietę na dysk. Zatem, nawet jeżeli obszar dysku zawierający etykietę jest nieczytelny, będziesz mógł użyć polecenia mount(8) i czytać dane aż do następnego restartu.

14.16 - Czy mogę dostać się do danych na systemach plików innych niż FFS?

Tak. Pozostałe wspierane systemy plików zawierają: ext2 (Linux), ISO9660 i UDF (CD-ROM,DVD), FAT (MS-DOS oraz Windows), NFS, NTFS (Windows), AmigaDOS. Niektóre z nich mają ograniczone wsparcie, np. tylko-odczyt. Zwróć uwagę że UFS2 z FreeBSD nie jest wspierany.

Podamy tutaj ogólne wprowadzenie jak korzystać z tych systemów plików w OpenBSD. Aby korzystać z systemu plików musi on zostać podmontowany. Po szczegółowe opcje montowania, zobacz stronę manuala mount(8), oraz te dotyczące montowania systemów plików które zamierzasz montować, tj. mount_msdos, mount_ext2fs, ...

Przede wszystkim musisz wiedzieć na jakim urządzeniu znajduje się twój system plików. To może być twój pierwszy dysk twardy, wd0 lub sd0, lub coś mniej oczywistego. Wszystkie rozpoznane i skonfigurowane urządzenia w twoim systemie są podane na wyjściu polecenia dmesg(1): nazwa urządzenia poprzedzona jedną linią jego opisu. Dla przykładu, mój pierwszy napęd CD-ROM jest rozpoznawany jako:

cd0 at scsibus0 targ 0 lun 0: <COMPAQ, DVD-ROM LTD163, GQH3> SCSI0 5/cdrom removable

Chcąc uzyskać znacznie krótszą listę dostępnych dysków, możesz skorzystać z sysctl(8). Polecenie:

# sysctl hw.disknames
pokaże dyski aktualnie znane przez twój system, dla przykładu:
hw.disknames=cd0,cd1,wd0,fd0,cd2

W tym momencie, nadszedł czas by dowiedzieć się jakie partycje znajdują się na tym urządzeniu, oraz na której z nich znajduje się pożądany system plików. Dlatego też sprawdzimy urządzenie korzystając z disklabel(8). Disklabel zawiera listę partycji, z maksymalną ich liczbą równą 16. Partycja c zawsze oznacza cały dysk. Partycje a-b oraz d-p są wykorzystywane przez OpenBSD. Partycje i-p mogą być automatycznie przeznaczone na systemy plików innych systemów operacyjnych. W tym przypadku, będziemy oglądać etykiety (disklabel) mojego dysku twardego, zawierającego kilka różnych systemów plików.

Uwaga: OpenBSD został zainstalowany po zainstalowaniu wcześniej innych systemów, i podczas instalacji disklabel zawierał natywny system plików jak i inne systemy plików innych systemów operacyjnych. Jednakże, jeżeli instalujesz inne systemy plików po tym jak został zainstalowany disklabel OpenBSD, będziesz potrzebował później dodać lub zmodyfikować je ręcznie. Zostało to opisane w tej sekcji.

# disklabel wd0 # using MBR partition 2: type A6 off 20338290 (0x1365672) size 29318625 (0x1bf5de1) # /dev/rwd0c: type: ESDI disk: ESDI/IDE disk label: ST340016A flags: bytes/sector: 512 sectors/track: 63 tracks/cylinder: 16 sectors/cylinder: 1008 cylinders: 16383 total sectors: 78165360 rpm: 3600 interleave: 1 trackskew: 0 cylinderskew: 0 headswitch: 0 # microseconds track-to-track seek: 0 # microseconds drivedata: 0 16 partitions: # size offset fstype [fsize bsize cpg] a: 408366 20338290 4.2BSD 2048 16384 16 # Cyl 20176*- 20581 b: 1638000 20746656 swap # Cyl 20582 - 22206 c: 78165360 0 unused 0 0 # Cyl 0 - 77544 d: 4194288 22384656 4.2BSD 2048 16384 16 # Cyl 22207 - 26367 e: 409248 26578944 4.2BSD 2048 16384 16 # Cyl 26368 - 26773 f: 10486224 26988192 4.2BSD 2048 16384 16 # Cyl 26774 - 37176 g: 12182499 37474416 4.2BSD 2048 16384 16 # Cyl 37177 - 49262* i: 64197 63 unknown # Cyl 0*- 63* j: 20274030 64260 unknown # Cyl 63*- 20176* k: 1975932 49656978 MSDOS # Cyl 49262*- 51223* l: 3919797 51632973 unknown # Cyl 51223*- 55111* m: 2939832 55552833 ext2fs # Cyl 55111*- 58028* n: 5879727 58492728 ext2fs # Cyl 58028*- 63861* o: 13783707 64372518 ext2fs # Cyl 63861*- 77535*

Jak możemy zobaczyć na powyższym wyjściu partycje OpenBSD są wylistowane jako pierwsze. Następne jest szereg partycji ext2 oraz jedna partycja MSDOS, podobnie jak kilka partycji "unknown". Na systemach i386 oraz amd64 możesz zazwyczaj dowiedzieć się więcej o tych partycjach korzystając z narzędzia fdisk(8). Dla ciekawskich czytelników: partycja i jest partycją konserwacyjną utworzoną przez producenta, partycja j jest partycją NTFS, natomiast partycja l jest linuksową partycją wymiany.

Kiedy już określiłeś jaką partycję chcesz użyć, możesz przejść do ostatniego kroku: zamontowania znajdującego się na niej systemu plików. Większość systemów plików jest wspierana w jądrze GENERIC: po prostu przyjżyj się konfiguracji jądra znajdującej się w katalogu /usr/src/sys/arch/<arch>/conf. Jednakże niektóre nie są wspierane, np. wsparcie NTFS jest eksperymentalne, dlatego też nie jest włączone w GENERIC. Jeżeli chcesz wykorzystać jeden z systemów plików nie wspierany w GENERIC, będziesz musiał zbudować własne jądro.

Kiedy już zebrałeś informacje wspomniane powyżej, nadszedł czas na zamontowanie systemu plików. Przypuśćmy ze istnieje katalog /mnt/otherfs, który użyjemy jako punkt montowania rządanego systemu plików. W tym przypadku będziemy chcieli zamontować system ext2 na partycji m:

# mount -t ext2fs /dev/wd0m /mnt/otherfs

Jeżeli zamierzasz korzystać z tego systemu plików regularnie, możesz zaoszczędzić sobie nieco czasu poprzez wpisanie do /etc/fstab, na przykład coś takiego:

/dev/wd0m /mnt/otherfs ext2fs rw,noauto,nodev,nosuid 0 0
Zwróćmy uwagę na zero wpisane w polach piątym i szóstym. Oznacza to że nie wymagamy by ten system plików był zrzucany oraz sprawdzany przy użyciu fsck. Zazwyczaj te rzeczy chcemy by były wykonywane przez natywny system operacyjny współpracujący z danym systemem plików.

14.16.1 - Partycje nie istnieją w moim disklabel! Co powinienem zrobić?

Jeżeli instalujesz inny system plików w twoim systemie (w rezultacie dodawania nowego systemu operacyjnego), po tym jak zainstalowałeś OpenBSD, etykiety dysków, zachowana zostanie aktualna zawartość disklabel, i nie będzie ona aktualizowana automatycznie by zawierała nowe partycje z tymi systemami plików. Jeżeli chcesz z nich korzystać, konieczna będzie ręczna modyfikacja lub dodanie tych partycji przy pomocy narzędzia disklabel(8).

Jako przykład, zmodyfikowałem jedną z moich partycji ext2: korzystając z linuksowego programu fdisk, zmniejszyłem rozmiar partycji "o" (zobacz wynik disklabel powyżej) do 1G. Będziemy mogli to łatwo rozpoznać dzięki pozycji startowej (offset: 64372518) oraz rozmiarze (13783707). Zauważmy, że te wartości to numery sektorów, i takie wykorzystanie numerów sektorów (nie megabajtów lub innych miar) jest najbardziej właściwą i bezpieczną metodą do czytania tych informacji.

Zanim przystąpimy do zmian, partycja oglądana przy pomocy dostępnego w OpenBSD programu fdisk(8) wygląda tak (pozostawiłem tylko istotną informację):

# fdisk wd0 . . . Offset: 64372455 Signature: 0xAA55 Starting Ending LBA Info: #: id C H S - C H S [ start: size ] ------------------------------------------------------------------------ 0: 83 4007 1 1 - 4864 254 63 [ 64372518: 13783707 ] Linux files* . . .
Jak możesz się przekonać, pozycja początkowa partycji oraz rozmiar dokładnie odpowiada wartościom podanym wcześniej przez program disklabel(8). (Nie bądź zmieszany wartością wskazywaną przez "Offset": jest to odniesienie do pozycji startowej partycji rozszerzonej na której znajduje się omawiana partycja ext2).

Po zmianie partycji w linuksowym programie fdisk, wygląda to tak:

# fdisk wd0 . . . Offset: 64372455 Signature: 0xAA55 Starting Ending LBA Info: #: id C H S - C H S [ start: size ] ------------------------------------------------------------------------ 0: 83 4007 1 1 - 4137 254 63 [ 64372518: 2104452 ] Linux files* . . .
Teraz musi zostać to zmienione przy pomocy disklabel(8). Przykładowo, możesz wydać polecenie disklabel -e wd0, które wywoła edytor określony w zmiennej środowiskowej EDITOR (domyślnie jest vi). W tym edytorze zmień ostatnią linię disklabel by pasowała do nowego rozmiaru:
o: 2104452 64372518 ext2fs
Zapisz disklabel na dysk gdy skończysz. Teraz gdy disklabel jest aktualny, powinieneś móc podmontować twoją partycję jak opisano wcześniej.

Możesz podobną procedurą dodawać nowe partycje.

14.17 - Czy mogę używać pamięci flash w OpenBSD?

Zazwyczaj nośnik pamięci powinien zostać rozpoznany zaraz po włożeniu go w port twojego komputera. Krótko po włożeniu, na konsoli powinny się wyświetlić wiadomości z jądra. Dla przykładu, kiedy podłączam moją pamięć flash USB, widzę poniższe komunikaty na konsoli:
umass0 at uhub1 port 1 configuration 1 interface 0 umass0: LEXR PLUG DRIVE LEXR PLUG DRIVE, rev 1.10/0.01, addr 2 umass0: using SCSI over Bulk-Only scsibus2 at umass0: 2 targets sd0 at scsibus2 targ 1 lun 0: <LEXAR, DIGITAL FILM, /W1.> SCSI2 0/direct removable sd0: 123MB, 123 cyl, 64 head, 32 sec, 512 bytes/sec, 251904 sec total
Linie te oznaczają, że sterownik umass(4) (USB mass storage) został podczepiony do urządzenia pamięci, oraz korzysta z systemu SCSI. Najważniejsze są dwie ostatnie linie: mówią do jakiego węzła została podłączona pamięć i jaki jest całkowity rozmiar przestrzeni na niej. Jeżeli w jakiś sposób zgubiłeś te linie, wciąż możesz je zobaczyć później dzięki poleceniu dmesg(1). Zgłoszona wartość geometrii CHS jest raczej fikcyjna, ponieważ pamięci flash są traktowane jak zwykłe dyski SCSI.

Poniżej rozważymy dwa scenariusze.

Urządzenie jest nowe/puste i chcesz je używać tylko z OpenBSD

Będziesz potrzebował założyć etykietę dysku na tym urządzeniu, oraz stworzyć przynajmniej jedną partycję. Proszę przeczytaj korzystanie z disklabel w OpenBSD oraz stronę manuala disklabel(8).

W tym przypadku utworzyłem jedną partycję a i założyłem na niej system plików FFS:

# newfs sd0a Warning: inode blocks/cyl group (125) >= data blocks (62) in last cylinder group. This implies 1984 sector(s) cannot be allocated. /dev/rsd0a: 249856 sectors in 122 cylinders of 64 tracks, 32 sectors 122.0MB in 1 cyl groups (122 c/g, 122.00MB/g, 15488 i/g) super-block backups (for fsck -b #) at: 32,
Podmontujmy utworzony na partycji a system plików w /mnt/flashmem. Wcześniej utwórz ten punkt montowania.
# mkdir /mnt/flashmem # mount /dev/sd0a /mnt/flashmem

Otrzymałeś pamięć flash do kogoś innego z kim chcesz wymieniać się danymi.

Istnieje znaczne prawdopodobieństwo ze osoba ta nie korzysta z OpenBSD, zatem na pamięci może znajdować się obcy system plików. Dlatego na początek sprawdzimy jakie partycje znajdują się na tym urządzeniu, tak jak to opisano w FAQ 14 - Czy mogę dostać się do danych na systemach plików innych niż FFS?.

# disklabel sd0 # /dev/rsd0c: type: SCSI disk: SCSI disk label: DIGITAL FILM flags: bytes/sector: 512 sectors/track: 32 tracks/cylinder: 64 sectors/cylinder: 2048 cylinders: 123 total sectors: 251904 rpm: 3600 interleave: 1 trackskew: 0 cylinderskew: 0 headswitch: 0 # microseconds track-to-track seek: 0 # microseconds drivedata: 0 16 partitions: # size offset fstype [fsize bsize cpg] c: 251904 0 unused 0 0 # Cyl 0 - 122 i: 250592 32 MSDOS # Cyl 0*- 122*
Jak widzimy na etykietach dyskowych załączonych powyżej, jest tylko jedna partycja i, zawierająca system plików FAT utworzony na maszynie windowsowej. Jak zwykle partycja c oznacza cały dysk.

Podmontujmy system plików z partycji i w /mnt/flashmem.

# mount -t msdos /dev/sd0i /mnt/flashmem
Możesz teraz zacząć korzystać z niego jak z każdego innego dysku.

OSTRZEŻENIE: Powinieneś zawsze odmontowywać system plików zanim odłączysz nośnik pamięci. Jeżeli tego nie zrobisz, system plików może pozostać w niezgodnym stanie, co może oznaczać uszkodzenie danych.

Po odłączeniu nośnika pamięci z twojej maszyny, ponownie zobaczysz komunikaty z jądra o tym zdarzeniu na konsoli.

umass0: at uhub1 port 1 (addr 2) disconnected sd0 detached scsibus2 detached umass0 detached

14.18 - Optymalizacja operacji dyskowych

Szybkość operacji wejścia/wyjścia systemów dyskowych ma znaczący wpływ na całkowitą wydajność komputera. Ma to szczególne znaczenie wtedy, gdy twój komputer pracuje w środowisku wielodostępnym (z systemu korzysta wielu użytkowników różnego rodzaju, tacy którzy logują się do niego interaktywnie, tacy którzy korzystają z niego jako serwera plików albo serwera www). Dane przechowywane wymagają ciągłej uwagi, szczególnie wtedy, gdy na partycjach zaczyna brakować miejsca lub wtedy, gdy dysk ulegnie uszkodzeniu. OpenBSD posiada wiele mechanizmów na zwiększenie szybkości systemów dyskowych czy też zapewniających odporność na uszkodzenia.

14.18.1 - CCD

Pierwszą możliwością jest użycie ccd(4), czyli sterownika dysków połączonych (Concatenated Disk Driver). Pozwala to na połączenie wielu partycji w jeden wirtualny dysk (oznacza to iż możesz sprawić by wiele dysków widziane jest jako jeden). Jest to rozwiązanie podobne do LVM (logical volume management), które zaimplementowane jest w wielu komercyjnych wersjach Uniksa.

Jeśli twój system pracuje na jądrze GENERIC, sterownik ccd jest w nim zawarty (w pliku /usr/src/sys/conf/GENERIC). Jeśli jednak przebudowałeś kernel, być może będziesz potrzebował włączyć odpowiednią opcję w pliku konfiguracyjnym. Innymi słowy, w pliku konfiguracyjnym musi znaleźć się wpis wyglądający w następujący sposób:

pseudo-device ccd 4 # concatenated disk devices

Powyższa linia daje Ci możliwość utworzenia maksymalnie 4 urządzeń ccd (dysków wirtualnych, logicznych). Teraz musisz zdecydować, które partycje z zainstalowanych w systemie dysków włączysz do urządzenia ccd. Następną czynnością jest użycie narzędzia disklabel, w celu oznaczenia tych partycji jako dostępnych dla ccd. Na niektórych platformach sprzętowych, narzędzie disklabel może nie zezwolić na wykonanie tej czynności. W tym wypadku oznacz je jako ffs.

Jeśli używasz ccd w celu zwiększenia wydajności poprzez zastosowanie stripingu, zwróć uwagę na fakt, że optymalną wydajność uzyskasz tylko wtedy, gdy zastosujesz te same modele dysków z identycznymi ustawieniami wprowadzonymi programem disklabel.

Plik /etc/ccd.conf powinien wyglądać podobnie do tego: (więcej informacji o konfiguracji ccd znajdziesz w podręczniku man pod hasłem ccdconfig(8))

# Configuration file for concatenated disk devices # # ccd ileave flags component devices ccd0 16 none /dev/sd2e /dev/sd3e

Aby zastosować wprowadzone ustawienia wykonaj następujące polecenie

# ccdconfig -C

Tak długo jak istnieje plik /etc/ccd.conf, tak długo ccd będzie automatycznie konfigurować się podczas startu systemu. Od tego momentu masz w systemie nowy dysk nazwany ccd będący kombinacją urządzeń /dev/sd2e oraz /dev/sd3e. Wystarczy ponownie użyć polecenia disklabel na urządzeniu ccd0, jak zwykle wtedy, gdy tworzysz partycję lub partycje, które chcesz używać. Nie używaj partycji 'c' jako aktualnej partycji tworzonej na nowym urządzeniu. Upewnij się, że początek nowo tworzonej partycji rozpoczyna się co najmniej 1 cylinder za początkiem dysku.

14.18.2 - RAID

Innym rozwiązaniem jest raid(4). Aby kontrolować macierze RAID użyj narzędzia raidctl(8). System macierzy dyskowych RAID w systemie OpenBSD bazuje na opracowanym przez Grega Ostera porcie dla NetBSD oprogramowamia CMU RAIDframe. OpenBSD wspiera następujące poziomy RAID: 0, 1, 4, oraz 5.

Możliwość użycia RAID, podobnie jak i ccd, definiuje się w pliku konfiguracyjnym kernela. Niestety jądro GENERIC nie wspiera systemu RAID, dlatego też musi on być wkompilowany w jądro. (obsługa RAID zwiększa rozmiar jądra o około 500K na platformie i386)

pseudo-device raid 4 # RAIDframe disk device

Więcej informacji uzyskasz, jeśli przeczytasz następujące tematy, raid(4) oraz raidctl(8), w podręczniku man. Podsystem RAID posiada wiele opcji konfiguracyjnych, a szczegółowe przedstawienie wszystkich wykracza poza ramy tego dokumentu.

14.18.3 - Soft updates

Innym narzędziem, które może być użyte do poprawienia wydajności twojego systemu są softupdates'y. Jedną z najwolniejszych operacji w tradycyjnym systemie plików systemu BSD jest aktualizacja informacji metainfo (co ma miejsce między innymi wtedy, gdy kasujesz lub tworzysz  pliki/katalogi). Softupdates próbują aktualizować informacje metainfo w pamięci RAM zamiast zapisywać na dysk każdą pojedynczą aktualizację. Innym efektem tego działanie jest fakt, że informacje metainfo zapisane na dysku powinny zawsze być kompletne, jednakże nie oznacza to iż są one najbardziej aktualne. Tak więc po padzie systemu, system nie powinien uruchomić fsck(8) w trakcie ponownego startu, wymaga tylko aby fsck dokonał zmian metainfo w RAM'ie (przy pomocy softupdates). Skutkuje to szybszym startem serwera po awarii, jako że nie musi on czekać na zakończenie fsck. (OpenBSD nie posiada jeszcze zaimplementowanych softupdates'ów.) Więcej możesz dowiedzieć się czytając o softupdates'ach w Softupdates FAQ.

14.18.4 - Rozmiar pamięci podręcznej namei()

Rozmiar pamięci podręcznej konwersji name-inode ( znanej także jako, namei()) determinuje szybkość translacji ścieżek do inode'ów (inode(5)). Mały rozmiar tej pamięci podręcznej skutkuje dużą ilością 'cache misses', którą można odczytać pomocą odpowiednich narzędzi np. systat(1), który wywołuje sysctl(8), (sprawdzający parametr "kern.maxvnodes"). Również tym programem można dokonać zmiany tego parametru. Po zmianie należy obserwować wydajność komputera. Jeżeli zmiany są satysfakcjonujące możemy ustawić ten parametr na stałe tak, aby był stosowany przy każdym starcie systemu. W tym celu należy w pliku sysctl.conf(5) dodać odpowiedni wpis.

14.19 - Dlaczego nie używać asynchronicznego montowania dysków?

Pytanie: "Robię tak "mount -u -o async /", co powoduje, że używana przeze mnie paczka (oprogramowanie przyp. tłum.) (które posiada od czasu do czasu dostęp do różnych danych) jest w dalszym ciągu zdatna do użycia. Dlaczego montowanie asynchroniczne nie jest zalecane i nie jest włączone domyślnie (jak to jest w innych uniksach)? Czyż nie jest to prostsze oraz nie zwiększa wydajności niektórych aplikacji?

Odpowiedź: "W rzeczy samej, asynchroniczne montowanie jest szybsze niż synchroniczne, lecz jest mniej bezpieczne. Co stanie się w przypadku zaniku zasilania? Czy też problemu z hardwarem? Dążenie do uzyskanie większej szybkości nie powinno być okupione kosztem integralności i stabilności systemu. Przeczytaj opis polecenia mount(8) w podręczniku man." async Wszystkie operacje wejścia/wyjścia w systemie plików powinny być wykonane asynchronicznie. Jest to niebezpieczne, ponieważ nie gwarantuje to spójności struktury systemu plików na dysku. Nie powinieneś używać tej opcji, chyba, że jesteś przygotowany do ponownego utworzenia systemu plików w przypadku awarii systemu. Najczęściej używa się tej flagi w celu przyśpieszenia przywracania systemu plików poleceniem restore(8), co może przyczynić się do nawet dwukrotnego przyśpieszenia operacji dyskowych.

Z innej strony, kiedy masz do czynienia z danymi tymczasowymi, które możesz odtworzyć po awarii systemu, możesz zwiększyć szybkość używając odrębnej, asynchronicznie montowanej partycji tylko i wyłącznie dla tego typu danych. Rób to jednak tylko jeśli nie poniesiesz straty wszystkich danych w przypadku, gdy coś pójdzie nie tak jak byś się tego spodziewał. W tym celu, partycje mfs(8) są montowane asynchronicznie, jako że są one czyszczone i ponownie tworzone po każdym reboocie systemu.

[Spis treści] [Do sekcji 13 - Multimedia] [Do sekcji 15 - Pakiety i Porty]


[wstecz] www@openbsd.org
$OpenBSD: faq14.html,v 1.42 2007/11/23 19:30:03 tobias Exp $