SWAP dla Linuxa i w95 mini-HOWTO

Seweryn Sobieszek sniff@alpha.net.pl
v1.2, 20 sierpnia 1999


Jak zrobi� swap dla windowsa i Linuxa na jednej partycji? Opis znajdziesz tutaj. Opisywany dalej spos�b jest mojego autorstwa. Mo�liwe, �e kto� ju� wcze�niej wpad� na ten pomys�, ale ja wymy�li�em go sam. Zaznaczam, �e nie przeczyta�em tego w �adnym FAQ. Brak takowego dokumentu jest g��wn� przyczyn� powstania tego pliku. Chc� pom�c wszystkim, kt�ry maj� podobny problem do mojego tzn. zbyt ma�y twardy dysk, by sobie pozwoli� na luksus dw�ch oddzielnych swap�w. Dokument ten zosta� napisany w standardzie ISO-8859-2. Wersja oryginalna znajduje si� na serwerze JTZ: http://www.jtz.org.pl.

1. Wst�p

1.1 Kr�tki opis metody

M�j spos�b na wsp�lnego swapa Linuxa i w95 jest do�� prosty. Zmuszamy wina do korzystania ze sta�ego swapa na naszej partycji wymiany, a potem w Linuksie korzystamy z tej samej partycji co windows. Tylko, �e potem ta partycja ju� nie mo�e by� odczytana przez windowsa - ma inny filesystem i nie ma windowsowego swapa (plik win386.swp). Musimy wi�c przywr�ci� na niej flesystem dosowy i odtworzy� brakuj�cy plik. Potem zn�w pracujemy w Linuksie, on sobie swapuje na nasza partycj�, przy ko�czeniu pracy zn�w zamienia partycj� na format dosowy. Proste prawda? Ale jakie skuteczne. Jest to najszybsza metoda, ze wszystkich jakie do tej pory testowa�em. Zreszt� co b�d� gada� - sami przeczytajcie i sprawd�cie.

1.2 Historia dokumentu

Dotychczas zosta�y upublicznione nast�puj�ce wersje tego dokumentu:

Zmiany w wersji 1.1

Dokument zosta� og�lnie przebudowany, opr�cz opisu dla dystrybucji Redhat zosta� dodany opis post�powania z dystrybucj� Slackware.

Poprawi�em liter�wki (mam nadziej�) oraz upro�ci�em troch� zagmatwany opis.

Zmiany w wersji 1.2

Dodany opis post�powania z dystrybucj� Debian (teraz s� a� trzy! :) (Debian, RedHat, Slackware)).

Wreszcie powsta�a wersja SGML tego dokumentu, bo dotychczas (a� wstyd si� przyzna� :( ) pisa�em to w HTML-u, ale tak, �eby wygl�da�o, �e by�o konwertowane z SGML...

2. Przygotowanie dysku i softu

2.1 Podzia� dysku na partycje

Musisz mie� co najmniej trzy partycje. Jedn� z Linuxem, drug� z w95 i jeszcze trzecia na plik wymiany. Istnieje niepisana zasada, �e swap powinien by� dwa razy wi�kszy od ilo�ci RAM-u w Twoim komputerze. U mnie, przy 540 MB (prosz� bez �miech�w ;) ) dysku wygl�da to tak:

/dev/hda1 #partycja z w95 (256 MB)
/dev/hda2 #partycja z Linuxem (227 MB)
/dev/hda3 #partycja wymiany (32 MB)

Do podzia�u na partycje u�yj najlepiej linuxowego programu fdisk, nie jest mo�e najwygodniejszy w u�yciu, ale za to najlepszy. Partycji do swapu nadaj identyfikator odpowidaj�cy typowi FAT16 (id 4 lub 6 w zale�no�ci od wielko�ci), a nie Linux Swap (id 82). Identyfikator partycji ustawia opcja t menu fdisk-a.

2.2 Przygotowanie Windows95

Tu nie b�dziesz si� musia� du�o natrudzi�, zreszt� pod Linuxem te� nie. W Panelu Sterowania ustaw jako plik wymiany plik o wielko�ci minimalnej 0 i maksymalnej r�wnej wielko�ci partycji przeznaczonej na swapa. Zamknij windowsy i odpal Linuxa.

2.3 Przygotowanie Linuxa

Tak, to nie �art. Linuxa te� musisz przygotowa�. Jak bym tego nie opisa� to Microsoft wytoczy�by mi spraw� w s�dzie. ;) No to zaczynajmy.
Oczywi�cie musisz mie� zainstalowanego Linuxa. Zbytnich wymaga� co do j�dra i wersji chyba nie ma, bo wydaje mi si�, �e ten spos�b b�dzie dzia�a� na ka�dym Linuksie. Osobi�cie testowa�em to na Debianie, Redhacie, Slacku i j�drach od 2.0.35 do 2.2.9 (r�ne kombinacje, ale j�dra 2.2.x ju� tylko na Debianie).

Z narz�dzi potrzebne b�d� nam:

Wszystkie te programy (opr�cz mkdosfs) to standard i powinny znajdowa� si� w ka�dej, nawet najbardziej okrojonej, instalacji. mkdosfs mo�na skompilowa� maj�c �r�d�a, lub (co jest znacznie wygodniejsze) zainstalowa� z pakietu, zw�aszcza, �e chyba ka�da dystrybucja posiada pakiet zawieraj�cy mkdosfs.

Debian

W Debianie mkdosfs znajduje si� w pakiecie: dosfstools. Opr�cz mkdosfs w pakiecie tym znajduje si� jeszcze narz�dzie do sprawdzania i naprawiania dosowego filesystemu - dosfsck. Pakiet mo�esz zainstalowa� np. tak:

dpkg -i dosfstools_wersja.deb
Je�li nie masz instalki Debiana to pakiet mo�esz �ci�gn�� z tego adresu.
No i voila!

RedHat

Dok�adna nazwa pakietu zawieraj�cego mkdosfs brzmi np: mkdosfs-ygg-0.3b-5.i386.rpm. Znajd� go na na p�ytce instalacyjnej RedHata, katalogu z instalk� lub na jakim� serwerze FTP, np. tutaj. Zainstaluj ten pakiet, np. w ten spos�b:

rpm --install mkdosfs-ygg-0.3b-8.i386.rpm
Po tej operacji mo�esz ju� przyst�pi� do sedna sprawy. :)

Slackware

W Slackware standardowo jest zainstalowany mkdosfs. A gdyby nie by�o /sbin/mkdosfs, to znajduje si� on w pakiecie bin.tgz w podkatalogu a3 dystrybucji. Zainstaluj ten pakiet, wraz z nim otrzymasz jeszcze mas� po�ytecznych narz�dzi. Mo�esz u�y� pkgtool lub installpkg. Pierwszy poprowadzi Ci� za r�k�, a drugi wystarczy wywo�a� w ten spos�b:

installpkg bin.tgz
i pakiet jest ju� zainstalowany. Teraz mo�esz przej�� do nast�pnej cz�ci.

3. Sedno sprawy

Wszystkie opisane poni�ej zmiany w plikach konfiguracyjnych dotycz� dystrybucji, kt�re s� tu wymienione: Debian, RedHat, Slackware. Je�li posiadasz inn� dystrybucj�, poszukaj w plikach startowych podobnych komend i popr�buj. Pami�taj jednak, �e mo�esz zrobi� sobie, a w�a�ciwie partycjom krzywd�, wi�c je�li nie do ko�ca wiesz co robisz nie r�b tego. Skorzystaj z pomocy bardziej do�wiadczonego kolegi, lub napisz do mnie - wsp�lnie na pewno co� poradzimy.

Acha, jeszcze jedna sprawa. Opisy zamieszczone tutaj dotycz�:

Prawdopodobnie w innych wersjach tych dystrybucji pliki konfiguracyjne wygl�daj� tak samo, a co najmniej podobnie, wi�c nie powinno by� problem�w.

Notka: Czytaj�c dalej zapewne zauwa�ysz, �e przy wywo�aniach swapon i swapoff polecam zamieni� parametr -a na nazw� konkretnej partycji. Jest to w�a�ciwie niepotrzebne, ale pisz� tak by by�o dok�adnie wiadomo, o kt�r� partycj� chodzi (u mnie /dev/hda3). Czytaj�c man swapon zobaczysz, �e opcja -a pozwala na ma�� automatyzacj� w zarz�dzaniu partycjami wymiany. Je�li chcesz z niej korzysta� nic nie stoi temu na przeszkodzie. Po prostu nie zmieniaj tego parametru. We� tylko pod uwag�, �e komenda mkswap nie posiada takiej opcji i tu b�dziesz musia� wpisa� dok�adne nazwy partycji, bo mkswap nie przeczyta sobie ich z /etc/fstab. Zamiast "brakuj�cej" opcji mo�esz uzy� petli shell'a, ale to ju� temat na inn� bajk�. Je�li Ci� to interesuje - mail me.

Powodzenia...

3.1 Debian

Zajmiemy si� tylko dwoma skryptami startowymi: checkroot.sh i umountfs. W pierwszym z tych plik�w SWAP jest w��czany podczas startu Linuxa, a w drugim wy��czany przed zamkni�ciem systemu.

Plik /etc/init.d/checkroot.sh

Na samym pocz�tku tego pliku znajdziesz co� takiego:

if [ -x /sbin/swapon ]
then
  [ "$VERBOSE" != no ] && echo "Activating swap..."
  swapon -a
fi
Jak si� pewnie domy�lasz sekwencja ta powoduje w��czenie wszystkich swap�w zdefiniowanych w /etc/fstab. No i dobrze, bo my chcemy w��czy� te swapy. Tylko, �e jak na razie nasza partycja wcale nie ma formatu Linux Swap (id 82) tylko DOS16. I co z tym fantem zrobi�? Potraktowa� mkswapem. Zobacz efekt moich zmian:
if [ -x /sbin/swapon ]
then
  [ "$VERBOSE" != no ] && echo "Activating swap..."
  mkswap /dev/hda3
  swapon /dev/hda3
fi

Plik /etc/init.d/umountfs

Plik ten jest wykonywany podczas zamykania systemu, wy��cza partycje wymiany, odmontowuje partycje inne ni� root i przemontowuje partycj� root jako read-only. W pliku tym jest co� takiego:

echo -n "Deactivating swap... "
swapoff -a
echo "done."
Ci�g tych polece� wy��cza pliki wymiany i wy�wietla na konsoli info. Zmienimy tylko parametr -a polecenia swapoff na /dev/hda3 lub jaki tam macie, przeformatowujemy partycj� na DOS16 i koniec.

A jednak nie.

Dlaczego to jeszcze nie koniec?

Nie koniec, bo nie ma pliku win386.swp na naszej �wie�o sformatowanej partycji. Windows (ale chyba tylko 95) sam powinien sobie utworzy� brakuj�cy plik, ale nie zawsze si� tak dzieje. Wi�c mo�e mu pomo�emy. Sami utworzymy brakuj�cy plik. Potrzebny do tego b�dzie katalog do podmontowania �wie�o uwtorzonej partycji dosowej (najlpepiej pusty, ale niekoniecznie, bo z moich do�wiadcze� wynika, �e mo�na podmontowa� filesystem tak�e w niepustym katalogu). Fragment tego pliku po wszelkich przer�bkach powinien wygl�da� mniej wi�cej tak:

echo -n "Deactivating swap... "
swapoff /dev/hda3
mkdosfs -n SWAP_SPACE /dev/hda3
mount -t msdos -o rw /dev/hda3 /katalog/w/ktorym/montujemy
dd if=/dev/zero of=/katalog/w/ktorym/montujemy/win386.swp bs=1k count=0
umount /dev/hda3
echo "done."

Przetestuj to jeszcze i ciesz si�! :)))

3.2 RedHat

Zmiany w pliku /etc/rc.d/rc.sysinit

Poszukaj w pliku /etc/rc.d/rc.sysinit (gdzie� na pocz�tku) linii wygladaj�cej mniej wi�cej tak:

# Start up swapping.
echo "Activating swap partitions"
swapon -a

Aktywuje ona partycje wymiany na wszystkich partycjach oznaczonych w pliku /etc/fstab jako swap. My potrzebujemy uaktywni� tylko jedn� partycj�, mo�emy zmieni� parametr -a na konkretn� warto�� u mnie to /dev/hda3). Ponadto musimy jeszcze wczesniej z naszej partycji wymiany windowsa zrobic swapa linuxowego. S�u�y do tego polecenie mkswap. Po modyfikacji ta cz�� pliku powinna wygl�da� mniej wi�cej tak:

# Start up swapping.
echo "Activating swap partitions"
mkswap /dev/hda3
swapon /dev/hda3

W tej cz�ci pliku ju� koniec ze zmianami, teraz przenosimy si� bli�ej ko�ca /etc/rc.d/rc.sysinit. Tam szukamy czego� podobnego do:

# Right, now turn on swap in case we swap to files.
echo "Enabling swap space."
swapon -a 2>&1 | grep -v "busy"

Tutaj te� parametr -a zmie� na oznaczenie swojej partycji wymiany (np. /dev/hda3).
I to ju� wszystkie zmiany w tym pliku, przejd�my do nast�pnego.

Zmiany w pliku /etc/rc.d/init.d/halt

Ten plik jest wykonywany w czasie zatrzymania lub restartu systemu, czyli po wydaniu polecenia shutdown z odpowiednimi parametrami lub po naci�ni�ciu trzech 'magicznych' klawiszy (tzn. Ctrl+Alt+Del). Zanim zaczniesz cokolwiek zmienia�, chc�c unikn�� b��d�w musisz najpierw mie� zainstalowany pakiet mkdosfs. Pisa�em wcze�niej jak to zrobi�.

No to zaczynamy. W tym pliku (tzn. /etc/rc.d/init.d/halt) nie b�dziesz musia� du�o zmienia�. Znajd� co� podobnego do tego:

# Turn off swap, then unmount file systems.
echo "Turning off swap"
swapoff -a

Tutaj jak wsz�dzie zmieniamy parametr -a na konkretne oznaczenie partycji wymiany i wywo�anie polecenia ma posta�, np. swapoff /dev/hda3.
Teraz musimy jeszcze nada� partycji wymiany format dosowy, po to, aby windows m�g� z niej skorzysta�. Robimy to poleceniem mkdosfs. Ta cz�� pliku ju� po wszelkich zmianach wygl�da u mnie nast�puj�co:

# Turn off swap, then unmount file systems.
echo "Turning off swap"
swapoff /dev/hda3
mkdosfs -n SWAP_SPACE /dev/hda3

Parametr -n z warto�ci� SWAP_SPACE nadaje tworzonej partycji dosowej etykiet� SWAP_SPACE. I to by�oby ju� prawie wszystko, pozosta�o tylko odtworzy� brakuj�cy plik wymiany windowsa win386.swp (tu mo�esz zobaczy� dlaczego).

A teraz poka�� jak. Po komendzie mkdosfs dopisz jeszcze to:

mount -t msdos -o rw /dev/hda3 /katalog/w/ktorym/montujemy
dd if=/dev/zero of=/katalog/w/ktorym/montujemy/win386.swp bs=1k count=0
umount /dev/hda3
Ju� mo�esz rozkoszowa� si� swoim dzie�em... :)))

3.3 Slackware

W Slacku te� musisz poprawi� tylko dwa pliki, w zasadzie zrobi� to samo co z RedHatem i Debianem, tylko �e w innych plikach... Opisywany tu przyk�ad pochodzi ze Slackware 3.6, ale z pewno�ci� w innych wersjach jest tak samo.

Zmiany w pliku /etc/rc.d/rc.S

Plik /etc/rc.d/rc.S jest wykonywany podczas inicjalizacji systemu. Za ka�dym razem, gdy system wstaje, plik ten jest analizowany i wykonywane s� zawarte w nim polecenia. Nam chodzi o to, �eby nasza partycja (/dev/hda3) zosta�a "przerobiona" na swapa dla Linuxa. Na samym pocz�tku pliku znajdziecie co� takiego:

# enable swapping
/sbin/mkswap -a
/sbin/swapon -a

Polecenia te uruchamiaj� jako swap wszystkie partycje, kt�re s� oznaczone w pliku /etc/fstab jako przeznaczone do swapowania. Zamie� parametr -a na konkretn� partycj� (�eby u�ywa� tej jednej), albo we wspomnianym pliku opisz j� jako miejsce na swap. Po operacji plik /etc/rc.d/rc.6 powinien wygl�da� np. tak:

# enable swapping
/sbin/mkswap /dev/hda3
/sbin/swapon /dev/hda3
albo niech pozostanie w oryginalnej postaci, a w /etc/fstab powinno pojawi� si� co� takiego:
/dev/hda3 swap swap defaults 0 0

Zmiany w pliku /etc/rc.d/rc.6

Ten pliczek jest z kolei wykonywany przy zamykaniu systemu. To tutaj musimy zawrze� linijki odpowiadaj�ce za przywr�cenie windzie straconego swapa. Poszukaj czego� takiego:

# Turn off swap, then unmount local file systems.
echo "Turning off swap."
swapoff -a
Tutaj zmiany nie b�d� polega�y ju� tylko na prostej kosmetyce. Opcj� -a tradycyjnie przemianowujemy na oznaczenie partycji wymiany oraz musimy zrobi� co� jeszcze. Mianowicie utowrzy� na tej�e partycji filesystem dosowy i odtworzy� swapa pani windzie. Pierwsze za�atwiamy u�ywaj�c narz�dzia mkdosfs, a konkretniej:
mkdosfs -n SWAP_SPACE /dev/hda3
Teraz wystarczy ju� tylko odtworzy� plik win386.swp na nowiutkim filesystemie. (Chcesz wiedzie� po co? - kliknij tutaj!) Aby tego dokona� musisz dysponowa� katalogiem do podmontowania filesystemu przed chwil� utworzonego (no, oczywi�cie mo�esz zapisywa� bezpo�rednio na partycj�, ale nie polecam :))). Najpro�ciej chyba tak:
mount -t msdos -o rw /dev/hda3 /katalog/w/ktorym/montujemy
dd if=/dev/zero of=/katalog/w/ktorym/montujemy/win386.swp bs=1k count=0
umount /dev/hda3
To utworzy brakuj�cy plik i ju� po k�opocie. B�dzie to plik pusty o rozmiarze 0, ale taki w�a�nie powinien by�.

Sprawd� co zdzia�a�e�/a� i odpocznij troch� :)))

4. Od autora

Mam nadziej�, �e cho� troch� pomog�em paru osobom. Wszelkie pytania dotycz�ce tego dokumentu prosz� kierowa� na adres: sniff@alpha.net.pl. Krytyka wszelkiego rodzaju mile widziana. Prosi�bym o kontakt u�ytkownik�w dystrybucji innych ni� trzy opisane, aby w przysz�o�ci rozbudowa� ten dokument.

Mo�e znajdzie si� osoba, kt�ra pr�bowa�a przenie�� to mini-JTZ w realia win98. Prosz� niech opisze wra�enia i prze�le mi, bo moja edukacje w �wiecie windows�w sko�czy�a sie na 95 i to nie OSR2.

Dzi�kuj� za uwag�.

#

Hosting by: Hurra Communications Sp. z o.o.
Generated: 2007-01-26 18:02:23