Podane na twardym talerzu (2003)

Podane na twardym talerzu

Wielu użytkowników ma w swoich komputerach zainstalowane kilka systemów operacyjnych. Bardzo ważne jest dla nich, aby móc bezproblemowo wymieniać między nimi pliki. W tym artykule postaramy sie uporządkować informacje na temat tego, co i jak należy ustawić, aby móc korzystać z tych samych danych w Linux i Windows. Zastanowimy się też nad różnymi możliwościami związanymi z obsługą plików w Linuxie.

Co wybrać ?


Na początku zajmiemy się systemami plików. Od nich zależy bowiem wygoda używania naszego komputera i jego możliwości. Wskażemy, które z nich mogą być problemem dla naszego systemu operacyjnego. Zaczniemy od tego, czego używa się z dyskami twardymi, dyskietkami i pamięciami flash.

Podstawowym systemem plików Linuxa przez długi czas był ext2. Jest on standardowo proponowany podczas instalacji wielu dystrybucji, ma jednakże trochę wad. Najpoważniejszą z nich jest brak tzw. kronikowania (journalingu). Dla przeciętnego użytkownika oznacza to, że w przypadku niespodziewanego wyłączenia lub zawieszenia się komputera zwiększa się prawdopodobieństwo utraty danych. W takich sytuacjach trzeba dodatkowo przy starcie systemu sprawdzić szczegółowo cały system plików, co może bardzo długo trwać (bez tego możemy mieć błędy logiczne na dysku). Jego zaletą jest znany format i dostępność wielu programów narzędziowych (kilka z nich do Windows podano w ramce obok).

<ramka>
Obsługa systemów Linuksowych w Windows
</ramka>

Rozszerzeniem systemu ext2 jest ext3. Dodano w nim kronikowanie. Jeżeli poprawnie wyłączyliśmy komputer używający ext3, do jego odczytania można użyć narzędzi projektowanych dla jego poprzednika.

Kolejnym systemem często używanym w Linuxie z opcją kronikowania jest Reiserfs charakteryzujący się szybszą obsługą katalogów z dużą ilością (małych) plików.

W przypadku dysków zapisywanych w DOS możemy się spotkać z systemami FAT12 i FAT16. Są one przestarzałe. Ich cechą charakterystyczną jest brak możliwości ustalenia jakichkolwiek praw dostępu oraz szybkie pojawianie się defragmentacji plików i związane z tym wydłużanie się długości ich odczytu. Wraz z Windows 95 OSR2 Microsoft wprowadził FAT32. Pojawiła się w nim możliwość obsługi większych dysków i umieszczania dowolnej ilości plików w głównym katalogu, jednakże nie wyeliminowano głównych wad znanych z poprzedników.

Windows 95 był pierwszym popularnym systemem Microsoftu z możliwością korzystania z długich nazw plików. Użyto rozszerzenia systemów FAT nazwanego VFAT. Tak określa się też wspólnie trzy systemy FAT w Linuxie. Nie ma on żadnych problemów z ich obsługą (odczytem i zapisem).

Jeżeli wykorzystujemy Windows NT 4.0 lub nowsze, które wywodzą się z niego (tzn. edycję 2000/XP/2003), możemy mieć zapisane dyski z użyciem NTFS. Jest on w ogóle nieobsługiwany przez "okienka" 95/98/ME, również Linux nie zawsze sobie z nim radzi. Każda nowa wersja Windows dodawała bowiem do niego kolejne rozszerzenia, na temat których Microsoft nie udostępniał pełnej dokumentacji. W chwili obecnej (Linux oparty na jądrze 2.4.x) można stwierdzić, że nie będzie kłopotów z odczytem tego systemu, o ile nie zastosowaliśmy w nim żadnych rozszerzeń typu kompresja czy szyfrowanie plików. Opcja zapisu jest zaznaczona jako niebezpieczna. Sytuacja powinna się zmienić na lepsze dopiero wraz z nową generacją 2.6.x jąder.

W przypadku płyt na pewno spotkamy się z określeniem ISO9660. Jest to nazwa podstawowego i najstarszego systemu plików dla krążków. Każdy współczesny system operacyjny zapewnia jego obsługę.

Z czasem pojawiła się konieczność zapisania długich nazw plików na płytach. Jednym z rozszerzeń jest stworzony przez Microsoft system Jouliet. Linux potrafi też w sposób niewidzialny dla użytkownika korzystać z tzw. tablic translacji - na płycie są umieszczane nazwy plików zgodne z ISO9660, natomiast system pokazuje użytkownikowi długie nazwy plików zawarte w plikach trans.tbl.

Nośniki optyczne (np. CD-RW) mogą być zapisane w coraz bardziej popularnym trybie pakietowym UDF (pozwala on na korzystanie z płyty jak z dużej dyskietki). Linux nie ma z nim problemu.

Powyższy przegląd zawiera informacje o zaledwie kilku z wielu obsługiwanych przez "pingwina" systemów.  Nie piszemy  o innych, ponieważ  są one  albo już nieużywane  (mowa tutaj np.  o  systemie używanym w protoplaście Linuxa o nazwie Minix, a następnie początkowo w samym Linuxie "przed" ext2) albo dotyczą innych platform sprzętowych (np. system znany z komputera Commodore Amiga).

Chcieliśmy w tym miejscu przypomnieć o jednym szczególe, o którym nie pamięta wielu początkujących użytkowników - sterownik głównego systemu plików (np. ext2 lub ext3) nie może być skompilowany jako moduł jądra. System musi bowiem "wiedzieć", jak czytać partycję z plikami zawierającymi moduły po to, aby móc je w ogóle załadować.

<ramka>
Opcje jądra 2.4.x
Poniżej przedstawiono nazwy wymaganych opcji kerneli 2.4.x Linuxa wymaganych do obsługi wymienionych systemów lub urządzeń

Systemy plików na dyskach twardych, dyskietkach i dyskach flash
Ext2 - File systems | Second extended fs support
Ext3 - File systems | Ext3 journalling file system support
VFAT - File systems | DOS FAT fs support, File systems | MSDOS fs support, File systems | VFAT (Windows 95) fs support
NTFS - File systems | NTFS file system support
Reiserfs - File systems | Reiserfs support


Systemy plików na CD-ROM, CD-RW i DVD-ROM
File systems | ISO 9660 CDROM file system support, File systems | Microsoft Joliet CDROM extensions, File systems | Transparent decompression extension, File systems | UDF file system support

Obsługa pamięci USB
SCSI support | SCSI support, File systems | /proc file system support, USB support | Support for USB, USB support | Preliminary USB device filesystem, USB support | EHCI/UHCI/OHCI (w zależności od posiadanego kontrolera USB), USB support | USB Mass Storage Support

Inne
Supermount - File systems | Supermount removable media support
Loopback - Block devices | Loopback device support
</ramka>

Nazwy urządzeń


Oprócz znajomości użytego systemu plików musimy dodatkowo podać Linuxowi informację, w jakim urządzeniu jest on wykorzystany.

Sprawa jest stosunkowo prosta: kolejne urządzenia IDE podłączane do płyty głównej są oznaczane jako /dev/hda i kolejne (ostatnia literka "a" zamienia się na "b", "c" lub "d"). Jeżeli mamy dodatkowy kontroler IDE (oraz sterownik do niego w jądrze), jego napędom zostaną przydzielone urządzenia logiczne /dev/hde, /dev/hdf, itd. Zgodnie z tymi zasadami, przykładowy napęd CD-ROM podłączony jako master do pierwszego kanału na płycie głównej będzie w Linuxie nazwany /dev/hda.

Określenie partycji na dyskach twardych zawiera określenie dysku wraz z dodatkową cyfrą - np. /dev/hdb1 to pierwsza partycja na dysku /dev/hda używanym jako slave w pierwszym kanale IDE. Podobnie zresztą określa się partycje na urządzeniach podłączanych do USB - np. /dev/sda1 to pierwsza partycja pierwszego urządzenia USB.

Stacja dyskietek to z kolei /dev/fd0.

Montowanie urządzeń

Zgodnie z zasadą przyjętą w Linuxie jest tylko jeden logiczny system plików, do którego można podłączać (montować) fizycznie oddzielne urządzenia. Pozwala to np. na to, aby konta użytkowników (zawartość /users) znajdowały się na innym dysku twardym niż sam system, stacja dystkietek była widoczna w katalogu /mnt/floppy, a CD-ROM w katalogu /cdrom.

Do montowania służy polecenie mount. Oto jego przykładowe użycie (z poziomu roota):

mount -t iso9660 -o noexec,ro /dev/hdc /mnt/cdrom

Zawartość płyty z urządzenia /dev/hdc zostanie umieszczona w katalogu /mnt/cdrom. Będzie ona dostępna w trybie tylko do odczytu (parametr ro). Wykorzystany zostanie system plików iso9660. Jeżeli wykonanie polecenia się nie powiodło, powodów może być kilka:
  1. użytkownik nie ma praw dostępu do korzystania z polecenia mount dla danej partycji (zostało to szerzej opisane dalej)
  2. sterownik wybranego systemu plików (tutaj iso9660) nie jest wkompilowany w jądro. Aby to sprawdzić, należy obejrzeć zawartość pliku /etc/filesystems i zobaczyć, co obsługuje jądro systemu. Jeżeli czegoś brakuje, należy je skompilować ponownie.
  3. brak praw dostępu do katalogu /mnt/cdrom lub brak tego katalogu w ogóle
  4. brak sterownika do użytego urządzenia. Może się przykładowo zdarzyć, że odwołaliśmy się do CD-ROM i nazwa urządzenia jest poprawna, ale jądro nie zawiera sterownika do napędów CD-ROM
W tym miejscu warto wspomnieć, iż zamiast konkretnego określenia systemu plików (w przykładzie iso9660) można użyć auto i Linux sam spróbuje określić, z czym ma do czynienia. Jest to wygodne, ale trzeba pamiętać, że nie zawsze działa poprawnie.

Montowanie na skróty

Możemy sobie zautomatyzować całą procedurę i nie podawać za każdym razem wszystkich niezbędnych parametrów procedurze mount. W tym celu wymyślono plik /etc/fstab. Poniżej przykładowa jego zawartość:

/dev/hda8
/
ext3
defaults
1 1
/dev/hda1
/mnt/win_c
ntfs      
user,nosuid,nodev,noexec,ro
0 0
none
/proc
proc
defaults
0 0
none
/dev/pts
devpts
mode=0620
0 0
none
/proc/bus/usb
usbdevfs
none
0 0 
/dev/fd0
/mnt/floppy
supermount
dev=/dev/fd0,fs=auto,auto
0 0
/dev/hdd
/mnt/cdrom2
supermount
dev=/dev/hdd,fs=iso9660,auto,ro
0 0
/dev/sda1
/mnt/usb
supermount
dev=/dev/sda1,fs=auto,auto,users
0 0
/dev/hdc
/mnt/cdrom
iso9660
noauto,ro,noexec
0 0

Można powiedzieć, że każda linijka składa się z następujących części:
  1. nazwy partycji lub urządzenia (np. /dev/hda8)
  2. informacji, gdzie zamontować daną partycję lub urządzenie (np. /)
  3. użytego systemu plików (np. ext3)
  4. opcji (np. defaults)
  5. cyfry określającej, jak często dany system plików ma być archiwizowany programem dump (0 - nigdy, 1 - codziennie, 2 - co dwa dni, itp.)
  6. cyfry określającej, czy program fsck powinien sprawdzać dany system podczas startu Linuxa i jak go ma wtedy traktować (0 - nie sprawdzać, 1 - sprawdzać jako główny system plików, 2 - sprawdzać jako inny niż główny system plików).
Zacznijmy od ostatniej linijki związanej z urządzeniem /dev/hdc. Parametry tam zawarte są prawie identyczne jak podawane przez nas wcześniej w linii komend poleceniu mount. Dodano komendę noauto, która powoduje, że ten system plików nie będzie automatycznie montowany w czasie startu systemu. Wymieniona partycja nie będzie także sprawdzana programem dump ani fsck.

Widzimy też informację o głównym systemie plików Linuxa (pierwsza linijka pliku) oraz wiersze rozpoczynające się od none. Zawarte są w tych ostatnich informacje o systemach tzw. pseudoplików. Jądro jest bowiem w stanie w czasie swej pracy przekazywać programom różne informacje w postaci dynamicznie tworzonych plików. Aby było wiadomo, gdzie i jak ma je składować, potrzebne są właśnie wpisy w /etc/fstab: katalog /proc zawierać będzie dane o aktualnie działających w systemie programach (system plików proc). Jest on wymagany do działania innego systemu pseudoplików (usbdevfs) umieszczonego w /proc/bus/usb i niezbędnego do pracy różnym programom do obsługi USB.

Oddzielnego wyjaśnienia wymaga system plików supermount. Standardowo bowiem po włożeniu płyty lub dyskietki konieczne jest jest zamontowanie. Kosztem bezpieczeństwa systemu (nie jest bowiem bezpieczne automatyczne dołączanie i udostępnianie czegokolwiek, co mogłoby np. zawierać wirusa) można to ominąć. Wystarczy tylko zainstalować w jądrze sterownik do supermount i system sam zadba o właściwe podłączenie płyty albo (tak jak to zostało zrobione w podanym przykładzie) dyskietki. Należy pamiętać, że oryginalne jądro Linuxa nie zawiera obsługi tego systemu i trzeba ją do niego dodać w formie łaty (autorzy niektórych dystrybucji - np. Mandrake - robią to za nas i "ich" jajka mają już wewnątrz wymagany kod).

Jeżeli chcemy zmienić któryś z wpisów w /etc/fstab tak, aby dotyczył supermounta, musimy pamiętać o trzech zasadach:
  • należy zmienić system plików na supermount
  • do parametrów należy dodać nazwę urządzenia (w przypadku stacji dyskietek dodano dev=/dev/fd0), określić system plików (np. fs=auto) i dodać parametr auto, który wymusi to, na czym na zależy (tzn. automatyczne montowanie nośnika)
  • warto sobie pozostawić możliwość ręcznego  decydowania, czy dane urządzenie ma być podłączone czy nie (parametry user i users opisane dalej), gdyż czasem supermount nie potrafi prawidłowo odłączać np. dysków korzystających z USB
Jak jednak informacje z /etc/fstab mogą ułatwić używanie polecenia mount ? Sprawa jest prosta: mount potrafi odczytać parametry dotyczące montowanego urządzenia z tego pliku. Przykładowo, aby podłączyć dane z CD-ROM, wystarczy napisac:

mount /mnt/cdrom

Każdemu według jego praw

Początkujący użytkownicy zastanawiają się zapewne, jak ustalane są prawa dostępu podczas podłączania "obcych" systemów plików ?

Ogólnie mówiąc, jeżeli montujemy jakieś urządzenie w określonym katalogu, prawa dostępu do tego katalogu są zmieniane na te, które zostały podane jako parametr polecenia mount (lub wpisane w /etc/fstab). W przypadku, gdy dany system plików nie ma możliwości ich ustalania, pliki i katalogi "wewnątrz" również je "przejmą". Opiszemy teraz po kolei, jakich poleceń możemy użyć do ustalenia własnych praw:

Komendy gid=xxx i uid=xxx (gdzie xxx to wartości numeryczne) pozwolą ustawić odpowiednio grupę i użytkownika zbiorów. Należy pamiętać, że nie działają one z systemem supermount.

Jeżeli wykorzystaliśmy parametr ro, wykasowana zostanie możliwość zapisu (przeciwieństwiem ro jest komenda rw pozwalająca na zapis i odczyt).

Standardowo wszystkie pliki będą miały atrybut wykonywalności - zapobiegamy temu korzystając np. z noexec (atrybut będzie zawsze wykasowany)  lub  showexec (atrybut wykonywalności będą miały pliki z rozszerzeniem exe, com, bat).

Możemy też użyć komendy umask=xxx. Jej parametrem jest wartość numeryczna mówiąca, które atrybuty plików i katalogów system ma wyzerować. Szerzej o atrybutach plików piszemy w ramce obok. Należy zajrzeć do pokazanej tam tabeli, zsumować wartości atrybutów do wyzerowania i podać tutaj jako parametr. Przykładowo, aby wykasować możliwość zapisu i odczytu dla innych użytkowników (nie będących właścicielami ani nie należących do grupy przypisanej do pliku/katalogu), powinniśmy tutaj użyć wartości 2 + 4 = 6 i wpisać umask=6.

<ramka>
Numeryczne prawa dostępu


W systemach unixowych (również Linuksie) przyjęto zasadę, iż każdy plik i katalog posiada oddzielne prawa dostępu dla trzech kategorii użytkowników:
  1. właściciela
  2. użytkowników należących do grupy, do której przypisano plik/katalog
  3. pozostałych (nie wchodzących do kategorii pierwszej ani drugiej)
Każda w powyższych grup może mieć przypisane trzy prawa:
  1. do czytania (read)
  2. do zapisu (write)
  3. do wykonywania (execute) - w przypadku pliku będzie to faktyczna możliwość uruchomienia pliku jako programu, dla katalogu możliwość wejścia do niego
Prawa dostępu podaje się często w formie literowej (stosuje ją np. polecenie ls) zapisując po sobie trzy kolejne litery ("rwx", gdy dany atrybut jest ustawiony lub "-", gdy go nie ma) dla właściciela, grupy i innych użytkowników. Zgodnie z tą zasadą, jeżeli plik ma prawa dostępu "rwx---r--", jego właściciel będzie mógł go zapisywać i wykonywać oraz z niego czytać, a użytkownik należący do grupy innych użytkowników dostanie tylko możliwość czytania.

Możemy to też wyrazić w formie numerycznej. Wystarczy zajrzeć do tabeli poniżej i zsumować wartości ustawionych atrybutów podane w drugiej kolumnie, a następnie zamienić otrzymaną liczbę z systemu ósemkowego na dziesiętny (np. prawa dostępu "rwx---r--" będą określone ósemkowo jako 400+200+100+4 = 704, czyli 452 w formie dziesiętnej)

r
0400
czytanie przez właściciela
w
0200
zapisywanie przez właściciela
x
0100
wykonywanie (przeszukiwanie katalogu) przez właściciela
r
0040
czytanie przez członka grupy
w
0020
zapisywanie przez członka grupy
x
0010
wykonywanie (przeszukiwanie katalogu) przez członka grupy
r
0004
czytanie przez innych
w
0002
zapisywanie przez innych
x
0001
wykonywanie (przeszukiwanie katalogu) przez innych

</ramka>

Jak już wspomnieliśmy, domyślne prawa dostępu będzie można zmieniać w pewnym zakresie - takim, na jaki pozwalają możliwości użytego systemu plików (np. nie będzie można zmienić właściciela plików komendą chown na dysku z vfat, natomiast nie będzie problemu ze zrobieniem tego na partycji ext2).

Polskie literki

Jak z kolei uzyskać polskie literki w nazwach plików na partycjach fat i ntfs ?

W tym wypadku w obu wypadkach musimy podać parametr iocharset=xxx (gdzie xxx to nazwa używanego przez nas zestawu znaków w Linuxie - najczęściej iso8859-2), natomiast systemy fat wymagają dodatkowo komendy codepage=852 (Linux wymaga podania strony kodowej, jaka była oryginalnie używana w Windows przy zapisie plików na partycję).

Odmontowywanie

Jeżeli teraz chcielibyśmy "odłączyć" dane zamontowane urządzenie, należy wydać komendę:

umount /mnt/cdrom

Należy pamiętać, że dopiero zrobienie tego pozwoli nam wyjąć płytę z napędu (alternatywnie można użyć polecenia eject /mnt/cdrom, który odmontuje i otworzy tackę urządzenia).

Możemy sobie sprawdzić, które partycje pozostały zamontowane w systemie, wydając komendę df.

Kto to może montować ?

Domyślnie dane urządzenie może być dołączane i odłączane przez administratora (roota). Jeżeli użyjemy parametru user, to montować urządzenie będzie mógł każdy użytkownik, natomiast odmontować tylko ten sam użytkownik, który je zamontował. Z kolei komenda users pozwoli na montowanie i odmontowywanie systemu dowolnemu użytkownikowi. Oczywiście podawanie wymienionych tutaj poleceń nie ma sensu z supermountem.

Dyskietki bez bólu


W Linuxie istnieje także inna możliwość korzystania z dyskietek zapisanych w DOS nie wymagająca ustawiania niczego w systemie.

Stworzono bowiem pakiet mtools udostępniający szerzeg komend analogicznych do tych z MS-DOS (o podobnej składni i nazwie poprzedzonej literą "m"). Oto kilka przykładów ich użycia:

mdir a: - pokazuje zawartość dyskietki

mcopy file a: - kopiuje plik file na dyskietkę

mcopy a:\file - kopiuje plik file z dyskietki do bieżącego katalogu

mformat a: - formatuje dyskietkę

mlabel a: - nadaje dyskietkę nazwę

Więcej można poczytać w pomocy systemowej (man mtools)

Łączymy się z flashem

Chcielibyśmy się teraz zająć coraz częściej używanymi pamięciami flash ze złączem USB. Jeżeli mamy włączone w jądrze opcje wymienione w ramce obok,
system powinien zarejestrować nowe urządzenie blokowe sd po podłączeniu naszego urządzenia (do sprawdzenia tego nadaje się polecenie cat proc/devices). Możemy się również upewnić o poprawności ustawień patrząc na wynik działania komendy cat /proc/scsi/scsi - powinniśmy zobaczyć informację o tym, co podłączyliśmy.

Jeżeli wszystko zadziałało prawidłowo, kolejnym krokiem będzie wykorzystanie znanej już komendy mount (w przykładzie podłączy ona pierwszą partycję pierwszego dołączonego dysku do katalogu /mnt/usb):

mount -t vfat /dev/sda1 /mnt/usb

i można już korzystać z tego, co dołączyliśmy (alternatywnie użyjmy systemu supermount po to, aby cała operacja montowania była wykonywana automatycznie).

Należy jednak pamiętać, że część opcji dostępnych w przypadku tych urządzeń w Windows (np. szyfrowanie zawartości partycji) może być niedostępna. Powinniśmy też być przygotowani na ewentualne problemy, gdy nasza pamięć ma blokadę zapisu w formie programowej.


Przygotowania do pracy

Umiemy już korzystać z dysków i innych nośników. Aby je jednak przygotować do pracy, potrzebne jest formatowanie.

O ile w przypadku dyskietek jest to stosunkowo łatwe (można użyć komendy mformat lub jednego z programów działających w XWindows), w przypadku dysków twardych lub pamięci USB sprawa się trochę komplikuje. Najczęściej konieczne będzie skorzystanie z narzędzi tekstowych oraz zachowanie maksymalnej ostrożności.

Omówimy sprawę na przykładzie pamięci USB. Ponieważ wpierw wymagane może być podzielenie nowego urządzenia na partycje, skorzystamy z komendy fdisk:

fdisk /dev/sda

Command (m for help):
Naciskamy p
Disk /dev/sda: 129 MB, 129740800 bytes
18 heads, 63 sectors/track, 223 cylinders
Units = cylinders of 1134 * 512 = 580608 bytes

Device Boot Start End Blocks Id System
/dev/sda1 1 223 126409+ b Win95 FAT32

Na naszym urządzeniu mamy już jedną partycję /dev/sda1 zajmującą całą przestrzeń (cylindry 1 - 223) sformatowaną w systemie FAT32 (prawdopodobnie przez producenta). Chcielibyśmy ją wykasować. W tym celu używamy komendy d
Command (m for help): d
Selected partition 1
i ponownie wyświetlamy informację o podziale na partycje (komenda p):
Command (m for help): p

Disk /dev/sda: 129 MB, 129740800 bytes
18 heads, 63 sectors/track, 223 cylinders
Units = cylinders of 1134 * 512 = 580608 bytes

Device Boot Start End Blocks Id System
Zgodnie z oczekiwaniami na urządzeniu się teraz nic nie znajduje. Dodamy teraz nową partycję (komenda n):
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-223, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-223, default 223):
Using default value 223
Jak widać, konieczne było podanie typu partycji (podstawowa czy rozszerzona), jej numeru oraz początkowego i końcowego cylindra.

Teraz zmienimy typ utworzonej partycji na Linuksową ext3 (komenda t):
Command (m for help): t
Selected partition 1
Hex code (type L to list codes): 83
i wyświetlimy sobie ostateczną informację o naszym urządzeniu:
Command (m for help): p

Disk /dev/sda: 129 MB, 129740800 bytes
18 heads, 63 sectors/track, 223 cylinders
Units = cylinders of 1134 * 512 = 580608 bytes

Device Boot Start End Blocks Id System
/dev/sda1 1 223 126409+ 83 Linux
Wydawać by się mogło, że wszystko poszło zgodnie z oczekiwaniami. Należy jednak sprawdzić wypisane dane kilka razy. Jeżeli tworzyliśmy nową partycję na dysku twardym, mogliśmy bowiem przez przypadek wykasować lub zmienić dane partycji już istniejących. Dopiero wtedy, gdy upewnimy się, że podzieliśmy dysk zgodnie z oczekiwaniami i nie zrobiliśmy błędu, wciskamy w i fdisk zapisze zmiany.

Teraz musimy wykonać właściwy format nowej partycji:

mkfs.ext3 /dev/sda1

Oczywiście, jeżeli utworzyliśmy właśnie partycję w systemie fat, powinniśmy zamiast mkfs.ext3 użyć mkfs.vfat. Po takim przygotowaniu do pracy możemy już zamontować nową partycję i jej używać.

Sprawdź się

Czasami zachodzi potrzeba ręcznego sprawdzenia danego systemu plików pod względem poprawności zapisu danych. Aby to zrobić w odniesieniu do dysków z ext2 lub ext3, można wykorzystać komendę fsck:

fsck.ext2 /dev/sda1

fsck.ext3 /dev/sda2

Polecenia te z powodzeniem spełnią rolę analogiczną do chkdsk z Windows

Malujemy i oglądamy obrazy


Istnieje jeszcze jedna funkcja Linuxa, o której warto wspomnieć. Możemy sobie zrobić kopię określonej partycji dysku twardego, płyty CD lub dyskietki, a następnie jej używać dokładnie tak samo samo, jakbyśmy to robili z oryginałem. Zaczniemy od utworzenia obrazu:

dd of=/dev/sda1 of=/home/marcin/plik
252818+ records in
252818+ records out
Polecenie odczytało wszystko z /dev/sda1 i zapisało do pliku /home/marcin/plik. Operacja zakończyła się sukcesem (liczby w obu wierszach oznaczające ilość odczytanych i zapisanych danych są takie same). Następnie konfigurujemy jedno z urządzeń loop:

losetup /dev/loop0 /home/marcin/plik

i odtąd możemy z nim pracować tak samo jak z partycjami dysków twardych czy dyskietkami. Oto przykład montowania takiego urządzenia:

mount -t ext2 -o rw /dev/loop0 /mnt/katalog

Należy jedynie pamiętać, aby po zakończeniu pracy (odmontowaniu) urządzenie loop jeszcze dodatkowo odłączyć:

losetup -d /dev/loop0

Istnieje też inna metoda tworzenia plików, które następnie mogą być montowane w charakterze urządzeń, niż używanie komendy dd. Wystarczy bowiem użyć polecenia mkisofs:

mkisofs -o plik katalog

Program ten przeczyta zawartość katalogu katalog i na tej podstawie utworzy obraz w pliku o nazwie plik. Sekwencje wymienionych poleceń (np. mkisofs, a następnie losetup i mount) wykorzystuje się dosyć często po to, aby zobaczyć, jak dokładnie będzie wyglądać nagrana płyta CD (plik z obrazem może bowiem później bez problemu służyć jako źródło, z którego nagrywane są płyty).

Partycje i pliki wymiany

Chcieliśmy jeszcze wspomnieć o bezpłatnym rozszerzaniu pamięci operacyjnej komputera w postaci plików i partycji wymiany. Idea jest prosta - jeżeli komputer ma za mało RAM, można w jej charakterze wykorzystać znacznie wolniejszy, ale większy dysk twardy. Najczęściej podczas instalacji różnych dystrybucji Linuxa tworzy się tzw. partycje wymiany, które spełniają właśnie tę rolę. Oto przykładowy wpis do /etc/fstab związany z taką partycją:
/dev/hdc3    none    swap    sw
Może się zdarzyć, że chcielibyśmy, aby rolę tę pełnił plik. Nic prostszego. Utworzymy taki o rozmiarze 16 MB:

dd if=/dev/zero of=plik bs=1024 count=16384
mkswap plik 16384
sync

i go podłączymy:

swapon plik

Możemy sobie dodać ostatnią komendę do /etc/rc.d/rc.local i plik wymiany będzie uaktywniany przy każdym starcie naszego pingwina (analogicznie komenda swapoff plik w pliku /etc/rc.d/init.d/halt będzie go "wyłączać" przy zamykaniu systemu). Nic nie stoi na przeszkodzie, aby plik wymiany znalazł się na tej samej partycji i nazywał się tak samo jak plik wymiany systemu Windows. Dzięki temu oszczędzimy miejsce na dysku.