Gentoo Logo

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
(Notice how fdisk only allows Partition #1 to be re-created starting at a minimum of cylinder 5)
(Had you attempted to delete & re-create the SGI Volume Header this way, this is the same issue
 you would have encountered.)
(In our example, we want /boot to be 50MB, so we start it at cylinder 51 (the Volume Header needs to
 start at cylinder 0, remember?), and set its ending cylinder to 101, which will roughly be 50MB (+/- 1-5MB))

Command (m for help): d
Partition number (1-16): 9
(Delete Partition #9 (SGI Volume Header))

Command (m for help): n
Partition number (1-16): 9
First cylinder (0-50, default 0): 0
 Last cylinder (0-50, default 50): 50
(Re-Create Partition #9, ending just before Partition #1)

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)

(Usuwamy istniejące partycje)
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)

(Sprawdzanie utworzonej partycji przy pomocy komendy "p")

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

(Tworzenie partycji /boot)

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1

(Wciśnięcie Enter dla wybrania ustawień domyślnych)

First cylinder (1-19870, default 1):
Last cylinder or +size or +sizeM or +sizeK (1-19870, default 19870): +20M

(Kolejny test sprawdzający utworzene partycje - klawisz 'p')
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

(Pozostałe wolne miejsce przeznaczamy na partycję rozszerzoną)

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
e
Partition number (1-4): 2

(Po raz kolejny by wybrać domyślne ustawienie wciskamy Enter)

First cylinder (41-19870, default 41):
Using default value 41

(Używamy całego dostępnego miejsca wciskając po prostu Enter)
Last cylinder or +size or +sizeM or +sizeK (41-19870, default 19870):
Using default value 19870

(Następnie partycja root, w związku z tym, że /usr i /var będą
znajdowały się na osobnych partycjach root może być mała. Polecamy dostosowanie
rozmiaru do własnych potrzeb.)

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

(... kontynuujemy dla innych partycji ...)

(Partycja wymiany, powinna mieć co najmniej 250MB swap, optymalnie 1GB)

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

(Sprawdzanie tablicy partycji, do końca pozostała jeszcze jedna mała rzecz...)

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

(Dlaczego numer #10, czyli partycja wymiany wciąż ma ustawiony typ 83?)

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)

(Poprawiamy i sprawdzamy...)

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

(Zapisujemy naszą tablicę partycji)

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).

Zaktualizowano 27 lipca 2010

Oryginalna wersja tego dokumentu została po raz ostatni zaktualizowana 17 października 2011. Jeśli chcesz pomóc w aktualizacji tego dokumentu do najnowszej wersji, skontaktuj się z Łukaszem Damentko, koordynatorem polskiego projektu tłumaczeń dokumentacji Gentoo.

Podsumowanie: Aby móc zainstalować Gentoo należy stworzyć wymagane partycje. W tym rozdziale opisano w jaki sposób można je stworzyć.

Donate to support our development efforts.

Copyright 2001-2012 Gentoo Foundation, Inc. Questions, Comments? Contact us.