LX-INL-INFO-schijven-filesystems
updated nov/25/2010 22:36

schijven en filesystems

nuttige links:
inhoudstafel: snelkoppelingen
tldp - how to partioning with fdisk:
http://tldp.org/HOWTO/Partition/fdisk_partitioning.html
wikipedia - filesystems:
http://en.wikipedia.org/wiki/Filesystem
wikipedia - filesystems compared:
http://en.wikipedia.org/wiki/Comparison_of_file_systems
tldp - how to filesystems:
http://tldp.org/HOWTO/Filesystems-HOWTO.html

In Linux wordt de harde schijf helemaal anders beheerd dan in windows:

Zo zijn er geen drive letters.

De  \ (backslash) wordt niet gebruikt om directory-niveaus van mekaar te scheiden; wel de / (slash of forward slash)

De organisatie op schijf is ook sterk verschillend. Software staat bijvoorbeeld in /usr en documenten van gebruikers in /home.

Er zijn verschillende systemen voor het filesystem formaat. De belangrijkste zijn EXT3 en XFS, maar er zijn er ook andere. Linux kan ook windows partities (ntfs en fat32) lezen en beschrijven. Voor windows bestaat er een EXT3 driver.

De manier waarop hardware wordt bekeken is anders onder linux.

Tenslotte voorziet linux in een bootloader, GRUB, die er voor zorgt dat verschillende besturingssystemen naast mekaar kunnen bestaan en opstarten op één en dezelfde computer.

  1. algemeen

    Zoals reeds vermeld bestaan er geen drive letters in linux. De basis van het systeem gaat terug tot de root-directory:

    /

    Van hieruit vertrekt de hiërarchie van het filesysteem.
    De inhoud van de root directory ziet er als volgt uit:

    $ ls /

    bin    initrd.img  mnt      tmp      boot   lib     proc     usr
    etc    lost+found  root     srv      var    dev     home     initrd    
    media  opt         sbin     sys      vmlinuz

  2. organisatie van het filesystem

    /
    de root directory: de top van de pyramide
    /bin
    binaries: gebruikerscommando's zoals cp, ls en vele andere
    /sbin
    system binaries: commando's voor de systeembeheerder, zoals schijfbeheer (fdisk), netwerkbeheer e.a. (vb.: route, ifconfig)
    /lib
    libraries: de programma's op je linux systeem gebruiken deze libraries voor veel voorkomende procedures
    /usr
    programma's en externe pakketten (gnome, kde, openoffice, andere)
    de organisatie is functioneel en niet per pakket. Dit wil zeggen dat alle user commando's (/usr/bin), alle libraries (/usr/lib) en alle systeem commando's (/usr/sbin) van alle pakketten samen zitten in daarvoor bestemde subdirectories.
    In windows systemen zit een pakket meestal in zijn eigen subdirectory, onder Program files, maar in linux wordt het pakket als het ware in stukken getrokken en functioneel over verschillende directories verspreid. Op die manier worden dezelfde DLL's tientallen keren teruggevonden
    /home
    de home directories van de verschillende gebruikers behalve de root gebruiker
    /root
    de home directory van de root gebruiker. We noemen deze directory "de directory: root"
    /etc
    configuratiebestanden op je systeem
    /dev
    devices: device files geven rechtstreekse toegang tot de hardware
    /media
    removable media: cdroms, floppies, usb sticks en geheugenkaarten worden 'gemount' in deze directory op zogenaamde mountpoints. Een mountpoint is gewoon een lege directory
    /mnt
    netwerk shares e.a. devices werden hier vroeger gemount. Wordt nu minder gebruikt
    /boot
    je bootloader en je linuxkernel zitten hier
    /var
    variabele files: log files, printer spooler, mail queue en andere variabele bestanden tbv. DNS, proxyserver en andere daemons (een daemon is een linux service)
    /tmp
    temporary files: zoals die worden gecreëerd door allerlei programma's als firefox, office, mc e.a.
    /opt
    in sommige distributies (SuSE, ...) worden hier de grotere software pakketten geplaatst
    /proc
    je kijkt hier binnen in de processen die op je systeem draaien, rechtstreeks in het geheugen.
    /sys
    je kijkt binnen in het geheugen naar de hardware informatie van je huidige systeem
    /srv
    default directory voor sommige web of ftp servers

  3. mounten

  4. Omdat linux diskdevices geen drive letters krijgen moet alles vertrekken vanuit de / root-directory. Dat betekent dat een cdrom een plaats vindt op een directoryplaats in de directoryhiërarchie.

    We kunnen een lijst van deze plaatsen, mountpoints, opvragen met het commando mount.

    $ mount
    /dev/sda2 on / type ext3 (rw,errors=remount-ro)
    tmpfs on /lib/init/rw type tmpfs (rw,nosuid,mode=0755)
    proc on /proc type proc (rw,noexec,nosuid,nodev)
    sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
    procbususb on /proc/bus/usb type usbfs (rw)
    udev on /dev type tmpfs (rw,mode=0755)
    tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
    devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=620)
    /dev/sda5 on /home/ftp type xfs (rw)
    /dev/sdc1 on /home/ftp/images type xfs (rw)

    //172.16.0.15/install on /hades type cifs (ro,mand)
    //172.16.0.100/x_drive$ on /xdrive type cifs (rw,mand)
    nfsd on /proc/fs/nfsd type nfsd (rw)
    rpc_pipefs on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
    binfmt_misc on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
    /dev/scd0 on /media/cdrom0 type iso9660 (ro,noexec,nosuid,nodev,user=bert)


    In het bovenstaande voorbeeld hebben we een 5-tal items vetjes gedrukt:

    We bekijken eerst de allerlaatste tekstregel; die bevat informatie over de cdrom.

    /dev/scd0 on /media/cdrom0 type iso9660 (ro,noexec,nosuid,nodev,user=bert)

    • /dev/scd0 is het fysisch apparaat (device name) en het wordt gemount op /media/cdrom0 (mountpoint). Dit mountpoint is een lege directory, die gebruikt wordt als aangrijpingspunt voor de cdrom in de cd-lezer.

    • Het filesystem type is iso9660. Dat is het standaard filesysteem voor cdroms.

    • De gegevens tussen haakjes (ro,noexec,nosuid,nodev,user=bert) betreffen parameters van het media type.

    We kunnen nu met ls kijken in de cdrom:

    $ ls -l /media/cdrom
    total 150852
    drwxr-xr-x 2 root root      2048 2008-02-23 17:12 bootdisk
    drwxr-xr-x 2 root root      2048 2008-02-17 23:18 grub4dos
    drwxr-xr-x 3 root root      4096 2008-02-25 23:45 isolinux
    drwxr-xr-x 2 root root      2048 2008-02-07 23:32 syslinux
    -rw-rw-rw- 1 root root 154460160 2008-02-23 17:22 sysrcd.dat
    -rw-r--r-- 1 root root        45 2008-02-23 17:23 sysrcd.md5
    -rw-r--r-- 1 root root       876 2008-02-02 23:51 usbstick.htm
    -rw-r--r-- 1 root root         6 2008-02-25 23:44 version


    In de GUI GNOME of KDE hoeven we het mountpoint niet te kennen. De CD-rom komt als shortcut tevoorschijn op onze desktop, en we kunnen hem meteen gebruiken. Om de CD te verwijderen kunnen we gewoon op de knop van de cd-lezer drukken, maar dat werkt niet altijd. We kunnen rechts klikken op het CDROM pictogram op onze desktop, en daarna eject selecteren.

    Zonder GUI, op de terminal, doe je dat als volgt:

    $ eject /dev/scd0

    of ook

    $ eject /dev/cdrom

    Een andere manier bestaat erin de CDROM te umounten en daarna gewoon op de knop te drukken van de cd-lezer.

    $ umount /dev/cdrom

    De umount opdracht werkt voor alle devices, ook voor harde schijven usb-sticks.

    Zoals dat ook bij andere computersystemen het geval is, is het absoluut noodzakelijk eerst usb-sticks te umounten vooraleer ze van de computer te verwijderen. Het umount commando schrijft de cache terug naar het apparaat. Indien je dit vergeet te doen is er een zeer grote kans op dataverlies.

    Als we een CD/DVD-ROM in de CDlezer stoppen, wordt deze automatisch gemount in het filesystem. Maar voor vaste bronnen (zoals een harde schijf) is dat niet het geval en gebeurt het mounten/umounten manueel.

    Als we bijvoorbeeld een schijf die /dev/sda5 heet willen mounten in de directory /home/ftp moeten we als root gebruiker het volgende commando intikken:

    # mount /dev/sda5 /home/ftp

  5. harde schijven

    Harde schijven krijgen in linux, een device naam; net zoals een cdrom of usb-stick.
    Die device naam begint meestal met /dev/sd 
    De eerste harde schijf krijgt als naam /dev/sda
    de tweede /dev/sdb enzoverder.

    (in sommig linuxdistributies krijgen de oudere IDE schijven nog steeds /dev/hd als prefix en de sata schijven /dev/sd - usb sticks worden ook meestal gezien als /dev/sd)

  6. partities en fdisk

    Harde schijven worden verdeeld in partities. Partities zijn delen van een harde schijf die mekaar niet overlappen. Partitioneren is een techniek om een harde schijf onder te verdelen o.a. voor gebruik met verschillende besturingssystemen (bijvoorbeeld een windowsXP gedeelte en een linux gedeelte) of om besturingssysteem en data van mekaar te scheiden. In dat geval zorgt een overlopende home-directory niet voor problemen met het besturingssysteem zelf.

    Linux gebruikt meestal minstens 2 partities:
    een gewone root-partitie /
    en een swap-partitie.

    Als root gebruiker kunnen we met het commando fdisk -l de partitietabel(len) van de schijf(ven) in de computer zichtbaar maken:

    # fdisk -l

    Disk /dev/sda: 160.0 GB, 160041885696 bytes
    255 heads, 63 sectors/track, 19457 cylinders
    Units = cylinders of 16065 * 512 = 8225280 bytes

       Device Boot      Start         End      Blocks   Id  System
    /dev/sda1               1         243     1951866   82  Linux swap / Solaris
    /dev/sda2             244        2431    17575110   83  Linux
    /dev/sda3            2432       19457   136761345    5  Extended
    /dev/sda5            2432       19457   136761313+  83  Linux

    Disk /dev/sdc: 200.0 GB, 200049647616 bytes
    255 heads, 63 sectors/track, 24321 cylinders
    Units = cylinders of 16065 * 512 = 8225280 bytes

       Device Boot      Start         End      Blocks   Id  System
    /dev/sdc1               1       24319   195342336   83  Linux


    In het hogere voorbeeld zijn er twee schijven: /dev/sda en /dev/sdc
    De /dev/sdc schijf bevat slechts één partitie, namelijk /dev/sdc1

    De nummers 1 tot 4 betreffen primary partitions; Als er meer dan 4 partities nodig zijn kan je een extended partitie maken. De extended partition is zelf een primary partition. Ze wordt dan onderverdeeld in logical volumes met nummers 5 tot 64.

    Een partitie wordt begrensd door cylinders. Afhankelijk van de grootte kan een harde schijf meer of minder cylinders groot zijn. Eén cylinder bevat verschillende tracks (op de boven- en onderkant van de 1 of meer platen met daarop magnetisch materiaal). Een track is op zijn beurt onderverdeeld in sectoren. Een sector is in een IBM compatibele PC altijd 512 bytes groot.


  7. Linux partities zijn van type 83 (ongeacht het filesysteem),
    swap partities zijn van type 82.

    Hoe je fdisk gebruikt kun je nalezen in de volgende bijlage:

    http://www.linux800.be/lx-inl-info-fdisk.php

    Na het gebruik van fdisk moet je de computer herstarten!

  8. formatteren

    Zodra een partitie is aangemaakt met fdisk, moet je deze formatteren vooraleer je ze kan gebruiken. In linux heb je de keuze tussen de volgende courante filesystemen: (bron wikipedia 2008)


    ext3
    Third Extended File System oftewel ext3 is een bestandssysteem dat wordt gebruikt door Linux-besturingssystemen. Het is tegenwoordig standaard voor de meeste Linux-distributies. Ext3 is in essentie een ext2-bestandssysteem aangevuld met een journaal.
    ext4
    De opvolger van ext3. Kan partities aan tot 1 EXAbyte, verbeterde automatische defragmentatie, meer dan 32000 subdirectories, journaal checksumming, sneller maar toch achterwaards compatibel met ext3 en ext2.
    reiserfs
    In tegenstelling tot de meeste bestandssystemen, die harde schijven organiseren als lineaire ketens van data, beschouwt ReiserFS het bestandssysteem als een boom.

    Het ReiserFS-systeem heeft, door zijn opbouw, een groot aantal voordelen. Met name het snel opzoeken van data is goed mogelijk door de gebalanceerde boomstructuur en het gebruik van indexerende sleutels in iedere geformatteerde en interne knoop. Bovendien heeft het bestandssysteem een structuur waarop makkelijk uitbreidingen kunnen worden geprojecteerd, zoals het journaling systeem waarmee ReiserFS zich een plaats verworven heeft in het Linux besturingssysteem.
    xfs
    XFS heeft de volgende eigenschappen: alleen journaliseren van metadata, dynamische uitbreiding van filegrootte, striped allocation: optimalisering van doorvoer door I/O-operaties te laten samenvallen met de stripes op een RAID-disksysteem, defragmentatie terwijl het bestandssysteem wordt gebruikt
    een realtime-I/O-API (voor hard- of soft-realtimetoepassingen, zoals videostreaming), allocate-on-flush: een manier om fragmentatie te verminderen door het samenvoegen van allocaties voor langzaam groeiende bestanden
    jfs
    Journaled File System of JFS is een 64-bit journaling filesystem ontwikkeld door  IBM, en beschikbaar onder GNU GPL. Beschikbaar voor AIX, eComStation, OS/2 en Linux operating systems.

    In Linux zijn momenteel ext3 en xfs de meest gebruikte filesystemen.

    Om je schijf te formatteren onder ext3 geef je als root het volgende commando:

    # mkfs.ext3 /dev/sda6
  9. fstab

    Om je schijf te gebruiken moet je ze vervolgens mounten op een mountpoint. Een mountpoint is een lege directory, ergens in je reeds bestaande filesystem. Voorbeeld:

    # mkdir /testpunt
    # mount /dev/sda6 /testpunt

    Om je schijf permanent beschikbaar te hebben na elke opstart moet je de mount nog toevoegen in de file /etc/fstab (systeembeheer)

    Voorbeeld:

    # /etc/fstab: static file system information.
    #
    # <file system> <mount point>   <type>  <options>             <dump> <pass>
    proc            /proc           proc    defaults                   0   0
    # /dev/sda2
    /dev/sda2       /               ext3    relatime,errors=remount-ro 0   1
    # /dev/sda3
    /dev/sda3       /home           ext3    relatime                   0   2
    # cdrom
    /dev/scd0       /media/cdrom0   udf,iso9660 user,noauto,exec,utf8  0   0
    # sda6 testpunt
    /dev/sda6       /testpunt       ext3    defaults                   0   0


    Je kan de configuratie in fstab testen door eerst testpunt opnieuw te umounten
    # umount /testpunt

    en daarna de hele fstab te mounten met
    # mount -a

    en tenslotte te controlleren of je toegevoegde schijf inderdaad gemount is
    # mount

    of met
    # df
    Filesystem           1K-blocks      Used Available Use% Mounted on
    /dev/sda2             24218396   6235060  16762800  28% /
    varrun                  257800       252    257548   1% /var/run
    varlock                 257800         0    257800   0% /var/lock
    /dev/sda6             57146684  12618328  41648308  24% /home
    /dev/sda3             24218396    176200  22821660   1% /sda3
    /dev/sda1              6888448   2707648   4180800  40% /winxp