Diskové oddíly, rozdělování na partitions, swap

Karel Dytrych, dytrych@webovy-servis.cz

Obsah

Pevné disky počítačů se dělí na diskové oddíly tzv. partitions. Tyto oddíly jsou buď využity, a je na nich určitý souborový systémem, nebo jsou nevyužité. Každý oddíl pevného disku pracuje jako samostatná jednotka.

Typy diskových oddílů

Diskové oddíly lze rozdělit na tři typy: primární, rozšířený a logický. Toto rozdělení vyplívá z použití MBR (master boot record) oblasti disku.

MBR

Master Boot Record je prvních 512 bytů (0. hlava, 0. cylindr a 1. sektor) na začátku každého disku. Obsahuje zavaděč systému a tabulku rozdělení disku (partition table). Někdy také volitelně identifikátor disku.

Hlavní úlohou MBR je načíst do paměti boot sektor oddílu, který je označen jako aktivní v partition table.

Primární diskové oddíly

Kvůli omezení BIOSu počítače lze nastavit pouze 4 primární diskové oddíly. Jsou to oddíly zapsané v MBR (master boot record) oblasti disku.

Rozšířené diskové oddíly

Rozšířené (extended) oddíly byly zavedeny kvůli potřebě dělení disků na více než 4 oddíly se zachováním zpětné kompatibility. Rozšířený diskový oddíl nelze přímo používat, ale může obsahovat větší množství logických oddílů. Je to v podstatě „kontejner“ pro logické oddíly.

Logické diskové oddíly

Logický oddíl je oddíl umístěný v rozšířeném diskovém oddílu. Logicé oddíly musí na sebe navazovat. Každý logický oddíl obsahuje odkaz na jeho následující oddíl.

Oddíl Swap

Každý proces operačního systému potřebuje pro svůj běh určité množství operační paměti (RAM). V případě nedostatku této paměti se momentálně nepotřebná data z RAM (např. blokované procesy) přesouvají na disk aby uvolnili místo běžícímu procesu. Data se odkládají na speciálně vyhrazený oddíl – swap.

Vlastnosti swap oddílu

Velikost oddílu

Swap by měl být velký alespoň stejně jako je velká RAM počítače, neuškodí však více. U serverů je swap oddíl několikanásobně větší oproti RAM.

Omezení swapu

S kernelem 2.1 a jeho staršími verzemi lze vytvořit maximálně 8 swap oddílů o velikosti 128 Mb. Mohou být větší, ale nevyužijí se. S kernelem řady 2.6 může být až 128 swap oddílů s velikostí až 16 Tb.

Seznam oddílů na počítači

Vypsat seznam všech oddílů, které počítač obsahuje lze pomocí příkazu

cat /proc/partitions

[nahoru]

Důvody dělení disků na oddíly

Důvody pro

Důvody proti

[nahoru]

Diskové zařízení na linuxu

Na Linuxu jsou všechny zařízeni reprezentovány ve speciálním adresáři /dev (device files) se speciálním souborovým systémem DevFS nebo modernějším Udev. Když si vypíšeme obsah tohoto adresáře (ls –l /dev) můžeme získat zhruba následující údaje.

brw-rw----    1 root     disk       3,   0 2007-02-23 10:13 hda
brw-rw----    1 root     disk       8,   0 2007-02-23 10:13 sda
crw-------    1 root     tty        4,  64 1996-05-21 01:37 ttyS0

První sloupeček udává přístupová práva. Počáteční b znamená že se jedná o blokové (block) zařízení (disk, cd-rom, …) využívající vyrovnávací paměť. Na Linuxu jsou takto reprezentovány všechny disky. V případě počátečního c (character) device jde o ostatní zařízení jako je zvuková karta atd. Poslední sloupeček u blokových zařízení signalizuje typ zařízení.

IDE zařízení mají označení hd*. V případě primárního řadiče má master zařízení hda, slave zařízení hdb. Slave na sekundárním řadiči by pak měl hdd. Obvykle mají počítače 2 IDE řadiče, takže se většinou setkáváme se zařízeními označenými hda – hdd.

SCSI zařízení jsou označovány obdobně jako sd*.

Značení diskových oddílů na linuxu

Jednotlivé oddíly každého zařízení obsahují v názvu navíc číslo. Primární disk rozdělený na dva oddíly tak bude mít v adresáři /dev soubory hda1 a hda2.

[nahoru]

Jak se tvoří diskové oddíly

K rozdělení disku na oddíly dojde většinou již při instalaci operačního systému. Linuxové distribuce mají k tomuto účelu jednoduché uživatelsky přívětivé programy a utility. Většinou je k dispozici možnost automatického rozdělení oddílů.

Pokud je již systém nainstalován, a je potřeba měnit rozdělení oddílů máme k dispozici mnoho nástrojů a utilit.

Programy a utility

Tvorba oddílů pomocí programu Fdisk

Program fdisk je potřeba spouštět administrátorským účtem, jinak nebude moci fdisk otevřít zařízení s potřebnými právy.

      kjn@webovyservis:/$ fdisk /dev/hda

Fdisk je konzolový, a má velice jednoduché ovládání. Příkazem m lze vypsat všechny dostupné příkazy.

      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)
    

Příkazem p si vypíšeme všechny aktuální oddíly.

      Command (m for help): p
    
      Disk /dev/hda: 20.4 GB, 20404101120 bytes
      255 heads, 63 sectors/track, 2480 cylinders
      Units = cylinders of 16065 * 512 = 8225280 bytes
    
      Device    Boot      Start         End      Blocks   Id  System
      /dev/hda1    *          1         973     7815591   83  Linux
      /dev/hda2             974        2480    12104977+   5  Extended
      /dev/hda5            2384        2480      779121   82  Linux swap / Solaris
      /dev/hda6             974        2383    11325762   83  Linux
    

Odstranění oddílu

      Command (m for help): d
      Partition number (1-6): 6
    
      Device    Boot      Start         End      Blocks   Id  System
      /dev/hda1   *           1         973     7815591   83  Linux
      /dev/hda2             974        2480    12104977+   5  Extended
      /dev/hda5            2384        2480      779121   82  Linux swap / Solaris
    

Vytvoření linuxového oddílu o velikosti 1 GB

      Command (m for help): n
      Command action
         l   logical (5 or over)
         p   primary partition (1-4)
      l
      
      First cylinder (974-2480, default 974): 974
      Last cylinder or +size or +sizeM or +sizeK (974-2383, default 2383): +1000M
    
      Device    Boot      Start         End      Blocks   Id  System
      /dev/hda1   *           1         973     7815591   83  Linux
      /dev/hda2             974        2480    12104977+   5  Extended
      /dev/hda5            2384        2480      779121   82  Linux swap / Solaris
      /dev/hda6             974        1096      987966   83  Linux
      

Vytvoření swap oddílu

      Command (m for help): n
      Command action
         l   logical (5 or over)
         p   primary partition (1-4)
      l
      First cylinder (1097-2480, default 1097): 1097
      Last cylinder or +size or +sizeM or +sizeK (1097-2383, default 2383): 2383
      

Nyní je vytvořen Linuxový oddíl, je potřeba ho změnit na Swap příkazem t.

      Command (m for help): t
      Partition number (1-7): 6
          Hex code (type L to list codes): 82
      Changed system type of partition 6 to 82 (Linux swap / Solaris)

      Device    Boot      Start         End      Blocks   Id  System
      /dev/hda1   *           1         973     7815591   83  Linux
      /dev/hda2             974        2480    12104977+   5  Extended
      /dev/hda5            2384        2480      779121   82  Linux swap / Solaris
      /dev/hda6             974        1096      987966   82  Linux swap / Solaris
      /dev/hda7            1097        2383    10337796   83  Linux

Provedené změny uložíme do partition table příkazem w.


      The partition table has been altered!
      Calling ioctl() to re-read partition table.
      WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
      The kernel still uses the old table.
      The new table will be used at the next reboot.
      Syncing disks.
    

Po rebootu operačního systému si vypíšeme opět tabulku oddílů.


      Disk /dev/hda: 20.4 GB, 20404101120 bytes
      255 heads, 63 sectors/track, 2480 cylinders
      Units = cylinders of 16065 * 512 = 8225280 bytes

      Device    Boot      Start         End      Blocks   Id  System
      /dev/hda1   *           1         973     7815591   83  Linux
      /dev/hda2             974        2480    12104977+   5  Extended
      /dev/hda5            2384        2480      779121   82  Linux swap / Solaris
      /dev/hda6             974        1096      987966   82  Linux swap / Solaris
      /dev/hda7            1097        2383    10337796   83  Linux
      
      Partition table entries are not in disk order

Pod výpisem diskových oddílů jsme upozorňováni, že zápisy v tabulce oddílů nejsou v pořadí v jakém jsou přímo na disku. Na Linuxu to není problém, ale na jiných systémech by to mohlo způsobovat problémy. Lze to jednoduše opravit v expertním módu.

      Command (m for help): x
      Expert command (m for help): f

      Done.

Nyní je již výpis oddílů ve správném pořadí.


      Disk /dev/hda: 20.4 GB, 20404101120 bytes
      255 heads, 63 sectors/track, 2480 cylinders
      Units = cylinders of 16065 * 512 = 8225280 bytes
    
      Device    Boot      Start         End      Blocks   Id  System
      /dev/hda1   *           1         973     7815591   83  Linux
      /dev/hda2             974        2480    12104977+   5  Extended
      /dev/hda5             974        1096      987966   82  Linux swap / Solaris
      /dev/hda6            1097        2383    10337796   83  Linux
      /dev/hda7            2384        2480      779121   82  Linux swap / Solaris
    

Formátování a zprovoznění oddílů

V předchozí ukázce byli vytvořeny následující oddíly:

Abychom tyto oddíly mohli používat je třeba je naformátovat na nějaký souborový systém a připojit.

Formátování oddílu na souborový systém ext2/ext3

Standardní linuxové souborové systémy jsou ext2 a ext3 (žurnálovací), diskový oddíl se na ně formátuje pomocí programu mke2fs. Pro formátování oddílů jsou k dispozici nástroje mkfs.ext2 a mkfs.ext3, které volají mke2fs s požadovaným nastavením.

Souborový systém ext2 můžeme vytvořit pomocí příkazů:

Souborový systém ext3 můžeme vytvořit pomocí příkazů:

Při vytváření souborového systému doporučuji využít parametr –m pro určení velikosti místa rezervovaného pro administrátora. Místo je rezervováno jako ochrana proti úplnému zaplnění např. uživatelskými daty. Na velkém disku bude bohatě stačit 1 % z celkové kapacity.

      kjn@webovyservis:/$ mkfs.ext3 -m 1 /dev/hda6
      mke2fs 1.38 (30-Jun-2005)
      Filesystem label=
      OS type: Linux
      Block size=4096 (log=2)
      Fragment size=4096 (log=2)
      1294336 inodes, 2584449 blocks
        25844 blocks (1.00%) reserved for the super user
      First data block=0
      79 block groups
      32768 blocks per group, 32768 fragments per group
      16384 inodes per group
      Superblock backups stored on blocks:
              32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632
        Writing inode tables: done
      Creating journal (32768 blocks): done
      Writing superblocks and filesystem accounting information: done
    
      This filesystem will be automatically checked every 25 mounts or 180 days, 
      whichever comes first.  Use tune2fs -c or -i to override.
    

Nyní je vytvořen souborový systém, a můžeme ho připojit do systému.

Připojování diskového oddílu

Diskové oddíly se na Linuxu připojují k určitému adresáři, typicky do složky /mnt. Když po připojení daný adresář otevřeme uvidíme v něm obsah diskového oddílu. Pro připojování a odpojování oddílů máme k dispozici nástroje mount a umount. Jejich použití je velice jednoduché: mount oddíl adresář, umount oddíl.

Připojení oddílu

kjn@webovyservis:/$ mount /dev/hda6 /mnt/disk_ext3

Odpojení oddílu

kjn@webovyservis:/$ umount /dev/hda6

Zprovoznění swap oddílu

Pokud chceme v systému využívat vytvořený swap oddíl musíme jej nejdřív na swap nastavit pomocí mkswap. Příkaz mkswap je velice nebezpečný, kdybyste např. díky vypnutému numlocku vykonali mkswap /dev/hda bez čísla oddílu přijdete nejspíš o data na celém disku.

      kjn@webovyservis:/$ mkswap -f /dev/hda7
    
      Setting up swapspace version 1, size = 797814 kB
      no label, UUID=6813f5db-1d75-45aa-b6de-992527cf19d2
    

Nastavený Swap oddíl je ještě potřeba začít používat příkazem swapon.

kjn@webovyservis:/$ swapon /dev/hda7

Swap lze na Linuxu provozovat i jako obyčejný soubor na jiném souborovém systému. Oproti samotnému oddílu je to mnohem pomalejší, ale lze ho vytvořit již na existujícím oddílu.

Vytvoření Swap souboru

Příkazem dd vytvoříme soubor o požadované velikosti.

Chceme-li vytvořit swap o velikosti 512 MB vytvoříme 524288 bloků po 1024 bytech.

      kjn@webovyservis:/$ dd if=/dev/zero of=/swap_soubor bs=1024 count=524288
      kjn@webovyservis:/$ mkswap /swap_soubor
    

Souboru nastavíme práva rw-------

      kjn@webovyservis:/$ chmod 600 /swap_soubor
    

Swap soubor aktivujeme:

      kjn@webovyservis:/$ swapon /swap_soubor
    
Odpojení swapu
      kjn@webovyservis:/$ swapoff /swap_soubor
    

[nahoru]

Fstab

Soubor /etc/fstab je obyčejný textový soubor popisující jednotlivé diskové oddíly. Název vznikl jako zkratka z filesystem table. Právo zápisu do tohoto souboru má pouze administrátor. V systému mj. určuje jaké oddíly, kam, a v jakém pořadí se do systému připojují („mountují“). Připojuje oddíly automaticky po startu systému, a umožní tak práci s disky i uživatelům bez práva na mountování.

Příklad souboru fstab

      kjn@webovyservis:/$ cat /etc/fstab
      
      # /etc/fstab: static file system information.
      #
      # <file system> <mount point>   <type>  <options>             <dump>  <pass>
      proc            /proc           proc    defaults              0       0
      /dev/hda1       /               ext3    defaults,errors=remount-ro 0    1
      /dev/hda6       /www            ext2    defaults              0       2
      /dev/hda5       none            swap    sw                    0       0
      /dev/hdc        /media/cdrom0   udf,iso9660 user,noauto       0       0
    

Syntaxe fstab:

Příklad záznamu /etc/fstab pro disketovou mechaniku.
připojované zařízení umístění do kterého se zařízení připojí typ souborového systému parametry připojení indikátor zálohování svazku nastavení pořadí při připojování
/dev/fd0 /mnt/floppy vfat noauto,user 0 0
Jakýkoliv běžný oddíl, nebo i vzdálený svazek SMB (//místo/bod) Adresář připojení – obvykle /mnt/něco.
Pro swap none
Buď konkrétní filesystem nebo hodnota auto (jádro se pokusí samo detekovat). Všechny parametry připojení. Oddělují se čárkou. Indikátor pro program dump, který podle této hodnoty rozhoduje jestli oddíl zálohuje. Záznam pro program fsck, který určuje jako kolikátý bude svazek kontrolován. Kořenový oddíl by měl mít hodnotu 1, ostatní 2, a oddíly které se nekontrolují 0.

Některé parametry pro připojení oddílů v fstab

Swap

Swap oddíly jsou připojovány při bootování příkazem swapon -a .

Supermount

Některé linuxové distribuce umožňují v nastavení položku supermount. Znamená to, že mají k dispozici démona který sám sleduje co se děje se zařízeném a podle toho jej odpojuje/připojuje.

NFS

Síťové NFS svazky lze připojovat pomocí fstab také. Řádek pro připojení NFS svazku je potřeba zadat pouze celá cesta ke svazku na daném serveru.

server:/usr/local/pub  /mnt/nfs_disk  nfs  ro  0 0

[nahoru]

Utility pro práci s oddíly

Výpis oddílů, které systém registruje

cat /proc/partitions

Kontrola chyb na disku

badblocks /dev/hda1 > /home/kjn/vadne_bloky    

Kontrola integrity souborového systému

fsck -t ext2 -l /home/kjn/vadne_bloky /dev/hda1

Pomocí přepínače –l předáme programu fsck vadné bloky, z výstupu programu badblocks. Fsck se pokusí data vadných bloků zachránit, a špatné bloky zablokuje pro další použití.    

Výpis informací o souborovém systému

dumpe2fs /dev/hda1

Vytvoření kopie disku

dd if=/dev/hda1 of=image_hda1.iso

[nahoru]

Použitá literatura