Wikipedysta:Karol Ossowski/Dysk twardy + GNU/Linux
W Linuksie identyfikatorami dysków twardych są specjalne pliki blokowe:
- /dev/hda - urządzenie podpięte na skraju pierwszej taśmy IDE (Primary Master)
- /dev/hdb - urządzenie podpięte w połowie pierwszej taśmy IDE (Primary Slave)
- /dev/hdc - urządzenie podpięte na skraju drugiej taśmy IDE (Secondary Master)
- /dev/hdd - urządzenie podpięte w połowie drugiej taśmy IDE (Secondary Slave)
To czy urządzenie jest podłączone w trybie Master czy Slave może regulować również specjalna zworka umieszczana z tyłu dysku. Warto jeszcze dodać, że "urządzeniem" w podanym wyżej opisie może być zarówno dysk twardy jak i również jeden napędów optycznych (CD-ROM, nagrywarka itp.)
Podstawową jednostką określającą fizyczne położenie danych na dysku są trzy wartości C,H,S oznaczające odpowiednio:
Cylinder - numer cylindra
Head - numer głowic
Sector - numer sektora
Większość systemów operacyjnych nie korzysta jednak z adresowania CHS gdyż jest ono zbyt skomplikowane. W zamian za to OS (skrót od Operating System) przeliczają wartości C,H,S na logiczne numery sektorów. Ten sposób adresowania danych na dysku twardym nosi nazwę LBA (z ang. Logical Block Addressing). [dok. nt. geometrii dysku]
Struktura dysku twardego
[edytuj]W dużym uproszczeniu można powiedzieć, że dysk twardy składa się z sektora MBR oraz z 4 partycji, na których można przechowywać dane.
MBR
[edytuj]Master Boot Record znajduje się w pierwszym sektorze dysku twardego. Jest to miejsce gdzie swoje dane przechowuje bootloader (w Linuksie jest to np. lilo lub grub) oraz gdzie znajduje się tzw. tablica partycji. Tablica partycji z kolei zawiera informacje nt. położenia(w notacji CHS i LBA) i typie wspomnianych wyżej 4 partycji.
Partycje
[edytuj]Na każdym dysku mogą znajdować się 4 partycje podstawowe lub 3 partycje podstawowe i 1 partycja rozszerzona. Linux wykrywa je wg kolejności w jakiej są one wpisane w tablicy partycji i identyfikuje - tak jak to było w przypadku samych dysków - przez specjalne pliki blokowe:
<dysk>1 <dysk>2 <dysk>3 <dysk>4
gdzie: <dysk> to jedna z nazw plików blokowych będących identyfikacjami dysku. np.:
/dev/hda1 /dev/hdc4 /dev/hdb2
Partycja rozszerzona, która również może znaleźć się w tablicy MBR, to specjalny typ partycji, podzielony na jeden lub więcej mniejszych kawałków - tzw. partycji logicznych (można też się spotkać z określeniem: dyski logiczne). System wtedy identyfikuje takie partycje/dyski logiczne również za pomocą specjalnych plików blokowych:
<dysk>5 <dysk>6 <dysk>7 <dysk>8 . . . . <dysk>n
czyli np.:
/dev/hda5 /dev/hda6 /dev/hdc5 /dev/hdb9
Partycje logiczne przyjmują numery 5, 6, 7 itd. nawet jeśli nie istnieją wszystkie partycje podstawowe. Np. jeśli na dysku podłączonego w trybie Primary Master pierwszą partycję mamy rozszerzoną, a drugą podstawową, to Linux, będzie wykrywał te partycje w następujący sposób:
/dev/hda1 > partycja rozszerzona /dev/hda5 \ /dev/hda6 > partycje logiczne /dev/hda7 / /dev/hda2 > partycja podstawowa
Typy partycji
[edytuj]W tablicy partycji poza informacją o położeniu partycji (czy też dysków logicznych) znajduje się również informacja o ich typie. Typ partycji jest określany przez unikalny kod szesnastkowy. GNU/Linux wykrywa następujące typ partycji (wydruk programu cfdisk):
01 FAT12 24 NEC DOS 81 Minix / old Linux C1 DRDOS/sec (FAT-12) 02 XENIX root 39 Plan 9 82 Linux swap / Solaris C4 DRDOS/sec (FAT-16 < 03 XENIX usr 3C PartitionMagic recov 83 Linux C6 DRDOS/sec (FAT-16) 04 FAT16 <32M 40 Venix 80286 84 OS/2 hidden C: drive C7 Syrinx 05 Extended 41 PPC PReP Boot 85 Linux extended DA Non-FS data 06 FAT16 42 SFS 86 NTFS volume set DB CP/M / CTOS / ... 07 HPFS/NTFS 4D QNX4.x 87 NTFS volume set DE Dell Utility 08 AIX 4E QNX4.x 2nd part 88 Linux plaintext DF BootIt 09 AIX bootable 4F QNX4.x 3rd part 8E Linux LVM E1 DOS access 0A OS/2 Boot Manager 50 OnTrack DM 93 Amoeba E3 DOS R/O 0B W95 FAT32 51 OnTrack DM6 Aux1 94 Amoeba BBT E4 SpeedStor 0C W95 FAT32 (LBA) 52 CP/M 9F BSD/OS EB BeOS fs 0E W95 FAT16 (LBA) 53 OnTrack DM6 Aux3 A0 IBM Thinkpad hiberna EE EFI GPT 0F W95 Ext'd (LBA) 54 OnTrackDM6 A5 FreeBSD EF EFI (FAT-12/16/32) 10 OPUS 55 EZ-Drive A6 OpenBSD F0 Linux/PA-RISC boot 11 Hidden FAT12 56 Golden Bow A7 NeXTSTEP F1 SpeedStor 12 Compaq diagnostics 5C Priam Edisk A8 Darwin UFS F4 SpeedStor 14 Hidden FAT16 <32M 61 SpeedStor A9 NetBSD F2 DOS secondary 16 Hidden FAT16 63 GNU HURD or SysV AB Darwin boot FD Linux raid autodetec 17 Hidden HPFS/NTFS 64 Novell Netware 286 B7 BSDI fs FE LANstep 18 AST SmartSleep 65 Novell Netware 386 B8 BSDI swap FF BBT 1B Hidden W95 FAT32 70 DiskSecure Multi-Boo BB Boot Wizard hidden 1C Hidden W95 FAT32 (LB 75 PC/IX BE Solaris boot 1E Hidden W95 FAT16 (LB 80 Old Minix BF Solaris
Jak widać powyżej, do Linuksa odnoszą się 2 typy partycji: 'Linux Swap / Solaris' i 'Linux' o kodach odpowiednio 82 i 83. Partycje 'Linux Swap / Solaris' w systemach GNU/Linux są tzw. partycjami wymiany i są one wykorzystywane do zwiększania wydajności pamięci RAM komputera.
Drugi typ noszący nazwę po prostu 'Linux' jest typem przeznaczonym do przechowywania danych na systemach Linuksowych, czyli jest on zgodny z podstawowym zastosowaniem dysków twardych :)
Rozruch komputera a tablica partycji
[edytuj]W konfiguracji BIOSu komputera można ustawić kolejność urządzeń rozruchowych (boot device) jakie ma być użyte do załadowania systemu operacyjnego. BIOS w czasie inicjowania pracy użyje pierwsze aktywne urządzenie, które zostało tam ustawione. Standardowo w większości BIOSów jako pierwszego urządzenia rozruchowego używa się stacji dyskietek, dalej jeśli nie ma żadnej dyskietki włożonej do stacji, wybierany jest napęd optyczny (np. CD-ROM), a dopiero na końcu jeśli i w napędzie optycznym nie ma płyty zdolnej do załadowania systemu operacyjnego, komputer wybiera dysk twardy. Wówczas, gdy BIOS "zwróci się" do dysku twardego o załadowanie systemu operacyjnego, do pamięci ładowany jest sektor MBR. Komputer próbuje uruchomić tzw. bootloadera, czyli program zarządzający procesem ładowania systemu/ów operacyjnego/ych zainstalowanym/ych na dysku, lub jeśli MBR nie jest w niego wyposażony, wyszukuje flagi BOOT przypisanej do którejś z partycji, i z tej zaznaczonej w ten sposób partycji próbuje ładować system. Jeżeli również flaga BOOT nie jest ustawiona, wtedy komputer inicjuje system z pierwszej partycji dysku twardego.
Partycjonowanie dysków twardych w Linuksie
[edytuj]W systemie GNU/Linux do edycji tablicy partycji można użyć kilka programów. Najpopularniejszymi z nich są nieśmiertelny fdisk i cfdisk
fdisk, to podstawowe narzędzie do obsługi tablicy partycji w systemie Linux. Podobne programy pod tą samą nazwą występują również w innych systemach (np. Windows, OS/2). Pomimo różnic w każdym przypadku fdisk stosowany jest do jednej i tej samej czynności - partycjonowania dysków twardych. W systemie Linux fdisk jest programem operującym bezpośrednio na tablicy partycji. Potrafi on m.in. dodawać/usuwać partycje, zmieniać ich typ i etykietę, ustawiać flagę boot, a także zmieniać geometrie dysku i wiele innych operacji. Obsługa tego programu odbywa się poprzez wpisywanie jednoliterowych komend, na które program reaguje interaktywnie prosząc o ew. parametry. Każdą komendę jak i wpisane parametry należy potwierdzić klawiszem Enter. Np. aby utworzyć nową partycje należ wpisać literkę 'n' (i wcisnąć enter), po czym gdy program zapyta się o typ partycji wybrać 'l' (dysk logiczny) lub 'p' (partycja podstawowa) po czym wybrać początek i koniec partycji. Przykładowa "rozmowa" z programem może wyglądać następująco
Command (m for help): m Command action a toggle a bootable flag b edit bsd disklabel c toggle the dos compatibility flag d delete a partition l list known partition types m print this menu n add a new partition o create a new empty DOS partition table p print the partition table q quit without saving changes s create a new empty Sun disklabel t change a partition's system id u change display/entry units v verify the partition table w write table to disk and exit x extra functionality (experts only) Command (m for help): n Command action l logical (5 or over) p primary partition (1-4) p Partition number (1-4): 1 First cylinder (1-2434, default 1): Using default value 1 Last cylinder or +size or +sizeM or +sizeK (1-11, default 11): +12M
W powyższym przykładzie używamy notacji CHS do określania położenia partycji, ale fdisk potrafi stosować również LBA (do zmiany służy: 'u'). Wszystkie zmiany na tablicy partycji pozostają nietknięte dopóki nie zapisze się ich przy użyciu komendy 'w'.
UWAGA fdisk modyfikuje jedynie tablice partycji, nie potrafi on w żaden sposób ingerować w same partycje, tym bardziej zmieniać ich rozmiaru bez utraty zawartych na nich danych, ustanawiać dla nich system plików itp.
cfdisk
[edytuj]Naprawianie uszkodzonej tablicy partycji
[edytuj]testdisk
[edytuj]gpart
[edytuj]Dane na partycjach dyskowych są uporządkowane wg ustalonej struktury, którą nazywamy systemem plików. GNU/Linux potrafi obsługiwać wiele systemów plików takich jak FAT32 używane w systemach Win9x/ME, NTFS (nie w pełni) czy HFS+ znane z komputerów Macintosh. Jednakże stosowanie ich w partycjach na których znajduje się tylko i wyłącznie Linux, nie jest dobrym pomysłem gdyż istnieją systemy plików dedykowane specjalnie pod Linuksa:
system plików | opis | cechy | |
---|---|---|---|
ext3 | [opis ext3] | + | [plusy ext3] |
- | [minusy ext3] | ||
ext2 | Starszy brat ext3. Główna różnica pomiędzy nim, a ext3 to tzw. księgowanie - ext2 nie obsługuje księgowania, co sprawia, że ext2 nie nadaje się na współczesne stacje robocze. [więcej o ext2] | + | [plusy ext2] |
- | [minusy ext2] | ||
ReiserFS | [opis resierfs] | + | [plusy reiserfs] |
- | [minusy reiserfs] | ||
XFS | [opis XFS] | + | [plusy XFS] |
- | [minusy XFS] | ||
JFS | [opis JFS] | + | [plusy JFS] |
- | [minusy JFS] |
Zakładanie systemu plików
[edytuj]mkfs
Diagnostyka i naprawa uszkodzonego systemu plików
[edytuj]fsck
[edytuj]badblocks
[edytuj](Qt)Parted
[edytuj]czyli wszystko czego potrzebujesz do obsługi dysku twardego w Linuksie
Struktura katalogów
[edytuj]Główny katalog w systemach *nix (czyli także w GNU/Linuksie) jest oznaczany przez '/'. W katalogu '/' znajdują się wszystkie inne podkatalogi systemu. np.:
/ | |-> /usr | |-> /usr/bin | |-> /usr/share | `-> /usr/bin | `--> /home |-> /home/piotr |-> /home/radek `-> /home/jola
W GNU/Linuksie pliki i katalogi rozmieszczone są wg specjalnego standardu w:FHS (Filesystem hierarchy standard). Standard ten zakłada następującą strukturę katalogów:
katalog | co zawiera |
---|---|
/bin | pliki binarne, programy niezbędne dla systemu |
/boot | dane dla programu rozruchowego (np. lilo, grub) |
/dev | specjalne pliki blokowe identyfikujące urządzenia (np. dysk twardy - /dev/hda) |
/etc | pliki konfiguracyjne |
/home | pliki konfiguracyjne i dane użytkowników |
/lib | biblioteki systemowe |
/mnt | obce systemy plików (np. partycje Windows) |
/media | wymienne systemy plików (np. dyskietka, cdrom) |
/opt | statyczne pakiety oprogramowania |
/proc | informacje nt. komputera pochodzące z jądra systemu |
/root | dane administratora systemu |
/sbin | programy dla administratora systemu |
/srv | dane |
/tmp | pliki tymczasowe |
/usr | oprogramowanie |
/var | zmienne dane umieszczane przez programy (np. logi systemowe) |
Punkty montowania
[edytuj]Aby można było partycję używać w systemie musi ona zostać zamontowana w odpowiednim punkcie montowania. Punkt montowania to folder w strukturze katalogów systemu, które jest uważane za "miejsce od którego zaczyna się partycja", korzeń. Np. dla partycji /dev/hda1 przechowującej dane użytkowników wg standardu FHS punktem montowania powinien być /home.
Do prawidłowego działania GNU/Linux potrzebuje partycje, która będzie zamontowana w głównym katalogu systemu: /. Na tej partycji zwanej root partition będą przechowywane dane zamieszczone w katalogu / i w katalogach podrzędnych o ile któryś z tych podkatalogów nie stanowi punktu montowania innej partycji. Np. jeśli mamy dwie partycje: /dev/hda1 o punkcie montowania / i partycje /dev/hda2 o punkcie montowania /home, to wszystkie dane systemu będą przechowywane w partycji /dev/hda1 poza katalogiem /home, który będzie przechowywany w partycji /dev/hda2.
HOWTO
[edytuj]Partycjonowanie dysku twardego w praktyce
[edytuj]Krok 1: rozplanowanie dysku.
krok 2: wybór systemu plików
Krok 3: partycjonowanie
Krok 1
[edytuj]Jest to chyba najważniejszy krok całej operacji.
Generalnie w celu partycjonowania dysku twardego można pójść w 2 różne drogi:
- Droga pierwsza:
- (archiwizacja danych na innym nośniku) -> "sformatowanie" całego dysku -> partycjonowanie dysku od zera
- Droga druga:
- (kopia zapasowa danych na innym nośniku) -> modyfikacja obecnej struktury dysku
Jaką drogę wybierzesz zależy od Ciebie. Przede wszystkim, jeśli masz możliwość wrzucenia wszystkich potrzebnych Ci danych (a najlepiej obraz całego dysku) np. na płytę lub inny dysk, to na pewno 1 droga jest bardziej wskazana i łatwiejsza do realizacji.
Jeśli obecne dane nie są Ci w w ogóle potrzebne lub dysk jest po prostu nowy, to również pewnie wybierzesz drogę pierwszą.
Jeśli nie masz jednak możliwości archiwizacji danych, na których Ci zależy lub np. nie masz zbyt wiele czasu możesz skorzystać z drugiej drogi, która jest bardziej niebezpieczna ale za to jest też bardziej elastyczna.
Droga pierwsza
[edytuj]Jeśli zależy Ci na danych, które obecnie masz na dysku, to przed zabraniem się do pracy, musisz dokonać ich archiwizacji na innym nośniku. Najlepszym rozwiązaniem byłoby jednak "zrzucenie" wszystkich danych na płytę, inny dysk lub gdziekolwiek indziej. Wtedy bowiem można by "sformatować" cały dysk i ustawić partycje od zera.
Droga druga
[edytuj]Najlepiej zanim dokona się pierwszych zmian w strukturze dysku, dokonać kopii najważniejszych plików, bez których nie jesteś w stanie się obejść. Jeśli nie masz gdzie zrzucić danych, to pamiętaj, że to co będzie zaraz napisane robisz na własną odpowiedzialność i w pewnych nieoczekiwanych okolicznościach Twoje dane mogą ulec zniszczeniu.
Jeśli masz zamiar zmniejszać rozmiar partycji Windowsowych (FAT32 i NTFS) to przed tą operacją wskazana jest ich defragmentacja, w przeciwnym razie może dojść do utraty danych.
Modyfikacji obecnej struktury dysku twardego można przeprowadzić zarówno z poziomu systemu GNU/Linux jak i podczas instalacji tegoż systemu na komputerze. Często jednak partycjonując instalatorem nie masz możliwości zachowania istniejących już na dysku danych. Obecnie ze znanych mi dystrybucji to Mandrake/Mandriva Linux oraz SuSe posiada możliwość zmiany rozmiaru partycji NTFS i FAT32 nie tracąc przy tym danych.
Partycjonowaniem jak było wyżej napisane mogą zająć się również specjalnie ku temu stworzone programy dla GNU/Linuksa. Jednym z takich programów jest np. qtparted, który tak jak instalatory SuSe i Mandrivy potrafi zmieniać rozmiar partycji Windows nie tracąc przy tym danych.
Trzecia możliwość, to użycie znanego programu Partition Magic, który jednak jest programem płatnym.
[opis parted, qtparted, fdisk, cfdisk, mkfs itp.]
Zwiększanie wydajności dysku twardego
[edytuj]Jednym z częstych hamulców, które nakłada na komputer system Linux jest brak włączonej obsługi DMA (Direct Memory Access) w dyskach twardych. Powoduje, to znaczne obniżenie wydajności dysku, a w konsekwencji wolne działanie komputera, który wciąż oczekuje na dane od dysku twardego. Aby się przekonać czy nasz system ma włączoną obsługę DMA wydamy polecenie:
# hdparm <dysk>
gdzie <dysk> jest identyfikatorem Twojego dysku twardego w Linuksie: np. /dev/hda, /dev/hdc itd. prawidłowe "wyjście" powinno wyglądać mniej-więcej tak:
multcount = 0 (off) IO_support = 1 (32-bit) unmaskirq = 1 (on) using_dma = 1 (on) keepsettings = 0 (off) readonly = 0 (off) readahead = 256 (on) geometry = 38792/16/63, sectors = 39102337, start = 0
jak widać wartości IO_Support i using_dma są włączone. Jeśli u was któraś z wymienionych parametrów jest równa 0 (off), to może to być przyczyną niskiej wydajności systemu. Jeśli tak właśnie jest, to proponuję sprawdzić szybkość dysku poleceniem:
# hdparm -t <dysk>
po czym włączyć obsługę DMA i 32-bitowy przesył danych:
# hdparm -d1 -c1 -k1 <dysk>
i znów sprawdzić szybkość dysku, która powinna znacznie wzrosnąć, w przeciwnym wypadku oznacza, to że Twój dysk jest bardzo stary i nie obsługuje technologii DMA.
Obsługa DMA dysków twardych nie zawsze jest włączona w jądrze gdyż wcześniej powodowało, to problemy na dyskach, które tej technologii nie obsługiwały. Większość w miarę współczesnych "twardzieli" jednakże wspiera DMA, co nie zawsze jest wykrywane przez system. Jeżeli Twój dysk obsługuje DMA, a nie jest to standardowo włączone w systemie to masz 2 sposoby żeby zmusić Twojego Linuksa do pełnego wykorzystywania dysku:
- w jądrze systemu odznaczyć opcję: [opcja]
- za każdym razem zaraz przy uruchamianiu systemu włączać DMA poleceniem: hdparm