|
1.
Wprowadzenie do urządzeń blokowych
Urządzenia blokowe
Rzućmy okiem na aspekty Gentoo Linux oraz ogólnie Linuksa związane z dyskami.
Omówimy systemy plików, partycje oraz urządzenia blokowe. Następnie
opiszemy proces podziału twardego dysku tak, aby jak najlepiej wykorzystać
dostępne miejsce.
Zaczniemy od omówienia urządzeń blokowych. Najpopularniejszym z nich
prawdopodobnie jest /dev/sda reprezentujący w Linuksie pierwszy
napęd. Napędy SATA i SCSI otrzymują nazwy z rodziny /dev/sd*.
Dzięki libata, nawet stare napędy IDE są nazywane /dev/sd*.
Urządzenie to dawniej nazywało się /dev/hda.
Urządzenia blokowe stanowią abstrakcyjny interfejs dysków. Programy użytkownika
mogą z nich korzystać nie martwiąc się o to czy napędy są typu IDE, SCSI czy
jakiegoś innego. Przechowywane dane adresuje się jako ciąg 512-bajtowych bloków.
Partycje
Teoretycznie można przeznaczyć na system cały dysk, ale zazwyczaj jest to
rozwiązanie bardzo niepraktyczne. Dlatego dzielimy napęd na mniejsze i
łatwiejsze w zarządzaniu urządzenia blokowe, nazywane partycjami.
1.
Projektowanie schematu podziału
Jak dużo jak wielkich?
Ilość partycji ściśle zależy od danego środowiska. Na przykład, jeśli
administrujemy systemem mającym wielu użytkowników, prawdopodobnie uznamy za
stosowne oddzielenie /home aby poprawić bezpieczeństwo i uprościć
tworzenie kopii zapasowych. Jeżeli docelowym zastosowaniem Gentoo jest serwer
poczty, na osobnej partycji powinno się umieścić /var, gdzie
przechowywane są listy. Dobry wybór systemu plików może znacznie zwiększyć
wydajność. Oddzielenie /opt jest dobrym rozwiązaniem na serwerach
gier, gdyż większość używanego oprogramowania zostanie tam zainstalowana. Powód
jest podobny jak przy /home: bezpieczeństwo i kopie zapasowe. Na
pewno warto zapewnić dużo wolnego miejsca na /usr, ponieważ będą
tam się znajdowały nie tylko dane wszystkich zainstalowanych pakietów, ale
również ważące 500 MB drzewo Portage.
Jak widać, wiele zależy od oczekiwanego rezultatu. Wydzielenie partycji
lub woluminów ma wiele zalet:
-
Mamy możliwość dostosowania jak najwydajniejszego dla danego zastosowania
systemu plików dla poszczególnych partycji lub woluminów.
-
W przypadku zapełnienia partycji przez nieprawidłowo działające narzędzie, nie
ma to wpływu na całość systemu.
-
Jeśli to konieczne, można skrócić czas kontroli systemów plików, gdyż
można jednocześnie dokonywać jej na kilku partycjach (ma to znaczenie
zwłaszcza na sprzęcie z wieloma dyskami).
-
Montując część partycji lub woluminów z opcjami read-only (tylko do odczytu),
nosuid (ignorowane są bity setuid), noexec (ignorowane są bity wykonywalności)
itd. można znacznie poprawić bezpieczeństwo.
Niestety zbyt rozbudowany podział niesie ze sobą spore niebezpieczeństwo: źle
zaplanowany zaowocuje pustkami na zbyt dużych i ciasnotą na zbyt małych
partycjach. Pamiętać należy również, że na dyskach SCSI i SATA może znajdować
się maksymalnie 15 partycji.
1.
Partycjonowanie dysku za pomocą fdisk na MIPS
Komputery SGI: Tworzenie SGI Disk Label
Wszystkie dyski w systemie SGI wymagają SGI Disk Label, pełniącego
podobną funkcję jak etykiety Suna i MS-DOS - przechowują informacje
o partycjach. Stworzenie nowego SGI Disk Label zaowocuje powstaniem dwóch nowych
partycji:
-
SGI Volume Header (partycja dziewiąta): ta partycja jest potrzebna,
to z niej skorzysta program ładujący arcboot oraz to na niej będą w
niektórych przypadkach znajdowały się kernele.
-
SGI Volume (partycja jedenasta): Partycja ta spełnia podobne funkcje
do zajmującej cały dysk Sun Disklabel. Obejmuje ona całą dostępną przestrzeń
i nie powinna być modyfikowana. Nie ma żadnego specjalnego zadania, poza
pomaganiem PROM-owi w jakichś nieudokumentowanych operacjach (lub używana
jest w jakiś sposób przez IRIX).
Ostrzeżenie:
SGI Volume Header musi rozpoczynać się od cylindra 0. Jeśli zrobimy
inaczej system nie uruchomi się z tego dysku.
|
Następny przykład zaczerpnięto z sesji fdisk. Należy go przeczytać i
zmodyfikować stosownie do potrzeb...
Listing 1.1: Zakładanie SGI Disklabel |
# fdisk /dev/sda
Command (m for help): x
Expert command (m for help): m
Command action
b move beginning of data in a partition
c change number of cylinders
d print the raw data in the partition table
e list extended partitions
f fix partition order
g create an IRIX (SGI) partition table
h change number of heads
m print this menu
p print the partition table
q quit without saving changes
r return to main menu
s change number of sectors/track
v verify the partition table
w write table to disk and exit
Expert command (m for help): g
Building a new SGI disklabel. Changes will remain in memory only,
until you decide to write them. After that, of course, the previous
content will be unrecoverably lost.
Expert command (m for help): r
Command (m for help): p
Disk /dev/sda (SGI disk label): 64 heads, 32 sectors, 17482 cylinders
Units = cylinders of 2048 * 512 bytes
----- partitions -----
Pt# Device Info Start End Sectors Id System
9: /dev/sda1 0 4 10240 0 SGI volhdr
11: /dev/sda2 0 17481 35803136 6 SGI volume
----- Bootinfo -----
Bootfile: /unix
----- Directory Entries -----
Command (m for help):
|
Uwaga:
Jeśli na dysku znajduje się już SGI Disklabel, fdisk nie pozwoli na stworzenie
nowego. Są dwa sposoby, żeby to ominąć. Pierwszym jest stworzenie etykiety
SUN lub MS-DOS, zapisanie zmian i ponowne uruchomienie fdisk. Drugim jest
nadpisanie tablicy partycji następującym poleceniem:
dd if=/dev/zero of=/dev/sda bs=512 count=1.
|
Nadawanie właściwego rozmiaru SGI Volume Header
Ważne:
Ten krok okazuje się często bardzo przydatny, w związku z pewnymi błędami w
programie fdisk, który powoduje, że SGI Volume Header nie jest tworzony
w prawidłowy sposób, tak że jego początkowy i końcowy cylinder jest ustawiany
na 0. Teraz opiszemy jak obejść ten błąd.
|
Gdy stworzysz SGI Disklabel, możesz przystąpić do definiowania partycji.
W powyższym przykładzie, dwie z nich zostały już przygotowane. Pełnią one
specjalne funkcje i nie mogą być wykorzystane w normalny sposób. Jakkolwiek,
instalując Gentoo musimy załadować program ładujący i obrazy jądra bezpośrednio
do nagłówka woluminu, gdyż nie ma w Portage wspieranego menadżera uruchamiania.
Nagłówek woluminu może przechowywać maksymalnie osiem kerneli o dowolnym
rozmiarze i ośmioznakowej nazwie.
Proces powiększania woluminu nagłówka nie jest prosty - trzeba zastosować
kilka sztuczek. Nie można po prostu usunąć i dodać go ponownie, ze
względu na dziwne zachowanie fdisk. W poniższym przykładzie, utworzymy
50MB nagłówek woluminu oraz 50MB partycję boot. Rzeczywisty
podział Twojego dysku może być inny, przykład służy tylko
zilustrowaniu czynności:
Listing 1.1: Prawidłowa zmiana rozmiaru Nagłówka Woluminu SGI |
Command (m for help): n
Partition number (1-16): 1
First cylinder (5-8682, default 5): 51
Last cylinder (51-8682, default 8682): 101
Command (m for help): d
Partition number (1-16): 9
Command (m for help): n
Partition number (1-16): 9
First cylinder (0-50, default 0): 0
Last cylinder (0-50, default 50): 50
|
Jeżeli nie jesteśmy pewni w jaki sposób obsługiwać fdisk będziemy
musieli zajrzeć do dalszej części tego podręcznika po instrukcje na temat
partycjonowania na komputerach Cobalt. Generalne zasady są podobne, należy
jedynie pamiętać o pozostawieniu volume header i partycji niepołączonych.
Kiedy już to skończymy resztę partycji tworzymy według własnych potrzeb. Po
partycjonowaniu powinniśmy pamiętać o ustawieniu ID naszej partycji SWAP na
wartość 82. Domyślnie wartość ta jest ustawiania na 83.
Kiedy partycje są już utworzone możemy przejść do części Tworzenie systemów plików.
Komputery Cobalt: Partycjonowanie dysku
BOOTROM na komputerach Cobalt oczekuje jedynie obecności MS-DOS MBR, więc
partycjonowanie dysku jest stosunkowo proste. Dokonuje się tego dokładnie tak
jak na komputerze Intel x86. Jednak jest również kilka rzeczy, o których
warto pamiętać.
-
Dla firmware komputerów Cobalt /dev/sda1 musi być partycją
linuksową sformatowaną w systemie plików EXT2 Revision 0. Partycje
EXT2 Revision 1 NIE BĘDĄ DZIAŁAĆ (BOOTROM Cobaltów radzi sobie
jedynie z EXT2r0).
-
Wspomniana wyżej partycja musi zawierać obraz ELF o nazwie
vmlinux.gz w swoim katalogu głównym, aby móc go załadować jako
jądro.
Z tego powodu radzimy utworzenie ~20MB partycji /boot sformatowanej
w systemie plików EXT2r0, na której będą instalowane jądra dla CoLo. Pozwala to
na korzystanie z nowocześniejszych systemów plików, jak EXT3 czy ReiserFS na
partycji głównej.
Zakładamy, że została utworzona w celu późniejszego zamontowania partycja
/boot na urządzeniu /dev/sda1. Jeśli ma być to także
urządzenie partycji głównej nie można zapominać o spełnieniu oczekiwań PROM.
Kontynuując... Do stworzenia partycji należy wpisać polecenie fdisk
/dev/sda. Główne polecenia jakie należy znać to:
-
o: Wyczyszczenie starej i stworzenie nowej czystej tablicy partycji
MS-DOS
-
n: Nowa partycja
-
t: Zmienia typ partycji
- Typ 82 to Linux Swap, 83 to Linux FS
-
d: Usuwa partycję
-
p: Wyświetla tablicę partycji
-
q: Wyjście bez zapisywania
-
w: Wyjście z zapisywaniem
Listing 1.1: Partycjonowanie dysku |
# fdisk /dev/sda
The number of cylinders for this disk is set to 19870.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
(e.g., DOS FDISK, OS/2 FDISK)
Command (m for help): o
Building a new DOS disklabel. Changes will remain in memory only,
until you decide to write them. After that, of course, the previous
content won't be recoverable.
The number of cylinders for this disk is set to 19870.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
(e.g., DOS FDISK, OS/2 FDISK)
Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)
Command (m for help): p
Disk /dev/sda: 10.2 GB, 10254827520 bytes
16 heads, 63 sectors/track, 19870 cylinders
Units = cylinders of 1008 * 512 = 516096 bytes
Device Boot Start End Blocks Id System
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-19870, default 1):
Last cylinder or +size or +sizeM or +sizeK (1-19870, default 19870): +20M
Command (m for help): p
Disk /dev/sda: 10.2 GB, 10254827520 bytes
16 heads, 63 sectors/track, 19870 cylinders
Units = cylinders of 1008 * 512 = 516096 bytes
Device Boot Start End Blocks Id System
/dev/sda1 1 40 20128+ 83 Linux
Command (m for help): n
Command action
e extended
p primary partition (1-4)
e
Partition number (1-4): 2
First cylinder (41-19870, default 41):
Using default value 41
Last cylinder or +size or +sizeM or +sizeK (41-19870, default 19870):
Using default value 19870
Command (m for help): n
Command action
l logical (5 or over)
p primary partition (1-4)
l
First cylinder (41-19870, default 41):<Wciskamy Enter>
Using default value 41
Last cylinder or +size or +sizeM or +sizeK (41-19870, default 19870): +500M
Command (m for help): n
Command action
l logical (5 or over)
p primary partition (1-4)
l
First cylinder (17294-19870, default 17294): <Wciskamy Enter>
Using default value 17294
Last cylinder or +size or +sizeM or +sizeK (1011-19870, default 19870):
<Wciskamy Enter>
Using default value 19870
Command (m for help): p
Disk /dev/sda: 10.2 GB, 10254827520 bytes
16 heads, 63 sectors/track, 19870 cylinders
Units = cylinders of 1008 * 512 = 516096 bytes
Device Boot Start End Blocks ID System
/dev/sda1 1 21 10552+ 83 Linux
/dev/sda2 22 19870 10003896 5 Extended
/dev/sda5 22 1037 512032+ 83 Linux
/dev/sda6 1038 5101 2048224+ 83 Linux
/dev/sda7 5102 9165 2048224+ 83 Linux
/dev/sda8 9166 13229 2048224+ 83 Linux
/dev/sda9 13230 17293 2048224+ 83 Linux
/dev/sda10 17294 19870 1298776+ 83 Linux
Command (m for help): t
Partition number (1-10): 10
Hex code (type L to list codes): 82
Changed system type of partition 10 to 82 (Linux swap)
Command (m for help): p
Disk /dev/sda: 10.2 GB, 10254827520 bytes
16 heads, 63 sectors/track, 19870 cylinders
Units = cylinders of 1008 * 512 = 516096 bytes
Device Boot Start End Blocks ID System
/dev/sda1 1 21 10552+ 83 Linux
/dev/sda2 22 19870 10003896 5 Extended
/dev/sda5 22 1037 512032+ 83 Linux
/dev/sda6 1038 5101 2048224+ 83 Linux
/dev/sda7 5102 9165 2048224+ 83 Linux
/dev/sda8 9166 13229 2048224+ 83 Linux
/dev/sda9 13230 17293 2048224+ 83 Linux
/dev/sda10 17294 19870 1298776+ 82 Linux Swap
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
#
|
I to wszystko. Kolejny punkt programu to Tworzenie
systemów plików.
1.
Tworzenie systemów plików
Wprowadzenie
Po utworzeniu partycji nadszedł czas na założenie na nich systemów plików.
Jeśli jest nam obojętne jakie wybierzemy lub jesteśmy zadowoleni z domyślnych
ustawień w podręczniku, przechodzimy do paragrafu Zakładanie systemów plików na partycji.
W przeciwnym polecamy dalszą lekturę aby dowiedzieć się więcej na ich temat.
Systemy plików
Jądro Linux obsługuje wiele różnych systemów plików. W tym tekście omówimy ext2,
ext3, ReiserFS, XFS i JFS, ponieważ są one najczęściej używane w systemach
linuksowych.
ext2 to sprawdzony i popularny linuksowy system plików, którego główną
wadą jest to, że nie posiada księgowania. Powoduje to, że jego regularne
kontrole przy starcie systemu bywają długotrwałe. Obecnie istnieją nowoczesne
systemy plików z księgowaniem, które można szybko sprawdzić i to właśnie te
polecamy naszym użytkownikom. Księgowanie zapobiega długotrwałym kontrolom
podczas uruchamiania systemu oraz ewentualnym błędom spójności danych. Jeśli
zamierzamy instalować Gentoo na bardzo mały dysku (mniejszym niż 4GB) musimy
przekazać ext2 informacje o rezerwacji wystarczającej ilości inode w trakcie
tworzenia systemu plików poprzez wydanie komendy
mke2fs -T small /dev/<device>.
ext3 to odpowiednik ext2 posiadający księgowanie w trybach full oraz
ordered, dzięki czemu w razie awarii dane odzyskiwane są błyskawicznie. ext3
używa indeksu drzewa HTree, który zapewnia wysoką wydajność w prawie wszystkich
zastosowaniach. W skrócie, ext3 to bardzo dobry i niezawodny system plików.
Jeśli zamierzamy instalować Gentoo na bardzo mały dysku (mniejszym niż 4GB)
musimy przekazać ext2 informacje o rezerwacji wystarczającej ilości inode w
trakcie tworzenia systemu plików poprzez wydanie komendy
mke2fs -j -T small /dev/<device>.
JFS to bardzo wydajny system plików IBM wyposażony w księgowanie. Jest
lekki, szybki i godny polecenia. Oparto go na drzewie B+ dzięki czemu doskonale
sprawdza się w wielu bardzo różnych zastosowaniach.
ReiserFS to system plików z księgowaniem oparty na drzewie B+. Wykazuje
się doskonałą wydajnością przy obsłudze bardzo wielu małych plików (kosztem
zwiększonego obciążenia procesora). Nie jest tak aktywnie rozwijany jak inne
systemy plików.
XFS to system plików z księgowaniem metadanych, który został
zaprojektowany z myślą o skalowalności i nie posiada wielu dodatkowych
możliwości. Nie jest on również zbyt odporny na problemy sprzętowe.
Zakładanie systemu plików na partycji
Aby założyć na woluminie lub partycji system plików, można skorzystać z
odpowiedniego dla każdego z nich narzędzia:
| System plików |
Program do zakładania |
| ext2 |
mke2fs |
| ext3 |
mke2fs -j |
| reiserfs |
mkreiserfs |
| xfs |
mkfs.xfs |
| jfs |
mkfs.jfs |
Na przykład, aby założyć ext2 na partycji boot (w naszym przypadku
/dev/sda1) oraz ext3 na partycji root (w naszym przypadku
/dev/sda3), należy wykonać następujące polecenia:
Listing 1.1: Zakładanie na partycji systemu plików |
# mke2fs /dev/sda1
# mke2fs -j /dev/sda4
|
Teraz należy stworzyć systemy plików na partycjach (lub woluminach).
Ostrzeżenie:
Jeżeli instalujemy system na serwerze Cobalt musimy pamiętać, że partycja
/dev/sda1 musi być partycją rodzaju EXT2 revision 0. Każdy
inny typ partycji NIE BĘDZIE DZIAŁAŁ POPRAWNIE. Partycję możemy
sformatować przy pomocy polecenia mke2fs -r 0 /dev/sda1.
|
Aktywacja partycji wymiany
Aby utworzyć partycję wymiany skorzystamy z programu mkswap.
Listing 1.1: Tworzenie partycji wymiany |
# mkswap /dev/sda2
|
Do aktywowania partycji wymiany użyjemy programu swapon:
Listing 1.1: Aktywacja partycji wymiany |
# swapon /dev/sda2
|
Partycję wymiany tworzymy przy pomocy poleceń pokazanych powyżej.
1.
Montowanie
Po założeniu partycji i utworzeniu na nich systemów plików nadszedł czas na ich
zamontowanie. Służy do tego program mount. Nie zapominamy o utworzeniu
odpowiednich katalogów dla montowanych partycji. W przykładzie zamontujemy
partycje boot i root:
Listing 1.1: Montowanie partycji |
# mount /dev/sda3 /mnt/gentoo
# mkdir /mnt/gentoo/boot
# mount /dev/sda1 /mnt/gentoo/boot
|
Uwaga:
Jeżeli chcemy przenieść /tmp na osobną partycję,
nie należy zapomnieć po zamontowaniu odpowiednio zmienić praw dostępu: chmod
1777 /mnt/gentoo/tmp. Dotyczy to również /var/tmp.
|
Konieczne będzie także zamontowanie systemu plików proc (wirtualny interfejs
jądra) w /proc, ale najpierw musimy umieścić odpowiednie pliki na
partycjach.
Kolejny rozdział to (Wypakowywanie plików
instalacyjnych).
|