Le système d'exploitation GNU-Linux/Les systèmes de fichiers



Les systèmes de fichiers Unix

modifier

UNIX gère les i-nodes (data structure) dans une table qui contient des informations telles que :

  • le propriétaire ;
  • le groupe de fichiers ;
  • les droits d'accès ;
  • la date de modification ;
  • le type de fichier.

Sous UNIX et LINUX on trouve des partitions, ex. : boot, var, tmp, home qui permettent d'organiser le système de fichiers. Au départ EXT2 sous UNIX, aujourd'hui EXT3 par défaut correspond à EXT2 plus le journal, qui a l'avantage de consigner tout ce que fait le système, et qui en cas de crash lui permet de démarrer plus rapidement sans erreurs. Les deux formats sont compatibles. Il existe toutes sortes de systèmes de fichiers.

Non journalisés

modifier
  • Ext et Ext2 : Extented FS version 2 (Linux, BSD)
  • FAT : File Allocation Table (DOS/Windows, Linux, BSD, OS/2, Mac OS X). Se décompose en plusieurs catégories :
    • FAT12 ;
    • FAT16 ;
    • FAT32 ;
    • VFAT.
  • FFS : Fast File System (BSD, Linux expérimental)
  • HFS : Hierarchical File System (Mac OS, Mac OS X, Linux)
  • HPFS : High Performance FileSystem (OS/2, Linux)
  • minix fs (minix, Linux)
  • S5 (UNIX System V, Linux)
  • UFS : Unix File System (BSD, Linux en lecture seule)

Journalisés

modifier
  • BFS (BeOS, Haiku, Linux en lecture seule et expérimental)
  • Ext3 : Extented FS version 3 - notamment pour l'ajout de la journalisation (Linux, BSD)
  • Ext4 : Extented FS version 4 - notamment pour étendre sa capacité à 1024 péta-octets (Linux expérimental)
  • HFS+ (Mac OS X, Linux)
  • JFS (AIX, OS/2, Linux)
  • JFS2 AIX5
  • LFS : (Linux)
  • NSS : Novell Storage Services (Netware et Suse Linux)
  • NTFS : New Technology FileSystem (Windows NT/2000/XP, Linux (écriture disponible grâce au pilote NTFS-3G), Mac OS X en lecture seule)
  • ReiserFS (Linux, BSD en lecture seule)
  • Reiser4 (Linux expérimental)
  • Spufs : Synergistic processing unit filesystem
  • UFS+ : Unix FS + journal (BSD, Linux en lecture seule)
  • XFS (Irix, Linux, BSD en lecture seule)
  • ZFS : Zettabyte FileSystem (Solaris10, FreeBSD 8.0)

Réseau

modifier
  • AFS Andrew File System : (Aix, Linux)
  • Coda (Systèmes de fichiers informatique) (Linux)
  • NFS (tous les Unix, Linux, Mac OS X) (Windows pour la 4)
  • NCP NetWare Core Protocol (Novell NetWare, Linux en client seul)
  • SSHFS (tous les Unix ?, Linux)
  • SMB ou Server message block (Windows) (Linux, BSD et Mac OS X via Samba)
  • CIFS (Évolution de SMB, supporté par Samba ainsi que par Windows 2000 et XP)

Cluster

modifier
  • GPFS, General Parallel File Sytem : Linux, AIX
  • LustreFS, Compression de Linux et de Cluster : Linux
  • OCFS2, développé par Oracle : Linux
  • PVFS2, Parallel Virtual FileSystem version 2 : Linux, Unix

Spécialisés

modifier
  • CFS Cryptographic File System : FS chiffré (BSD, Linux)
  • cramfs : FS compressé (Linux en lecture seule)
  • EFS Encrypting File System : FS chiffré au dessus de NTFS (Windows)
  • ISO 9660 : en lecture seule sur tous les systèmes lisant les CDROM/DVDROM de données
  • JFFS et JFFS2 : FS pour support physique sans block, typiquement des cartes flash. Il est compressé et journalisé (Linux)
  • QNX4fs : FS utilisé pour le temps réel (QNX, Linux en lecture seule)
  • UDF : le format de disque universel (système de fichiers des DVD-ROM et des disques optiques réinscriptibles tels les CD-RW, DVD±RW, etc.)

Cette commande indique tous les systèmes de fichiers qui sont montés. On l'utilise pour accéder à une partition (en root pour accéder au CD-ROM ou au lecteur disquette).

Exemple : pour brancher une clé USB il faut la monter. On édite le fichier log par la commande tail -f /var/log/messages afin de savoir sur quel système de fichiers se trouve la clé. Puis on utilise mount pour accéder au contenu de la clé.

Exemple :

 # mount /dev/sdc1 /mnt   # le répertoire de son choix

Il est possible de préciser le système de fichier s'il ne le détecte pas

Syntaxe :

 # mount -t système de fichiers périphériques point de montage

Exemple :

 # mount -t vfat /dev/sdc1 /mnt

Lorsque l'on a fini d'utiliser la clé il faut la démonter à cause du cache.

Pour sauvegarder des montages réguliers, on utilise le fichier "fstab" détaillé ci-après, et sudo mount -a monte tous ceux qui sont dedans.

La commande umount permet de démonter une partition. Cette opération est indispensable si on veut être sûr que les données soient correctement écrites sur la partition. Exemples :

# umount /dev/sdc1

ou

# umount /mnt

Si la partition est en cours d'utilisation, on ne pourra pas la démonter et la commande umount va retourner un message d'erreur :

# umount /home
umount: /home: device is busy
umount: /home: device is busy

Deux commandes permettent de connaître les fichiers ouverts et les processus qui sont en train d'utiliser la partition et qui empêchent le démontage.

La commande lsof (list open files) permet de connaître les fichiers ouverts :

 # lsof /home
 COMMAND    PID   USER   FD   TYPE DEVICE    SIZE   NODE NAME
 gdm       2751   root    9w   REG  22,71     761 964774 /home/alex/.xsession-errors
 startkde  2882   alex  cwd    DIR  22,71    4096 964769 /home/alex
 ...

La commande fuser permet aussi de connaître les processus qui ont des fichiers ouverts sur la partition.

# fuser -m /home
/home:                2751  2882c  2961c  2962c  2965c  2967c  2969c
2971c  2976c  2978c  2979c  2981c  2983c  2984c  2986c  2990c  2992c
2993c  2995c  2997c  2999c  3002c  3037c  3683c  3684c  4102c  4161c

Le fichier /etc/fstab

modifier

Le fichier /etc/fstab contient la liste des partitions montées automatiquement au démarrage du système.

Extrait d'un fichier fstab :

 # /etc/fstab: static file system information.
 #
 # <file system> <mount point>   <type>  <options>       <dump>  <pass>
 proc            /proc           proc    defaults        0       0
 /dev/sdb1       /               ext3    defaults,errors=remount-ro 0       1
 /dev/sdb6       /home           ext3    defaults        0       2
 /dev/sdb5       none            swap    sw              0       0
 /dev/hda        /media/cdrom0   udf,iso9660 user,noauto     0       0
 /dev/fd0        /media/floppy0  auto    rw,user,noauto  0       0

Pour monter automatiquement une partition au démarrage, il suffit de rajouter une ligne dans le fichier /etc/fstab, comme par exemple :

 /dev/hdc1       /media/winnt    ntfs    defaults        0       0

Pour chaque partition, on peut spécifier des options dans le fichier /etc/fstab. Options les plus courantes :

  • user : permet aux utilisateurs d'effectuer les opérations de montage / démontage
  • noauto : ne monte pas automatiquement la partition au boot

La commande sync force le noyau à écrire le cache. Pour savoir la taille qu'il reste sur la clé on utilisera la commande df (disk free) -h (human readable) pour avoir les informations en kilo,mega,giga. df -i affiche le pourcentage d'occupation de la table des i-nodes.

Pour les partages NFS, on peut lancer sudo apt install nfs-common.

Formater un système de fichiers

modifier

La commande mkfs (make filesystem) permet de formater un système de fichiers. Exemple :

 # mkfs -t ext3 /dev/sdc1
À faire... 

parler des inodes et superblocks

ATTENTION LE SYSTÈME DE FICHIER NE DOIT PAS ÊTRE MONTÉ

mkfs est un wrapper (aiguillage)

Afin de simuler le formatage, nous allons créer un disque dur virtuel. Pour simuler ceci avec un disque dur virtuel, on utilisera le pseudo périphérique loop.

 # modprobe loop
 # dd if=/dev/zero of=hd1 bs=1K count=100000

Ceci crée un fichier vide hd1 qui aura une taille de 100 Mo.

 # losetup /dev/loop0 hd1

On attache le pseudo-pérphérique /dev/loop0 à notre fichier hd1.

Une fois le disque dur virtuel crée on peut le formater :

 # mkfs -t ext3 /dev/loop0
 # mount /dev/loop0 /media/cleusb

Pour le démonter :

 # umount /media/cleusb

CAS PARTICULIER : pour les disquettes, on effectue en général un formatage de bas niveau :

 # fdformat /dev/fd0        # vérifie l'intégrité de la disquette
 # mkfs -t ext3 /dev/fd0    # formate la disquette

ATTENTION À BIEN DÉMONTER AU PRÉALABLE LE PÉRIPHÉRIQUE

La commande suivante permet de vérifier l'intégrité du système de fichiers :

 # fsck -t ext3 /dev/loop0 

L'option -c de fsck permet de vérifier les bad blocks (en lecture seule par défaut). L'option -v (verbose, soit verbeux) pour voir ce qu'il fait.

À faire... 

parler des commandes : badblocks, tune2fs, dumpe2fs

Le swap

modifier

Partition de swap

modifier

Le SWAP signifie échange, il s'agit d'une mémoire virtuelle en effet lorsque la mémoire de l'ordinateur arrive à saturation, le système écrit sur une partition SWAP de façon à libérer de la mémoire.

Il est possible de créer une partition SWAP grâce à la commande mkswap :

 # mkswap /dev/sdb5

On utilisera la commande swapon /dev/sdb5 pour l'activer :

 # swapon /dev/sdb5

Avec la commande 'free,' il est possible de vérifier si le swap est activé :

 # free
 ...
 Swap:      1951856      65080    1886776

Pour lister les partitions SWAP :


 # cat /proc/swaps
 ...				     Type      Size	Used	Priority
 /dev/hda3                           partition	979956	307284	-1

Fichier de swap

modifier

Il est possible de créer un fichier swap en complément d'une partition SWAP, pour faire ceci nous allons commencer par créer un fichier de huit gigaoctets :

  # dd if=/dev/zero of=/ficswap bs=1M count=8000

On initialise ensuite le fichier en swap :

  # mkswap /ficswap

On active le swap :

  # swapon /ficswap

Pour désactiver la partition de SWAP :

  # swapoff /ficswap

Si l'on tape la commande free on constate que la taille du swap a augmenté.

 $ free
               total       utilisé      libre     partagé tamp/cache   disponible
Mem:         7910624     5539632      294096      564916     2076896     1493484
Échange:    8388604     1252608     7135996

Pour visualiser son utilisation autrement :

  $ cat /proc/swaps
Filename				Type		Size		Used		Priority
/swapfile                               file		8388604		1225472		-2

Utilitaires disques-durs

modifier

Technologie S.M.A.R.T.

modifier

SMART est une technologie de monitoring des disques dur.

Nom du package apt : smartmontools

 # smartctl -d ata -a /dev/sda
 smartctl version 5.36 [i686-pc-linux-gnu] Copyright (C) 2002-6 Bruce Allen
 Home page is http://smartmontools.sourceforge.net/
 
 === START OF INFORMATION SECTION ===
 Model Family:     Western Digital Caviar SE (Serial ATA) family
 Device Model:     WDC WD800JD-22MSA1
 Serial Number:    WD-WMAM9TZ26746
 Firmware Version: 10.01E01
 User Capacity:    80 026 361 856 bytes
 Device is:        In smartctl database [for details use: -P show]
 ATA Version is:   7
 ATA Standard is:  Exact ATA specification draft version not indicated
 Local Time is:    Wed Dec  5 15:16:10 2007 CET
 SMART support is: Available - device has SMART capability.
 SMART support is: Enabled
 
 === START OF READ SMART DATA SECTION ===
 SMART overall-health self-assessment test result: PASSED
 
 General SMART Values:
 
 (...)
 
 Short self-test routine
 recommended polling time:        (   2) minutes.
 Extended self-test routine
 recommended polling time:        (  33) minutes.
 Conveyance self-test routine
 recommended polling time:        (   6) minutes.
 
 SMART Attributes Data Structure revision number: 16
 Vendor Specific SMART Attributes with Thresholds:
 ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
   1 Raw_Read_Error_Rate     0x000f   200   200   051    Pre-fail  Always       -       0
 
 (...)

Le fichier /etc/smartd.conf permet de programmer des tests, et l'envoie de messages d'alertes.

hdparm permet de configurer les paramètres d'accès au disque dur.

 #hdparm /dev/sdb
 
 /dev/sdb:
  IO_support   =  0 (default 16-bit)
  readonly     =  0 (off)
  readahead    = 256 (on)
  geometry     = 9729/255/63, sectors = 156301488, start = 0

Pour tester les performances on utilise l'option -tT

 # hdparm -tT /dev/sdb
 
 /dev/sdb:
  Timing cached reads:   888 MB in  2.00 seconds = 443.99 MB/sec
  Timing buffered disk reads:  174 MB in  3.00 seconds =  57.91 MB/sec

hddtemp

modifier

hddtemp utilise les données SMART du disque dur spécifié et retourne sa température.

 #hddtemp /dev/sda
 /dev/sda: WDC WD800JD-22MSA1: 31°C

L'option -n permet de ne renvoyer que la valeur de la température (utile pour les scripts)

 # hddtemp -n /dev/sda
 31