[Spis treści] [Do sekcji 13 - Multimedia] [Do sekcji 15 - Pakiety i Porty]
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.
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.
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.
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:
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!
(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.
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
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%
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.
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.
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...".
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ł:
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
...
Można zainstalować OpenBSD MBR na dysku przy pomocy programu fdisk(8). Wystarczy uruchomić system z medium instalacyjnego, wybrać opcję "Shell", a po ukazaniu się znaku zachęty wpisać:
# fdisk -u wd0
Można również określić jaki MBR ma być zapisany na dysku:
# fdisk -u -f /usr/mdec/mbr wd0
Powyższe polecenie spowoduje zapisanie pliku /usr/mdec/mbr jako
MBR na dysku. Ten plik jest standartowym MBR OpenBSD i jest on także
wbudowany w polecenie fdisk, ale nic nie stoi na przeszkodzie by w tym
miejscu wskazać inny, prawidłowy kod MBR.
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.
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.
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)
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.
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.
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.
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:
Bootujemy komputer z dyskietki instalacyjnej OpenBSD. W menu
wybieramy "Shell". Następnie zabezpieczamy przed zapisem i wkładamy
naszą najbardziej aktualną taśmę z kopią zapasową systemu.
Używając programu fdisk(8), tworzy się podstawową partycję OpenBSD na nowym dysku. Przykład:
# fdisk -e sd0
Więcej informacji na temat fdisk znajduje się w rozdziale o programie fdisk.
Używając polecenia disklabel, odtwarzamy nasze tablicę partycji OpenBSD wewnątrz naszej podstawowej partycji, którą przed chwilą stworzyliśmy za pomocą fdiska. Przykład:
# disklabel -E sd0
(Proszę nie zapomnieć o partycji swap, więcej informacji znajduje się w rozdziale o disklabel FAQ).
Używając polecenia newfs, budujemy czysty system plików na każdej partycji stworzonej w poprzednim kroku. Przykład:
# newfs /dev/rsd0a
# newfs /dev/rsd0h
Montujemy nowoprzygotowany system plików root (/) na /mnt. Przykład:
# mount /dev/sd0a /mnt
Wchodzimy do partycji root i zaczynamy proces przywracania danych. Przykład:
# cd /mnt
# restore -rs 1 -f /dev/rst0
Trzeba jeszcze ustawić dysk jako bootowalny. Trzeba więc zapisać na dysku nowy MBR. Służy do tego polecenie:
# fdisk -i sd0
Oprócz zapisania nowego MBR, aby móc z niego bootować, należy jeszcze zainstalować bootblock. Oto krótki przykład:
# cp /usr/mdec/boot /mnt/boot
# /usr/mdec/installboot -v /mnt/boot /usr/mdec/biosboot sd0
W tym momencie nowy system plików root na dysku twardym powinien być już przygotowany, można więc z niego uruchomić system i kontynuować przywracanie reszty systemów plików. Ponieważ system operacyjny nie jest w tym momencie jeszcze do końca odtworzony, należy ponownie uruchomić go w trybie pojedynczego użytkownika. Oto przykład jak z poziomu powłoki odmontować system plików, a następnie wyłączyć komputer.
# umount /mnt
# halt
Usuń dyskietkę instalacyjną z napędu i ponownie uruchom komputer. Po pojawieniu się znaku zachęty programu ładującego OpenBSD, wpisz poniższą komendę:
boot> bsd -s
bsd -s spowoduje, że kernel uruchomi się w trybie jednego użytkownika (do pracy w tym trybie wymagana jest tylko partycja root (/)).
Zakładając, że wszystkie opisane do tej pory czynności zostały poprawnie wykonane i nie wystąpiły żadne błędy, po uruchomieniu systemu pojawi się pytanie o ścieżkę do powłoki. Naciśnięcie return uruchomi powłokę sh. Następnie możesz zamontować główny system plików w trybie do odczytu/zapisu (w tym momencie możliwy jest tylko odczyt).
# mount -u -w /
Jeśli jest już możliwy zapis na partycji root (/), można przystąpić do dalszej części odtwarzania systemu z kopii zapasowej.
(prostszy przykład )
# mount /dev/sd0h /usr; cd /usr; restore -rs 2 -f /dev/rst0
(bardziej zaawansowany przykład)
# mount /dev/sd0d /var; cd /var; restore -rs 2 -f /dev/rst0
# mount /dev/sd0e /home; cd /home; restore -rs 3 -f /dev/rst0
# mount /dev/sd0h /usr; cd /usr; restore -rs 4 -f /dev/rst0
Użycie opcji rvsf zamiast rsf polecenia restore spowoduje, że na ekranie będą wyświetlane nazwy aktualnie rozpakowywanych plików.
Po przywróceniu wszystkich systemów plików na dysku, należy ponownie uruchomić komputer, tym razem już w trybie wieloużytkownikowym. Jeśli wszystko poszło zgodnie z planem dostępny będzie system dokładnie w takim stanie w jakim znajdował się chwili wykonywania kopii.
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).
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).
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:
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ń!)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.
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).
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.
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.
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.
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.
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
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
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.
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.
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.
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]