Ceci est une ancienne révision du document !
Table des matières
Dernière mise-à-jour : 2020/01/30 03:36
SO209 - Gestion du Système de Fichiers UFS
SO101 - Système de Fichiers
Le système de fichiers d'Unix est organisé autour d'une arborescence unique ayant un point de départ appelé la racine, représenté par le caractère /. En dessous de cette racine se trouvent des répertoires contenant fichiers et sous-répertoires.
L'arborescence
- /bin : est une abréviation de ‘binary’ ou binaires. Sous Solaris /bin est un lien symbolique vers /usr/bin. Il contient des programmes tels ls.
- /cdrom : points de montage pour les CD et DVD.
- /dev : contient des noms logiques d’unités utilisés pour accéder à tout type de matériel. Ce sont des liens symboliques vers des fichiers spéciaux du répertoire /devices. Le répertoire /dev est organisé en sous-répertoires, par exemple :
- /dev/dsk : partitions disque en mode bloc
- /dev/rdsk : partitions disque en mode raw bloc
- /dev/printers : imprimantes
- /dev/rmt : lecteurs de bandes
- /devices : contient des noms physiques d'unités.
- /etc : contient des fichiers de configuration.
- /export : contient le répertoire /home. Le répertoire /home contient les répertoires de chaque utilisateur, sauf l’utilisateur root, qui doivent être exportés par le serveur NFS.
- /home : contient les répertoires des comptes locaux.
- /kernel : contient le noyau Solaris (genunix) et les fichiers associés.
- /lib : contient les bibliothèques communes utilisées par les programmes. Sous Solaris /lib est un lien symbolique vers /usr/lib.
- /lost+found : répertoire contenant des fichiers à récupérer par la commande fsck.
- /mnt : répertoire utilisé pour des montages occasionnels.
- /opt : répertoire utilisé pour l'installation des logiciels optionnels.
- /platform : contient des fichiers spécifiques à la plate-forme matérielle.
- /proc : un pseudo-filesystem représentant les processus en activité.
- /sbin : contient des binaires, donc programmes, pour l’administration du système local.
- /system : Point d'attache des pseudo-filesystems suivant :
- /system/contract : système de fichiers au format CTFS,
- /system/object : système de fichiers au format OBJFS.
- /tmp : stocke des fichiers temporaires créés par des programmes. Il est vidé à chaque redémarrage du système.
- /usr : contient de nombreux répertoires tels :
- /usr/bin : contient des commandes des utilisateurs,
- /usr/sbin : contient des commandes administratives,
- /usr/share/doc : contient les HOWTO,
- /usr/share/man : contient les manuels.
- /var : contient des fichiers de taille variable ainsi que des répertoires tels :
- /var/adm : contient des fichiers journaux et comptabilité,
- /var/sadm : répertoire de travail pour le gestionnaire de paquets logiciels.
- /vol : répertoire du service VOLD (VOlume Management Daemon) utilisé pour monter et démonter automatiquement les périphériques amovibles.
Il existe trois types majeurs de fichier sous le système Solaris:
- les fichiers normaux ( ordinary files )
- les répertoires ( directories )
- les fichiers spéciaux ( special files ou Devices)
Le fichiers normaux sont des fichiers textes, des tableaux ou des exécutables.
La limite de la longueur du nom de fichier est de 255 caractères.
Il y a une distinction entres les majuscules et le minuscules.
Le caractère / est interdit dans les noms des fichiers.
L'espace est déconseillé dans les noms des fichiers.
Si le nom d'un fichier commence par un ., le fichier devient caché.
La commande mount
La commande mount est utilisée pour monter un filesystem. Monter un filesystem est nécessaire afin d'avoir accès à son contenu.
Les filesystems montés automatiquement par Solaris lors du démarrage sont décrits dans le fichier /etc/vfstab :
# cat /etc/vfstab #device device mount FS fsck mount mount #to mount to fsck point type pass at boot options # fd - /dev/fd fd - no - /proc - /proc proc - no - /dev/dsk/c0t0d0s1 - - swap - no - /dev/dsk/c0t0d0s0 /dev/rdsk/c0t0d0s0 / ufs 1 no - /dev/dsk/c0t0d0s7 /dev/rdsk/c0t0d0s7 /export/home ufs 2 yes - /devices - /devices devfs - no - sharefs - /etc/dfs/sharetab sharefs - no - ctfs - /system/contract ctfs - no - objfs - /system/object objfs - no - swap - /tmp tmpfs - yes -
Ce fichier comporte 7 colonnes :
- device to mount
- Nom de la partition en mode bloc pour un filesystem UFS ou une zone de swap
- Nom de la ressource NFS
- Nom d'un répertoire pour un filesystem virtuel
- device to fsck
- Nom de la partition en mode bloc pour un filesystem UFS
- Le signe - dans les autres cas car non significatif
- mount point
- Nom du répertoire de montage
- Le signe - dans les autres cas car non significatif
- FS type
- Type de filesystem
- fsck pass
- - indique que le filesystem ne sera pas vérifié par fsck
- 0 indique qu'un filesystem UFS ne sera pas vérifié par fsck mais un autre type sera vérifié
- 1 indique que le filesystem sera vérifié par fsck dans l'ordre de son apparition dans ce fichier
- 2 indique que le filesystem sera vérifié par fsck en parallèle
- mount at boot
- désigne si oui ou non le filesystem est monté au boot par la commande mountall
- le filesystem racine prend toujours la valeur no car il est déjà monté au moment de l'interprétation de ce fichier
- mount options
- la valeur - indique toutes les options par défaut
- ce champs peut comporter une liste d'options séparés par des virgules sans espaces
- dans le cas d'un filesystem UFS, l'option logging est activée par défaut
Afin de monter un filesystem manuellement il est nécessaire de connaître :
- le nom da la partition exprimé sous la forme du fichier spécial en mode bloc
- le répertoire de montage
Une commande de montage ressemble à celle-ci :
mount /dev/dsk/c0t0d1s0 /point_de_montage
où point_de_montage est un répertoire vide dans lequel est monté le filesystem /dev/dsk/c0d1s0.
Le répertoire de montage doit être dédié à cet usage. Tout fichier dans le répertoire sera caché par la présence du contenu de /dev/dsk/c0d1s0.
Options de la commande
Les options de la commande mount sont :
# mount --help mount: illegal option -- help Usage: mount [-v | -p] mount [-F FSType] [-V] [current_options] [-o specific_options] {special | mount_point} mount [-F FSType] [-V] [current_options] [-o specific_options] special mount_point mount -a [-F FSType ] [-V] [current_options] [-o specific_options] [mount_point ...]
La commande umount
L'action de démontage est effectuée par l'utilsation de la commande umount. Une commande umount ressemble à :
umount /point_de_montage
ou
umount /dev/dsk/c0t0d1s0
Si le filesystem est en cours d'utilisation la commande umount échoue.
Pour connaître les processus en cours, on dispose de la commande fuser.
Par exemple, dans notre cas, le filesystem /dev/dsk/c0t0d0s7 est monté sur /export/home :
# cat /etc/vfstab | grep home /dev/dsk/c0t0d0s7 /dev/rdsk/c0t0d0s7 /export/home ufs 2 yes -
Dans le cas où vous êtes connecté en tant qu'un utilisateur normal et vous agissez en tant que root grâce à la commande su, vous ne pourrez pas démonter /export/home. Par contre, si vous vous connectez directement en tant que root, aucun processus utilise ce montage.
# fuser -cu /export/home /export/home:
Les options de cette commande sont :
- -c
- effectue une recherche récursive
- -u
- affiche les noms des propriétaires des processus trouvés
Dans ce cas, vous pouvez démonter /export/home :
# umount /export/home
Options de la commande
Les options de la commande umount sont :
# umount --help umount: illegal option -- help Usage: umount [-f] [-V] [-o specific_options] {special | mount-point} umount -a [-f] [-V] [-o specific_options] [mount_point ...]
Le fichier /etc/mntab
Les filesystems actuellement montés sont consignés dans le fichier /etc/mntab. Ce fichier peut être consulté mais pas modifié :
# cat /etc/mnttab /dev/dsk/c0t0d0s0 / ufs rw,intr,largefiles,logging,xattr,onerror=panic,dev=840000 1575092681 /devices /devices devfs dev=4b80000 1575092677 ctfs /system/contract ctfs dev=4c00001 1575092677 proc /proc proc dev=4bc0000 1575092677 mnttab /etc/mnttab mntfs dev=4c40001 1575092677 swap /etc/svc/volatile tmpfs xattr,dev=4c80001 1575092677 objfs /system/object objfs dev=4cc0001 1575092677 sharefs /etc/dfs/sharetab sharefs dev=4d00001 1575092677 /usr/lib/libc/libc_hwcap1.so.1 /lib/libc.so.1 lofs dev=840000 1575092680 fd /dev/fd fd rw,dev=4e80001 1575092681 swap /tmp tmpfs xattr,dev=4c80002 1575092682 swap /var/run tmpfs xattr,dev=4c80003 1575092682 /dev/dsk/c0t0d0s7 /export/home ufs rw,intr,largefiles,logging,xattr,onerror=panic,dev=840007 1575092688 -hosts /net autofs nosuid,indirect,ignore,nobrowse,dev=4f40001 1575092690 auto_home /home autofs indirect,ignore,nobrowse,dev=4f40002 1575092690 solaris.i2tch.loc:vold(pid588) /vol nfs ignore,noquota,dev=4f00001 1575092690
Pour remonter /export/home, il convient d'utiliser la commande mount :
# mount -F ufs /dev/dsk/c0t0d0s7 /export/home
Regardez maintenant de nouveau le fichier /etc/mnttab :
# cat /etc/mnttab /dev/dsk/c0t0d0s0 / ufs rw,intr,largefiles,logging,xattr,onerror=panic,dev=840000 1575092681 /devices /devices devfs dev=4b80000 1575092677 ctfs /system/contract ctfs dev=4c00001 1575092677 proc /proc proc dev=4bc0000 1575092677 mnttab /etc/mnttab mntfs dev=4c40001 1575092677 swap /etc/svc/volatile tmpfs xattr,dev=4c80001 1575092677 objfs /system/object objfs dev=4cc0001 1575092677 sharefs /etc/dfs/sharetab sharefs dev=4d00001 1575092677 /usr/lib/libc/libc_hwcap1.so.1 /lib/libc.so.1 lofs dev=840000 1575092680 fd /dev/fd fd rw,dev=4e80001 1575092681 swap /tmp tmpfs xattr,dev=4c80002 1575092682 swap /var/run tmpfs xattr,dev=4c80003 1575092682 -hosts /net autofs nosuid,indirect,ignore,nobrowse,dev=4f40001 1575092690 auto_home /home autofs indirect,ignore,nobrowse,dev=4f40002 1575092690 solaris.i2tch.loc:vold(pid588) /vol nfs ignore,noquota,dev=4f00001 1575092690 /dev/dsk/c0t0d0s7 /export/home ufs rw,intr,largefiles,logging,xattr,onerror=panic,dev=840007 1575094632
Options de montage pour un filesystem UFS
Le dernier champs du fichier /etc/vfstab contient les options de montage :
Option | Valeur par défaut | Description |
---|---|---|
rw/ro | rw | lecture/écriture ou lecture seule |
largefiles/nolargefiles | largefiles | Création des fichiers de plus de 2Go |
logging/nologging | logging | Journalisation ou non |
atime/noatime | atime | Mise à jour ou non de la date de dernière consultation des fichiers non modifiés |
exec/noexec | exec | Exécution ou non des programmes |
devices/nodevices | devices | Accès ou non aux fichiers spéciaux |
setuid/nosetuid | setuid | Prise en compte ou non des permissions SUID et SGID |
suid/nosuid | suid | Combinaison de nodevices et nosetuid |
quota | - | Activation des quotas |
rq | - | Combinaison des options rw et quota |
Ces options peuvent être aussi introduites sur la ligne de commande lors d'un montage manuel grâce à l'option -o de la commande mount.
Les options d'un filesystem monté peuvent être consultées grâce à la commande mount :
# mount | grep /export/home /export/home on /dev/dsk/c0t0d0s7 read/write/setuid/devices/rstchown/intr/largefiles/logging/xattr/onerror=panic/dev=840007 on Sat Nov 30 07:17:12 2019
<note> A l'aide du manuel et de l'internet, expliquez l'utilisation de intr, xattr et onerror=panic </note>
Le Filesystem UFS
UFS (Unix FileSystem) est un filesystem de type Berkeley auquel ont été ajoutés des fonctions de journalisation appelées UFS logging. L'UFS logging crée un journal dans les blocs libres du filesystem. La taille est de 1Mo par Go de données avec un maximum de 64Mo.
Structure
Chaque système UFS contient des groupe de cylindres. Chaque group de cylindres contient un :
- boot block
- superbloc
- inode
- bloc d'indirection
- bloc de données
boot block
Ce bloc est utilisé quand le filesystem sert au démarrage. Il n'apparait donc que dans le premier groupe de cylindres et a une taille de 8Ko.
Superbloc
Le superbloc contient :
- la taille des blocs
- la taille du système de fichiers
- le nombre de montages effectués pour ce système de fichiers
- un pointeur vers la racine du système de fichiers
- les pointeurs vers la liste des inodes libres
- les pointeurs vers la liste des blocs de données libres
Le Superbloc est dupliqué sur le système de fichiers.
Inodes
En tapant la commande ls -ld vous obtenez une liste d'objets présents dans le répertoire courant.
Le premier caractère de chaque ligne peut être un des suivants :
- - - un fichier
- d - un répertoire
- l - un lien symbolique
- b - un périphérique du type bloc
- c - un périphérique du type caractère
- p - un tube nommé pour la communication entre processus
- s - un socket dans un contexte réseau
Par exemple :
# ls -l /dev/*dsk/c0t0d0s0 lrwxrwxrwx 1 root root 47 Nov 29 13:41 /dev/dsk/c0t0d0s0 -> ../../devices/pci@0,0/pci8086,2829@d/disk@0,0:a lrwxrwxrwx 1 root root 51 Nov 29 13:41 /dev/rdsk/c0t0d0s0 -> ../../devices/pci@0,0/pci8086,2829@d/disk@0,0:a,raw # ls -l /devices/pci@0,0/pci8086,2829@d/disk@0,0:a* brw-r----- 1 root sys 33, 0 Nov 30 06:44 /devices/pci@0,0/pci8086,2829@d/disk@0,0:a crw-r----- 1 root sys 33, 0 Nov 30 07:20 /devices/pci@0,0/pci8086,2829@d/disk@0,0:a,raw
Chaque fichier est représenté par un inode. L'inode, d'une taille de 128 octets contient :
- le type de fichier, soit -, d, l, b, c, p, s
- les droits d'accès, par exemple rwx rw- r–
- le nombre de liens physiques soit le nombre de noms
- l'UID du créateur ou l'UID affecté par la commande chown s'il y a eu une modification
- le GID du processus créateur ou le GID affecté par la commande chgrp
- la taille du fichier en octets
- la date de création, soit le ctime
- la date de dernière modification, soit le mtime
- la date du dernier accès, soit le atime
- les adresses qui pointent vers les blocs de données du fichier
Graphiquement, on peut schématiser cette organisation de la façon suivante :
Pour visualiser le numéro d'inode, utilisez l'option -i :
# ls -ldi /dev/*dsk/c0t0d0s0 311303 lrwxrwxrwx 1 root root 47 Nov 29 13:41 /dev/dsk/c0t0d0s0 -> ../../devices/pci@0,0/pci8086,2829@d/disk@0,0:a 311348 lrwxrwxrwx 1 root root 51 Nov 29 13:41 /dev/rdsk/c0t0d0s0 -> ../../devices/pci@0,0/pci8086,2829@d/disk@0,0:a,raw # ls -ldi /devices/pci@0,0/pci8086,2829@d/disk@0,0:a* 17301507 brw-r----- 1 root sys 33, 0 Nov 30 06:44 /devices/pci@0,0/pci8086,2829@d/disk@0,0:a 17301508 crw-r----- 1 root sys 33, 0 Nov 30 07:20 /devices/pci@0,0/pci8086,2829@d/disk@0,0:a,raw # ls -ldi /etc /etc/passwd 824 drwxr-xr-x 86 root sys 4608 Nov 30 06:44 /etc 1301 -rw-r--r-- 1 root sys 710 Jan 11 2013 /etc/passwd
Blocs d'Indirection
L'inode contient les adresses des blocs de données du fichier. Par un système de blocs d'indirection, la taille maximale d'un fichier peut être de 1 téraoctet et la taille maximale du filesystem de 16 téraoctets.
Blocs de données
Les données sont stockées dans des blocs de données. Dans le cas d'un répertoire, le bloc de données contient une table qui référence les inodes et les noms des fichiers dans le répertoire.
Le nom d'un fichier est stocké dans le bloc de données et non pas dans l'inode. Cette particularité nous permet de donnéer deux noms différents au même fichier. Pour ajouter un nouveau nom à un fichier, il convient de créer un lien physique.
Liens Physiques
Un lien physique se crée en utilisant la commande suivante :
- ln nom_du_fichier nom_supplémentaire
Pour illustrer ce point, tapez la ligne de commande suivante :
# cd /tmp; mkdir inode; cd inode; touch fichier1; ls -ali total 16 4038066373 drwxr-xr-x 2 root root 182 Nov 30 07:23 . 4031513256 drwxrwxrwt 7 root sys 524 Nov 30 07:23 .. 4041221744 -rw-r--r-- 1 root root 0 Nov 30 07:23 fichier1
Notez bien le numéro de l'inode du fichier fichier1. Notez aussi que le numéro dans le troisième champs de la ligne de fichier1 a la valeur 1 :
4041221744 -rw-r–r– 1 root root 0 Nov 30 07:23 fichier1
Créez maintenant un lien physique et visualisez le résultat :
# ln fichier1 fichier2; ls -lai total 16 4038066373 drwxr-xr-x 2 root root 247 Nov 30 07:25 . 4031513256 drwxrwxrwt 7 root sys 524 Nov 30 07:23 .. 4041221744 -rw-r--r-- 2 root root 0 Nov 30 07:23 fichier1 4041221744 -rw-r--r-- 2 root root 0 Nov 30 07:23 fichier2
Notez les deux lignes suivantes :
4041221744 -rw-r–r– 2 root root 0 Nov 30 07:23 fichier1
4041221744 -rw-r–r– 2 root root 0 Nov 30 07:23 fichier2
Les deux fichiers, fichier1 et fichier2, sont référencés par le même inode. Le nombre de liens est donc augmenté de 1.
Liens Symboliques
Un lien symbolique est un raccourci vers un autre fichier ou répertoire. Un lien symbolique se crée en utilisant la commande suivante :
- ln -s nom_du_fichier nom_raccourci
Pour illustrer ce point, tapez les commandes suivantes :
# ln -s fichier1 fichier3; ls -lai total 24 4038066373 drwxr-xr-x 2 root root 312 Nov 30 07:27 . 4031513256 drwxrwxrwt 7 root sys 524 Nov 30 07:23 .. 4041221744 -rw-r--r-- 2 root root 0 Nov 30 07:23 fichier1 4041221744 -rw-r--r-- 2 root root 0 Nov 30 07:23 fichier2 4041221688 lrwxrwxrwx 1 root root 8 Nov 30 07:27 fichier3 -> fichier1
Notez que le lien symbolique est référencé par un autre inode. Le lien symbolique pointe vers le fichier1.
Création
La création d'un système de fichiers UFS se fait grâce à la commande newfs. Un exemple d'une telle commande est :
newfs -v -b 4096 -m 10 /dev/rdsk/c0t0d1s0
Dans cette commande on stipule :
- -v
- le mode verbose
- -b 4096
- une taille des blocs de 4096 octets
- -m 10
- 10% d'espace disque réservé à root
La commande newfs est une commande de confort qui invoque la commande mkfs.
Par contre pour connaître les options d'une partition, il convient d'utiliser la commande mkfs avec l'option -m :
# mkfs -m /dev/dsk/c0t0d0s7 mkfs -F ufs -o nsect=128,ntrack=48,bsize=8192,fragsize=1024,cgsize=16,free=1,rps=7,nbpi=8155,opt=t,apc=0,gap=0,nrpos=8,maxcontig=128,mtb=n /dev/dsk/c0t0d0s7 15133230
Il est aussi possible lors de la création de spécifier trois autres options :
nbpi
L'option npbi (number of bytes per inode) correspond au nombre maximum de fichiers que peut contenir le filesystem. Les valeurs par défaut sont :
Taile du filesystem | Valeur de nbpi |
---|---|
< 1Go | 2048 |
< 2Go | 4096 |
< 3Go | 6144 |
< 1To | 8192 |
> 1To | 1048576 |
free
Cette option stipule le pourcentage du disque réservé à root.
opt
Cette option désigne la politique de'optimisation :
- time - optimisation des performances (option par défaut),
- space - optimisation par espace disque.
Seules les options opt et free peuvent être modifiées après la création du filesystem.
Vérification
Un indicateur stocké dans le superblock permet de connaître l'état du filesystem. Cet indicateur peut prendre plusieurs valeurs :
Valeur | Description |
---|---|
FSACTIVE | Le filesystem est monté sans l'option logging et est actif |
FSCLEAN | Le filesystem a été démonté correctement |
FSSTABLE | Le filesystem est monté sans l'option logging mais est inactif |
FSLOG | Le filesystem utilise l'option logging. Il n'est pas précisé si il est monté ou démonté |
FSBAD | Le filesystem contient des données incohérentes |
Au démarrage du système fsck n'est lancé que si l'indicateur est FSBAD
La commande fsck peut être lancé manuellement. Il est nécessaire de démonter le filesystem avant son utilisation et de vérifier celui-ci avec fsck et l'option -m. La commande fsck attend un argument qui est un nom de partition en mode raw bloc :
# umount /export/home # fsck -m /dev/rdsk/c0t0d0s7 ** /dev/rdsk/c0t0d0s7 ufs fsck: sanity check: /dev/rdsk/c0t0d0s7 okay
Saisissez maintenant la commande suivante :
# fsck /dev/rdsk/c0t0d0s7 ** /dev/rdsk/c0t0d0s7 ** Last Mounted on /export/home ** Phase 1 - Check Blocks and Sizes ** Phase 2 - Check Pathnames ** Phase 3a - Check Connectivity ** Phase 3b - Verify Shadows/ACLs ** Phase 4 - Check Reference Counts ** Phase 5 - Check Cylinder Groups 2 files, 9 used, 7444611 free (19 frags, 930574 blocks, 0.0% fragmentation)
La dernière ligne indique :
Mot clé | Description |
---|---|
files | Le nombre d'inodes utilisés |
used | Le nombre de fragments utilisés |
free | Le nombre de fragments inutilisés |
frags | Le nombre de fragments inutilisés dans des blocs utilisés |
blocs | Le nombre de blocs complets inutilisés |
Si des erreurs sont trouvées, la commande devient interactive.
Il est possible donc de lancer la commande fsck avec une option -y ou -n pour contourner l'interactivité éventuelle.
Paramétrages
Nous avons vu que l'option free sur /dev/dsk/c0t0d0s7 a une valeur de 1 :
# mkfs -m /dev/dsk/c0t0d0s7 mkfs -F ufs -o nsect=128,ntrack=48,bsize=8192,fragsize=1024,cgsize=16,free=1,rps=7,nbpi=8155,opt=t,apc=0,gap=0,nrpos=8,maxcontig=128,mtb=n /dev/dsk/c0t0d0s7 15133230
Afin de modifier cette valeur, nous disposons de la commande tunefs. L'utilisation de cette commande est limitée aux filesystems démontés.
Saisissez la commande suivante :
# tunefs -m 5 /dev/dsk/c0t0d0s7 minimum percentage of free space changes from 1% to 5%
Vérifiez son application :
# mkfs -m /dev/dsk/c0t0d0s7 mkfs -F ufs -o nsect=128,ntrack=48,bsize=8192,fragsize=1024,cgsize=16,free=5,rps=7,nbpi=8155,opt=t,apc=0,gap=0,nrpos=8,maxcontig=128,mtb=n /dev/dsk/c0t0d0s7 15133230
Concepts RAID
Les solutions RAID ou Redundant Array of Independent Disks ou encore Redundant Array of Inexpensive Disks permettent la combinaison de plusieurs disques de façon à ce que ceux-ci soient vu comme un seul disque logique.
Les solutions RAID sont issues du travail fourni par l'université de Berkeley en Californie sur un projet de tolérances de pannes. Les systèmes RAID offre maintenant plusieurs avantages :
- Addition des capacités,
- Amélioration des performances,
- Apporter la tolérance de panne.
Deux concepts sont fondamentaux à la compréhension des solutions RAID.
Disques en miroir
La technique des disques en miroir consiste à dupliquer l'écriture des données sur plusieurs disques. Le miroir peut être géré par un logiciel ou par du matériel.
Bandes de données
La technique des bandes de données, autrement appelée data striping consiste à couper les données à enregistrer en segments séquentiels et contigus pour les enregistrer sur plusieurs disques physiques. L'ensemble des segments constitue alors un disque logique ou striped disk. Cette technique peut être améliorée en déposant une bande de parité, calculée à partir des données des autres bandes, afin de pouvoir reconstituer une bande de données défaillante.
Types de RAID
RAID 0 - Concaténation
Création de volume par récupération de l'espace libre sur un ou plusieurs disques. Le principe de la concaténation est la création d'un volume à bandes où chaque bande est une tranche. Il est similaire au LVM sous Linux et HP-UX.
Avantages
- Récupération de l'espace disque.
Inconvénients
- Pas de protection des données,
- Pas d'augmentation des performances d'E/S.
RAID 0 - Striping
Création de volume sur plusieurs disques afin d'augmenter les performances d'E/S. Le principe du striping est la création d'un volume à bandes réparties sur plusieurs tranche. La taille de la bande doit être fonction des données à écrire sur le volume (16k, 32k, 64k, etc.) Cette taille est choisie à la création du volume.
Avantages
- Augmentation des performances d'E/S par écriture en parallèle sur les disques.
Inconvénients
- Pas de protection des données.
RAID 1 - Miroir
Création d'un volume où les disques sont en miroir. Quand les deux disques sont connectés à des contrôleurs de disques différents, on parle de duplexing :
Avantages
- Protection des données contre une défaillance d'un disque.
Inconvénients
- Coûteux à cause de l'augmentation du nombre de disques.
RAID 1+0 - Striping en Miroir
Le RAID 1+0 ou encore 0+1 est une technique qui réunit le RAID 0 et le RAID 1. On l'appelle aussi un RAID exotique:
Avantages
- Protection des données contre une défaillance d'un disque.
- Augmentation des performances d'E/S par écriture en parallèle sur les disques.
Inconvénients
- Coûteux à cause de l'augmentation du nombre de disques.
RAID 2 - Miroir avec Contrôle d'Erreurs
Le RAID 2 est une technique de miroir avec contrôle de correction d'erreurs (EEC). De nos jours cette technique est peu utilisée, ayant été remplacée par les RAID 3, 4 et 5.
RAID 3 et 4 - Striping avec Parité
Les RAID 3 et 4 sont des technologies avec bandes de parité distribuées sur un seul disque :
En RAID 3, la taille des segments n’est pas modifiable et est fixée à 512 octets (en RAID 3 : un segment = un secteur de disque dur = 512 octets).
En RAID 4, la taille des segments est variable et se modifie en temps réel. Cela implique que les informations de parité doivent être mise à jour à chaque écriture afin de vérifier si la taille des segments a été modifiée.
Avantages
- Protection des données contre une défaillance d'un disque.
Inconvénients
- Création d'un goulot d'étranglement des données à cause de l'écriture des données de parité sur un seul disque.
RAID 5 - Striping avec Parité Distribuée
Avantages
- Protection des données contre une défaillance d'un disque,
- Evite le goulot d'étranglement d'un seul disque de parité.
Inconvénients
- Lecture moins performante qu'avec RAID 3 et 4.
Au délà de RAID 5
Il existe aussi deux autres technologies RAID, toute deux issues de la technologie RAID 5 :
- RAID 6
- Disk Striping with Double Distributed Parity
- RAID TP
- Disk Striping with Triple Distributed Parity
Solaris Volume Manager
Introduction
Le Solaris Volume Manager est un service évolué de la gestion de l'espace disque. Il a été introduit avec Solaris 9.
Le Solaris Volume Manager implémente les niveaux :
- RAID 0 - Concaténation
- RAID 0 - Striping
- RAID 1 - Mirroring
- RAID 5 - Striping avec parité distribuée
Sur un système SPARC, il existe 8 tranches tandis que sur un système x64/x86 il en existe 16. Sur un système x64/x86, la 8ième tranche est utilisée pour contenir le code pour le boot tandis que le 9ième est utilisée pour des secteurs alternatives sur certains systèmes. La commande format ne permet pas de manipuler plus de 8 tranches. Pour les systèmes x64/x86, il existe un logiciel sous licence GPL appelé dskpart qui permet de manipuler les 16 tranches. Le README se trouve à cette adresse.
Terminologie
Volumes
L'entité de base du Solaris Volume Manager est un volume. Un volume est composé d'un ensemble de tranches et apparait comme un disque logique via un pseudo-device autrement appelé un meta-device.
Noms des Volumes
Les noms des volumes sont générés dans les répertoires /dev/md/dsk et /dev/md/rdsk. Chaque volume possède un nom unique allant de d0 jusqu'à d127. Il n'y a pas de standardisation au niveau des noms. Par conséquent un RAID 5 peut avoir le nom d5, d0 ou d127 par exemple.
State Database
Les informations concernant la configuration courante du Solaris Volume Manager sont stockées dans la State Database. Il est nécessaire de copier cette base de données en plusieurs exemplaires, appelés des replicas ou répliques. Chaque réplique a une taille de 4 Mo par défaut (8192 blocks).
La création des copies de la State Database est la première opération à effectuer sur un serveur. Il est conseillé que les répliques résident dans des tranches dédiées à cet effet. Par convention on utilise la partition S7 des disques pour stocker les répliques.
La State Database joue un rôle très important sous Solaris Volume Manager. Quand intervient une désynchronisation entre des sous-miroirs, le système doit savoir où se trouvent les données valides.
Dans ce cas il va avoir une élection à majorité absolue entre les copies de la State Database. Pour cette raison il est nécessaire de créer au moins trois copie de cette dernière.
Qui plus est au moins la moitié des répliques doit être accessible lorsque le système est en cours de fonctionnement. Dans le cas contraire le système crash.
Au moins la moitié des répliques + 1 doit être accessible pour qu'un système puisse démarrer.
Dans le cas d'un système à 2 disques, si un disque tombe en panne, la règle des 50% +1 ne pourra jamais être respectée et le système crash en boucle.
Il est cependant possible de démarrer un système sans obtenir la majorité absolue. Pour cela on positionne le paramètre md:mirrored_root_flag=1 dans le fichier /etc/system :
echo "set md:mirrored_root_flag=1" >>/etc/system
Les répliques sont utilisées également comme zone de synchronisation des volume-miroirs (RAID 1). Un nombre insuffisant de répliques provoquerait une baisse significative des performances d'entrée/sortie pour les volumes en miroir. En général, on préconise la création d'au moins 2 répliques par volume RAID 1 jusqu'à une limite de 50 répliques par disque.
Partitions logicielles
Les Partitions logicielles ou soft partitions en anglais permettent de diviser des devices en plusieurs parties. Cette division permet de créer une multitude de systèmes de fichiers sur un device. Il est possible de créer ces partitions logicielles, soit à partir d'un volume, soit directement à partir d'une partition.
Réserve de Tranches Dynamiques
Une Réserve de Tranches Dynamiques ou hot spare pool en anglais est un ensemble de tranches disponibles en remplacement en cas d'une défaillance d'un disque composant un miroir ou un RAID-5. Lorsqu'une défaillance d'un disque survient, SVM va utiliser une partition de la Réserve de Tranches Dynamiques afin de remplacer ce disque. Il est nécessaire bien entendu que les tranches stockées dans la Réserve de Tranches Dynamiques soient d'une taille égale ou supérieure à la tranche à remplacer. Il est impératif d'ajouter les tranches par ordre de taille de la plus petite à la plus grande. En effet lorsque SVM recherche une partition de remplacement, celui-ci lit la liste des tranches dans l'ordre dans lequel celles-ci ont été ajoutées dans la réserve.
Fichiers Importants
- /etc/lvm/mddb.cf
- contient l'emplacement de la metadb et de ses répliques,
- /kernel/drv/md.conf
- reflète les informations du fichier mddb.cf. Il est nécessaire au fonctionnement du driver md.
Gestion des meta devices
LAB#1 - Préparation du disque
Préparez votre disque de la façon suivante :
- tranche 3 de 20Mo minimum
- tranche 4 d'une taille deux fois celle du tranche 5
- tranche 5 et tranche 6 d'une taille égale.
Vous devez obtenir une table des partitions similaire à celle-ci :
partition> pri Volume: My Disk Current partition table (original): Total disk cylinders available: 2607 + 2 (reserved cylinders) Part Tag Flag Cylinders Size Blocks 0 root wm 68 - 1189 8.59GB (1122/0/0) 18024930 1 swap wu 1 - 67 525.56MB (67/0/0) 1076355 2 backup wm 0 - 2606 19.97GB (2607/0/0) 41881455 3 unassigned wm 1190 - 1192 23.53MB (3/0/0) 48195 4 unassigned wm 1193 - 1454 2.01GB (262/0/0) 4209030 5 unassigned wm 1455 - 1637 1.40GB (183/0/0) 2955960 6 unassigned wm 1639 - 1821 1.40GB (183/0/0) 2939895 7 home wm 1822 - 2606 6.01GB (785/0/0) 12611025 8 boot wu 0 - 0 7.84MB (1/0/0) 16065 9 unassigned wm 0 0 (0/0/0) 0
Voici quelques indications pour vous faciliter la tâche ci-dessus :
- Créez un répertoire /backup à la racine de votre système de fichiers,
- Créez un tar du contenu de /export/home et placez-le dans /backup,
- Démontez /export/home,
- Commentez la ligne /export/home dans le fichier /etc/vfstab,
- Lancez la commande format et choisissez le menu partitions,
- Diminuez la taille de la tranche 7 de façon à récupérer 4 Go d'espace disque,
- Créez la tranche 3 de 20mo,
- Créez la tranche 4 de 2Go,
- Créez les tranches 5 et 6 d'une taille égale, la somme étant équivalente à l'espace disque restant,
- Nommez la nouvelle table de partitions “My Table” en utilisant les menus partition > name,
- Montez au menu supérieur en utilisant la commande quit,
- Nommez le volume “My Disk” avec le menu volname,
- Sauvez votre table dans l'emplacement par défaut en utilisant la commande save,
- Quittez la commande format avec quit,
- Créez un nouveau FileSystem sur S7 avec la commande newfs /dev/dsk/c0t0d0s7,
- Éditez le fichier /etc/vfstab en supprimant le caractère # devant la ligne /export/home,
- Montez /export/home avec la commande mount /export/home,
- Restaurez le contenu du fichier tar dans /backup vers /export/home.
Vérifiez ensuite qu'il n'existe pas de State Database :
# metadb -i metadb: unknown: aucune base de données existante
Créez maintenant la State Database ainsi que 2 répliques dans votre tranche 3 :
# metadb -f -a -c 3 c0t0d0s3 # metadb flags first blk block count a u 16 8192 /dev/dsk/c0t0d0s3 a u 8208 8192 /dev/dsk/c0t0d0s3 a u 16400 8192 /dev/dsk/c0t0d0s3
Les options de la commande sont :
- -a : Permet d'ajouter une réplique.
- -f : Permet de forcer un état de la metadb. Cette option est à utiliser lors de la création de la première réplique ou lors de la suppression de la dernière.
- -c < n > : Permet de spécifier le nombre de répliques à ajouter sur une partition. Cette option permet de placer plusieurs répliques sur une seule partition.
Constatez le contenu du fichier /etc/lvm/mddb.cf :
# cat /etc/lvm/mddb.cf #metadevice database location file do not hand edit #driver minor_t daddr_t device id checksum sd 3 16 id1,sd@SATA_____VBOX_HARDDISK____VB11d23ca4-8967fc4b/d -4385 sd 3 8208 id1,sd@SATA_____VBOX_HARDDISK____VB11d23ca4-8967fc4b/d -12577 sd 3 16400 id1,sd@SATA_____VBOX_HARDDISK____VB11d23ca4-8967fc4b/d -20769
ainsi que le fichier /kernel/drv/md.conf :
# cat /kernel/drv/md.conf # #pragma ident "@(#)md.conf 2.2 04/04/02 SMI" # # Copyright 2004 Sun Microsystems, Inc. All rights reserved. # Use is subject to license terms. # # The parameters nmd and md_nsets are obsolete. The values for these # parameters no longer have any meaning. name="md" parent="pseudo" nmd=128 md_nsets=4; # Begin MDD database info (do not edit) mddb_bootlist1="sd:3:16:id1,sd@SATA_____VBOX_HARDDISK____VB11d23ca4-8967fc4b/d sd:3:8208:id1,sd@SATA_____VBOX_HARDDISK____VB11d23ca4-8967fc4b/d sd:3:16400:id1,sd@SATA_____VBOX_HARDDISK____VB11d23ca4-8967fc4b/d"; # End MDD database info (do not edit)
Constatez maintenant la création de la metadb :
# metadb -i flags first blk block count a u 16 8192 /dev/dsk/c0t0d0s3 a u 8208 8192 /dev/dsk/c0t0d0s3 a u 16400 8192 /dev/dsk/c0t0d0s3 r - la réplique ne contient pas d'informations de transfert de périphérique o - réplique active avant la dernière modification de la configuration de la base de données du métapériphérique mddb u - la réplique est mise à jour l - le localisateur pour cette réplique a été lu avec succès c - la réplique se trouvait dans /etc/lvm/mddb.cf p - un patch a été appliqué à la réplique dans le noyau m - la réplique est maître : elle est sélectionnée comme réplique d'entrée W - la réplique contient des erreurs d'écriture de périphérique a - la réplique est active, des validations ont lieu dans cette réplique M - la réplique a rencontré des problèmes avec les blocs maîtres D - la réplique a rencontré des problèmes avec les blocs de données F - la réplique a rencontré des problèmes liés au format S - la réplique est trop petite pour contenir la base de données actuelle R - la réplique contenait des erreurs de lecture de périphérique
Créez ensuite un filesystem UFS sur le tranche 5 :
# newfs -v -b 4096 -m 10 /dev/rdsk/c0t0d0s5 newfs: construction d'un nouveau système de fichiers /dev/rdsk/c0t0d0s5 : (y/n)? y pfexec mkfs -F ufs /dev/rdsk/c0t0d0s5 2955960 63 -1 4096 1024 32 10 3 4096 t 0 -1 8 256 n Avertissement : 5448 secteur(s) du dernier cylindre n'ont pas été alloués /dev/rdsk/c0t0d0s5: 2955960 secteurs dans 482 cylindres de 48 pistes, 128 secteurs 1443,3 Mo dans 69 groupes de cylindres (7 c/g, 21,00 Mo/g, 5056 i/g) sauvegardes de super-blocs (pour fsck -F ufs -o b=#) at: 32, 43168, 86304, 129440, 172576, 215712, 258848, 301984, 345120, 388256, 2545056, 2588192, 2631328, 2674464, 2717600, 2752544, 2795680, 2838816, 2881952, 2925088
Montez votre tranche 5 à la racine de votre système de fichiers et créez un fichier appelé SVM test conteant la chaîne svm_test :
# mkdir /slice5 # mount /dev/dsk/c0t0d0s5 /slice5 # cd /slice5 # ls lost+found # echo "SVM test" > svm_test
LAB#2 - RAID 0 - Concaténation
Le Solaris Volume Manager peut être utilisé pour concaténer des tranches afin de créer un volume contigu. Afin d'y parvenir, il convient d'utiliser la commande metainit en passant en argument à la commande au moins une tranche démontée. Dans notre cas, vous allez concaténer les tranches 5 et 6 de votre disque. Saisissez donc les commandes suivantes :
# cd .. # umount /slice5 # metainit d0 2 1 c0t0d0s5 1 c0t0d0s6 d0: Concaténation/Bande configurée
Dans ce cas, vous avez créer un volume d0 de deux tranches qui se suivent physiquement. Le chiffre 2 indique le nombre de bandes tandis que les chiffres 1 indiquent le nombre de tranches par bande. Dans le cas d'un volume concaténé il devrait y avoir autant de bandes que de tranches. Constatez ensuite la création du volume en utilisant la commande metastat :
# metastat -p d0 2 1 c0t0d0s5 \ 1 c0t0d0s6 # metastat d0 d0: Concat/Stripe Taille : 5895855 blocs (2,8 GB) Bande 0 : Périphérique Bloc de débu Base Redistribution c0t0d0s5 0 Non Oui Bande 1 : Périphérique Bloc de débu Base Redistribution c0t0d0s6 0 Non Oui Device Relocation Information: Device Reloc Device ID c0t0d0 Oui id1,sd@SATA_____VBOX_HARDDISK____VB11d23ca4-8967fc4b
Montez ensuite le volume d0 et constatez l'espace disque libre :
# mount /dev/md/dsk/d0 /slice5 # df -h Système de fichiers taille utilisé dispo capacité Monté sur /dev/dsk/c0t0d0s0 8,5G 4,1G 4,3G 49% / /devices 0K 0K 0K 0% /devices ctfs 0K 0K 0K 0% /system/contract proc 0K 0K 0K 0% /proc mnttab 0K 0K 0K 0% /etc/mnttab swap 1,5G 1016K 1,5G 1% /etc/svc/volatile objfs 0K 0K 0K 0% /system/object sharefs 0K 0K 0K 0% /etc/dfs/sharetab /usr/lib/libc/libc_hwcap1.so.1 8,5G 4,1G 4,3G 49% /lib/libc.so.1 fd 0K 0K 0K 0% /dev/fd swap 1,5G 112K 1,5G 1% /tmp swap 1,5G 36K 1,5G 1% /var/run mypool 341M 37K 340M 1% /mypool /dev/dsk/c0t0d0s7 5,9G 6,0M 5,9G 1% /export/home /dev/md/dsk/d0 1,4G 1,4M 1,2G 1% /slice5
Vous noterez que le volume monté ne reflète pas l'addition des deux tranches en termes de taille. En effet, pour l'instant le file system précédemment présent sur c0t0d0s5 n'occupe pas tout le volume d0. Afin d'étendre le file system à la taille maximale du volume, il convient d'utiliser la commande growfs :
# growfs -M /slice5 /dev/md/rdsk/d0 Avertissement : 2386 secteur(s) du dernier cylindre n'ont pas été alloués /dev/md/rdsk/d0: 5895854 secteurs dans 960 cylindres de 48 pistes, 128 secteurs 2878,8 Mo dans 138 groupes de cylindres (7 c/g, 21,00 Mo/g, 5056 i/g) sauvegardes de super-blocs (pour fsck -F ufs -o b=#) at: 32, 43168, 86304, 129440, 172576, 215712, 258848, 301984, 345120, 388256, 5505056, 5548192, 5591328, 5634464, 5677600, 5720736, 5763872, 5807008, 5850144, 5893280
Constatez ensuite la réussite de la commande :
# df -h Système de fichiers taille utilisé dispo capacité Monté sur /dev/dsk/c0t0d0s0 8,5G 4,1G 4,3G 49% / /devices 0K 0K 0K 0% /devices ctfs 0K 0K 0K 0% /system/contract proc 0K 0K 0K 0% /proc mnttab 0K 0K 0K 0% /etc/mnttab swap 1,5G 1016K 1,5G 1% /etc/svc/volatile objfs 0K 0K 0K 0% /system/object sharefs 0K 0K 0K 0% /etc/dfs/sharetab /usr/lib/libc/libc_hwcap1.so.1 8,5G 4,1G 4,3G 49% /lib/libc.so.1 fd 0K 0K 0K 0% /dev/fd swap 1,5G 112K 1,5G 1% /tmp swap 1,5G 36K 1,5G 1% /var/run mypool 341M 37K 340M 1% /mypool /dev/dsk/c0t0d0s7 5,9G 6,0M 5,9G 1% /export/home /dev/md/dsk/d0 2,7G 2,8M 2,6G 1% /slice5
Naviguez ensuite au point de montage de votre volume et constatez la présence du fichier précédemment créé :
# cd /slice5 # ls lost+found svm_test # cat svm_test SVM test
Créez ensuite un deuxième fichier de contrôle :
# echo "svm_test_2" > svm_test_2 # ls lost+found svm_test svm_test_2
Constatez l'état du volume avec la commande metastat :
# metastat d0: Concat/Stripe Taille : 5895855 blocs (2,8 GB) Bande 0 : Périphérique Bloc de débu Base Redistribution c0t0d0s5 0 Non Oui Bande 1 : Périphérique Bloc de débu Base Redistribution c0t0d0s6 0 Non Oui Device Relocation Information: Device Reloc Device ID c0t0d0 Oui id1,sd@SATA_____VBOX_HARDDISK____VB11d23ca4-8967fc4b
Afin de rajouter une tranche à un volume existant, il convient d'utiliser la commande metattach. Ajoutez donc la tranche c0t0d0s4 au volume d0 :
# metattach d0 c0t0d0s4 d0: composant connecté
Augmentez ensuite la taille du filesystem :
# growfs -M /slice5 /dev/md/rdsk/d0 Avertissement : 1996 secteur(s) du dernier cylindre n'ont pas été alloués /dev/md/rdsk/d0: 10104884 secteurs dans 1645 cylindres de 48 pistes, 128 secteurs 4934,0 Mo dans 235 groupes de cylindres (7 c/g, 21,00 Mo/g, 5056 i/g) sauvegardes de super-blocs (pour fsck -F ufs -o b=#) at: 32, 43168, 86304, 129440, 172576, 215712, 258848, 301984, 345120, 388256, 9681056, 9724192, 9767328, 9810464, 9853600, 9896736, 9939872, 9983008, 10026144, 10069280
Constatez la taille du volume :
# df -h Système de fichiers taille utilisé dispo capacité Monté sur /dev/dsk/c0t0d0s0 8,5G 4,1G 4,3G 49% / /devices 0K 0K 0K 0% /devices ctfs 0K 0K 0K 0% /system/contract proc 0K 0K 0K 0% /proc mnttab 0K 0K 0K 0% /etc/mnttab swap 1,5G 1016K 1,5G 1% /etc/svc/volatile objfs 0K 0K 0K 0% /system/object sharefs 0K 0K 0K 0% /etc/dfs/sharetab /usr/lib/libc/libc_hwcap1.so.1 8,5G 4,1G 4,3G 49% /lib/libc.so.1 fd 0K 0K 0K 0% /dev/fd swap 1,5G 112K 1,5G 1% /tmp swap 1,5G 36K 1,5G 1% /var/run mypool 341M 37K 340M 1% /mypool /dev/dsk/c0t0d0s7 5,9G 6,0M 5,9G 1% /export/home /dev/md/dsk/d0 4,7G 4,8M 4,5G 1% /slice5
Constatez ensuite la présence de vos fichiers :
# pwd /slice5 # ls lost+found svm_test svm_test_2 # cat svm_test_2 svm_test_2
Démontez ensuite votre volume et supprimez-le grâce à la commande metaclear :
# cd .. # umount /slice5 # metaclear d0 d0: Concaténation/Bande supprimée#
Montez ensuite la tranche c0t0d0s5 sur slice5 et constatez la présence de vos fichiers :
# mount /dev/dsk/c0t0d0s5 /slice5 # cd /slice5 # ls lost+found svm_test svm_test_2
Notez que les fichiers et leurs contenus sont intacts.
Dans l'exemple précédent, vous avez créé un volume de tranches qui se suivent physiquement. Cette fois-ci, il convient de récupérer deux tranches orphelines sur votre disque. Créez donc un volume contenant les tranches 4 et 6 de votre disque :
# cd .. # umount /slice5 # metainit d0 2 1 c0t0d0s4 1 c0t0d0s6 d0: Concaténation/Bande configurée # newfs -v -b 4096 -m 10 /dev/md/rdsk/d0 newfs: construction d'un nouveau système de fichiers /dev/md/rdsk/d0 : (y/n)? y pfexec mkfs -F ufs /dev/md/rdsk/d0 7148925 63 240 4096 1024 96 10 3 8192 t 0 -1 8 14 n Avertissement : 2836 secteur(s) du dernier cylindre n'ont pas été alloués /dev/md/rdsk/d0: 7148924 secteurs dans 473 cylindres de 240 pistes, 63 secteurs 3490,7 Mo dans 158 groupes de cylindres (3 c/g, 22,15 Mo/g, 2688 i/g) sauvegardes de super-blocs (pour fsck -F ufs -o b=#) at: 32, 45456, 90880, 136304, 181728, 227152, 272576, 318000, 363424, 408848, 6722784, 6768208, 6813632, 6859056, 6904480, 6949904, 6995328, 7040752, 7086176, 7131600
Montez ce volume :
# mount /dev/md/dsk/d0 /slice5 # df -h Système de fichiers taille utilisé dispo capacité Monté sur /dev/dsk/c0t0d0s0 8,5G 4,1G 4,3G 49% / /devices 0K 0K 0K 0% /devices ctfs 0K 0K 0K 0% /system/contract proc 0K 0K 0K 0% /proc mnttab 0K 0K 0K 0% /etc/mnttab swap 1,5G 1016K 1,5G 1% /etc/svc/volatile objfs 0K 0K 0K 0% /system/object sharefs 0K 0K 0K 0% /etc/dfs/sharetab /usr/lib/libc/libc_hwcap1.so.1 8,5G 4,1G 4,3G 49% /lib/libc.so.1 fd 0K 0K 0K 0% /dev/fd swap 1,5G 112K 1,5G 1% /tmp swap 1,5G 36K 1,5G 1% /var/run mypool 341M 37K 340M 1% /mypool /dev/dsk/c0t0d0s7 5,9G 6,0M 5,9G 1% /export/home /dev/md/dsk/d0 3,4G 3,4M 3,0G 1% /slice5
Vérifiez le contenu de votre volume :
# cd /slice5 # ls lost+found
Vos fichiers de contrôle ne sont pas présents car ils sont stockés sur le file system sur c0t0d0s5 qui ne fait pas partie de ce d0.
Dernièrement, démontez votre volume et détruisez-le avec la commande metaclear :
# cd .. # umount /slice5 # metaclear d0 d0: Concaténation/Bande supprimée#
LAB#3 - RAID 0 - Striping et Partitions Logicielles
Créez maintenant un volume striping avec une taille d'inode de 8k :
# metainit d0 1 2 c0t0d0s5 c0t0d0s6 -i 8k d0: Concaténation/Bande configurée # metastat d0 d0: Concat/Stripe Taille : 5863725 blocs (2,8 GB) Entrelacement 0 : (entrelacer : 16 blocs) Périphérique Bloc de débu Base Redistribution c0t0d0s5 0 Non Oui c0t0d0s6 0 Non Oui Device Relocation Information: Device Reloc Device ID c0t0d0 Oui id1,sd@SATA_____VBOX_HARDDISK____VB11d23ca4-8967fc4b
Le chiffre 1 représente le nombre de bandes. Le chiffre 2 représente le nombre de tranches sur lesquelles la bande sera répartie.
Avec le Solaris Volume manager, il est aussi possible de créer des partitions logicielles à l'intérieur d'un volume. Afin de créer une partition logicielle, il convient d'utiliser la commande metainit en passant en arguments :
- le nom de la partition logicielle
- l'option -p
- le nom de volume dans lequel sera insérée la partition logicielle
- la taille de la partition logicielle.
Créez donc la partition logicielle d5 et constatez sa présence :
# metainit d5 -p d0 512m d5: Partition logicielle configurée # metastat -p d5 d5 -p d0 -o 16 -b 1048576 d0 1 2 c0t0d0s5 c0t0d0s6 -i 16b
Créez ensuite un filesystem sur d5 :
# newfs /dev/md/rdsk/d5 newfs: /dev/md/rdsk/d5 monté en dernier comme /slice5 newfs: construction d'un nouveau système de fichiers /dev/md/rdsk/d5 : (y/n)? y Avertissement : 9824 secteur(s) du dernier cylindre n'ont pas été alloués /dev/md/rdsk/d5: 1048576 secteurs dans 70 cylindres de 240 pistes, 63 secteurs 512,0 Mo dans 14 groupes de cylindres (5 c/g, 36,91 Mo/g, 17536 i/g) sauvegardes de super-blocs (pour fsck -F ufs -o b=#) at: 32, 75696, 151360, 227024, 302688, 378352, 454016, 529680, 605344, 681008, 756672, 832336, 908000, 983664
Montez d5 et constatez sa taille avec la commande df :
# mount /dev/md/dsk/d5 /slice5 # df -h | grep d5 /dev/md/dsk/d5 482M 1,0M 433M 1% /slice5
Constatez ensuite l'état des volumes avec la commande metastat :
# metastat d5: Partition logicielle Périphérique : d0 Etat : Ok Taille : 1048576 blocs (512 MB) Etendu Bloc de début Nombre de blocs 0 16 1048576 d0: Concat/Stripe Taille : 5863725 blocs (2,8 GB) Entrelacement 0 : (entrelacer : 16 blocs) Périphérique Bloc de débu Base Etat Redis Tranche dynamique c0t0d0s5 0 Non Ok Oui c0t0d0s6 0 Non Ok Oui Device Relocation Information: Device Reloc Device ID c0t0d0 Oui id1,sd@SATA_____VBOX_HARDDISK____VB11d23ca4-8967fc4b
Le Solaris Volume Manager peut également être utilisé pour créer une partition logicielle directement sur une tranche. Créez donc la partition logicielle d1 sur la tranche 4 de votre disque et constatez le bon déroulement de la commande :
# metainit d1 -p c0t0d0s4 1g d1: Partition logicielle configurée # metastat -p d1 -p c0t0d0s4 -o 1 -b 2097152 d5 -p d0 -o 16 -b 1048576 d0 1 2 c0t0d0s5 c0t0d0s6 -i 16b
Créez ensuite un file system sur d1 :
# newfs /dev/md/rdsk/d1 newfs: construction d'un nouveau système de fichiers /dev/md/rdsk/d1 : (y/n)? y Avertissement : 4528 secteur(s) du dernier cylindre n'ont pas été alloués /dev/md/rdsk/d1: 2097152 secteurs dans 139 cylindres de 240 pistes, 63 secteurs 1024,0 Mo dans 28 groupes de cylindres (5 c/g, 36,91 Mo/g, 17536 i/g) sauvegardes de super-blocs (pour fsck -F ufs -o b=#) at: 32, 75696, 151360, 227024, 302688, 378352, 454016, 529680, 605344, 681008, 1361984, 1437648, 1513312, 1588976, 1664640, 1740304, 1815968, 1891632, 1967296, 2042960
Montez la partition logicielle en /slice6 et constatez sa taille avec la commande df :
# mkdir /slice6 # mount /dev/md/dsk/d1 /slice6 # df -h /slice6 Système de fichiers taille utilisé dispo capacité Monté sur /dev/md/dsk/d1 964M 1,0M 905M 1% /slice6
Pour augmenter la taille de la partition logicielle, il convient d'utiliser la commande metattach. Augmentez donc la taille de d1 de 512m et constatez le bon déroulement de la commande :
# metattach d1 512m d1: Partition logicielle créée # metastat -p d1 -p c0t0d0s4 -o 1 -b 3145728 d5 -p d0 -o 16 -b 1048576 d0 1 2 c0t0d0s5 c0t0d0s6 -i 16b
Comparez les deux lignes d1 avant et après la commande :
- d1 -p c0t0d0s4 -o 1 -b 2097152
- d1 -p c0t0d0s4 -o 1 -b 3145728
Notez que la taille a été augmentée de 1048576.
Constatez ensuite la taille de d1 :
# df -h /slice6 Système de fichiers taille utilisé dispo capacité Monté sur /dev/md/dsk/d1 964M 1,0M 905M 1% /slice6
Comme dans le cas précédent, le résultat ne reflète pas la taille réelle du volume. Utilisez donc la commande growfs pour aligner la taille du file system/ sur celle du volume :
# growfs -M /slice6 /dev/md/rdsk/d1 Avertissement : 14352 secteur(s) du dernier cylindre n'ont pas été alloués /dev/md/rdsk/d1: 3145728 secteurs dans 209 cylindres de 240 pistes, 63 secteurs 1536,0 Mo dans 42 groupes de cylindres (5 c/g, 36,91 Mo/g, 17536 i/g) sauvegardes de super-blocs (pour fsck -F ufs -o b=#) at: 32, 75696, 151360, 227024, 302688, 378352, 454016, 529680, 605344, 681008, 2421280, 2496944, 2572608, 2648272, 2723936, 2799600, 2875264, 2950928, 3026592, 3102256
Constatez maintenant la taille de d1 :
# df -h /slice6 Système de fichiers taille utilisé dispo capacité Monté sur /dev/md/dsk/d1 1,4G 1,5M 1,4G 1% /slice6
Démontez d1 et supprimez-le :
# umount /slice6 # metaclear -r d1 d1: Partition logicielle supprimée
Constatez ensuite le bon déroulement de la commande :
# metastat d5: Partition logicielle Périphérique : d0 Etat : Ok Taille : 1048576 blocs (512 MB) Etendu Bloc de début Nombre de blocs 0 16 1048576 d0: Concat/Stripe Taille : 5863725 blocs (2,8 GB) Entrelacement 0 : (entrelacer : 16 blocs) Périphérique Bloc de débu Base Etat Redis Tranche dynamique c0t0d0s5 0 Non Ok Oui c0t0d0s6 0 Non Ok Oui Device Relocation Information: Device Reloc Device ID c0t0d0 Oui id1,sd@SATA_____VBOX_HARDDISK____VB11d23ca4-8967fc4b
Démontez d5 et supprimez d0 :
# umount /slice5 # metaclear -r d0 metaclear: unknown: d0: métapériphérique en cours d'utilisation
Comme vous pouvez constater, il est impossible de supprimer d0 puisque celui-ci contient d5. Supprimez donc d'abord d5 et d0 en même temps :
# metaclear -r d5 d5: Partition logicielle supprimée d0: Concaténation/Bande supprimée#
L'option -r de la commande metaclear implique une suppression récursive.
LAB#4 - RAID 1 - Miroir
Dans le cas de la mise en place d'un RAID 1, il est primordial que les deux disques soient identiques :
- la même capacité,
- la même géométrie.
Dans le cas de la mise en place d'un miroir entre deux disques entiers, la première tâche à effectuer est de copier la structure et le contenu du disque 0 vers le disque 1. Pour accomplir cette tache, utilisez une des deux commandes suivantes :
# prtvtoc -h /dev/rdsk/c0t0d0s2 | fmthard -s - /dev/rdsk/c1d0s2
# dd if=/dev/rdsk/c0t0d0s2 of=/dev/rdsk/c1d0s2 count=16
Dans le cas de ce LAB, vous allez simuler la mise en place d'un RAID 1 en utilisant deux tranches identiques. Pour accomplir cette tâche, il convient de créer d'abord les sous-miroirs :
# metainit d2 1 1 c0t0d0s5 d2: Concaténation/Bande configurée # metainit d3 1 1 c0t0d0s6 d3: Concaténation/Bande configurée
Avec SVM on peut utiliser jusqu'à 4 sous-miroirs par volume (4 copies des données).
Ensuite créez le miroir d4 en y attachant les sous-miroirs d2 et d3 :
HERE
# metainit d4 -m d2 d4: Miroir configuré # metattach d4 d3 d4: sous-miroir d3 is attached
Constatez le résultat de vos commandes :
# metastat d4: Miroir Sous-miroir 0: d2 Etat : Ok Sous-miroir 1: d3 Etat : Resynchronisation Accès : 1 Option de lecture : roundrobin (par défaut) Option d'écriture : parallel (par défaut) Taille : 2939895 blocs (1,4 GB) d2: Sous-miroir de d4 Etat : Ok Taille : 2939895 blocs (1,4 GB) Bande 0 : Périphérique Bloc de débu Base Etat Redis Tranche dynamique c0t0d0s5 0 Non Ok Oui d3: Sous-miroir de d4 Etat : Resynchronisation Taille : 2939895 blocs (1,4 GB) Bande 0 : Périphérique Bloc de débu Base Etat Redis Tranche dynamique c0t0d0s6 0 Non Ok Oui Device Relocation Information: Device Reloc Device ID c0t0d0 Oui id1,sd@SATA_____VBOX_HARDDISK____VB11d23ca4-8967fc4b
Vous devez noter dans le résultat de la commande la présence de plusieurs lignes importantes :
- Etat : Resynchronisation
- En effet, lors de la mise en place du miroir, les disques se synchronisent. Aucune action n'est alors permise sur le volume tant que la synchronisation ne soit pas effectuée. La ligne Etat peut prendre plusieurs valeurs : Okay, Resyncing , Resync canceled ou Needs Maintenance,
- Accès : 1
- La valeur d'Accès ou Pass number en anglais est un chiffre entre 0 et 9. Ce chiffre conditionne l'ordre dans lequel les miroirs seront synchronisés lors du re-démarrage du système. La valeur par défaut est 1. Dans le cas où deux miroirs possèdent la même valeur pour l'Accès, lesdeux miroirs sont synchronisés en même temps. Dans le cas contraire les miroirs sont synchronisés dans l'ordre croissant de 1 à 9. Une valeur de 0 est utilisée pour un miroir en lecture seule.
- Option de lecture : roundrobin (par défaut)
- L'option roundrobin concerne l'ordonnancement de la répartition de charge. Dans ce cas les lectures de données sont successivement faites sur chaque sous-miroir, l'un après l'autre.
- Option d'écriture : parallel (par défaut)
- L'option parallel implique que les données soient répliquées et envoyées d'une manière simultanée aux miroirs du volume.
Consultez la page Internet suivante pour vous renseigner sur les options de lecture et d'écriture pour des volumes RAID 1 Wikipedia.
A l'issu de la période de synchronisation, l'état devient OK :
# metastat d4: Miroir Sous-miroir 0: d2 Etat : Ok Sous-miroir 1: d3 Etat : Ok Accès : 1 Option de lecture : roundrobin (par défaut) Option d'écriture : parallel (par défaut) Taille : 2939895 blocs (1,4 GB) d2: Sous-miroir de d4 Etat : Ok Taille : 2939895 blocs (1,4 GB) Bande 0 : Périphérique Bloc de débu Base Etat Redis Tranche dynamique c0t0d0s5 0 Non Ok Oui d3: Sous-miroir de d4 Etat : Ok Taille : 2939895 blocs (1,4 GB) Bande 0 : Périphérique Bloc de débu Base Etat Redis Tranche dynamique c0t0d0s6 0 Non Ok Oui Device Relocation Information: Device Reloc Device ID c0t0d0 Oui id1,sd@SATA_____VBOX_HARDDISK____VB11d23ca4-8967fc4b
Les options de lecture (r) et d'écriture (w) peuvent être modifiées grâce à l'utilisation de la commande metaparam :
# metaparam -r geometric d4 # metaparam d4 d4 : Les paramètres du miroir actuels sont : Accès : 1 Option de lecture : geometric (-g) Option d'écriture : parallel (par défaut) # metaparam -w serial d4 # metaparam d4 d4 : Les paramètres du miroir actuels sont : Accès : 1 Option de lecture : geometric (-g) Option d'écriture : serial (-S)
La même commande peut être utilisée pour modifier la valeur de l'Accès ou Pass Number :
# metaparam -p 5 d4 # metaparam d4 d4 : Les paramètres du miroir actuels sont : Accès : 5 Option de lecture : geometric (-g) Option d'écriture : serial (-S)
Afin de poursuivre, il convient de re-définir l'Accès à 1 :
# metaparam -p 1 d4 # metaparam d4 d4 : Les paramètres du miroir actuels sont : Accès : 1 Option de lecture : geometric (-g) Option d'écriture : serial (-S)
Créez maintenant un file system sur le volume d4 :
# newfs -v -b 4096 -m 10 /dev/md/rdsk/d4 newfs: /dev/md/rdsk/d4 monté en dernier comme /slice5 newfs: construction d'un nouveau système de fichiers /dev/md/rdsk/d4 : (y/n)? y pfexec mkfs -F ufs /dev/md/rdsk/d4 2939895 63 240 4096 1024 32 10 3 4096 t 0 -1 8 14 n Avertissement : 8506 secteur(s) du dernier cylindre n'ont pas été alloués /dev/md/rdsk/d4: 2939894 secteurs dans 195 cylindres de 240 pistes, 63 secteurs 1435,5 Mo dans 65 groupes de cylindres (3 c/g, 22,15 Mo/g, 5344 i/g) sauvegardes de super-blocs (pour fsck -F ufs -o b=#) at: 32, 45456, 90880, 136304, 181728, 227152, 272576, 318000, 363424, 408848, 2498352, 2543776, 2589200, 2634624, 2680048, 2725472, 2770896, 2816320, 2861744, 2907168
Montez ensuite votre RAID 1 sur /slice5 et créez ensuite le fichier raidtest sur /slice5 :
# mount /dev/md/dsk/d4 /slice5 # echo "Ceci est un test d'un miroir" > /slice5/raidtest
Vous allez maintenant renommer le volume RAID 1 en d40. Pour accomplir cette tâche, il convient d'abord de démonter le volume et d'utiliser la commande metarename :
# umount /slice5 # metarename d4 d40 d4: a été renommé d40
Constatez maintenant vos volumes :
# metastat d40: Miroir Sous-miroir 0: d2 Etat : Ok Sous-miroir 1: d3 Etat : Ok Accès : 1 Option de lecture : geometric (-g) Option d'écriture : serial (-S) Taille : 2939895 blocs (1,4 GB) d2: Sous-miroir de d40 Etat : Ok Taille : 2939895 blocs (1,4 GB) Bande 0 : Périphérique Bloc de débu Base Etat Redis Tranche dynamique c0t0d0s5 0 Non Ok Oui d3: Sous-miroir de d40 Etat : Ok Taille : 2939895 blocs (1,4 GB) Bande 0 : Périphérique Bloc de débu Base Etat Redis Tranche dynamique c0t0d0s6 0 Non Ok Oui Device Relocation Information: Device Reloc Device ID c0t0d0 Oui id1,sd@SATA_____VBOX_HARDDISK____VB11d23ca4-8967fc4b
Dans le cas d'une défaillance d'un disque du miroir la valeur de Etat devient Needs Maintenance. Il est donc nécessaire de remplacer celui-ci. Dans ce cas, il convient d'utiliser la commande metadetach :
# metadetach -f d40 d3 d40: sous-miroir d3 déconnecté
Il est ensuite nécessaire de supprimer le volume du disque défaillant en utilisant la commande metaclear :
# metaclear -f d3 d3: Concaténation/Bande supprimée#
Après avoir réparé/remplacé le disque défaillant, il est nécessaire de reconstruire le sous-miroir :
# metainit d30 1 1 c0t0d0s6 d30: Concaténation/Bande configurée
Dernièrement, il convient de rattacher le nouveau volume au miroir :
# metattach d40 d30 d40: sous-miroir d30 is attached
et ensuite de constater l'état des volumes :
# metastat d40: Miroir Sous-miroir 0: d2 Etat : Ok Sous-miroir 1: d30 Etat : Resynchronisation Resynchronisation en cours : 51 % terminé Accès : 1 Option de lecture : geometric (-g) Option d'écriture : serial (-S) Taille : 2939895 blocs (1,4 GB) d2: Sous-miroir de d40 Etat : Ok Taille : 2939895 blocs (1,4 GB) Bande 0 : Périphérique Bloc de débu Base Etat Redis Tranche dynamique c0t0d0s5 0 Non Ok Oui d30: Sous-miroir de d40 Etat : Resynchronisation Taille : 2939895 blocs (1,4 GB) Bande 0 : Périphérique Bloc de débu Base Etat Redis Tranche dynamique c0t0d0s6 0 Non Ok Oui Device Relocation Information: Device Reloc Device ID c0t0d0 Oui id1,sd@SATA_____VBOX_HARDDISK____VB11d23ca4-8967fc4b
Notez que le volume d30 est en cours de synchronisation. Ce processus de synchronisation peut être interrompue grâce à la commande metasync -c d40. Dans ce cas la valeur de Etat devient Resync canceled. La synchronisation peut ensuite est reprise grâce à la commande metasync d40.
Il convient maintenant de constater que les données soient présentes :
# mount /dev/md/dsk/d40 /slice5 # cd /slice5 # ls lost+found raidtest
Le volume RAID 1 peut être supprimé à l'aide de la commande metaclear :
# cd .. # umount /slice5 # metaclear -r d40 d40: Miroir supprimé d2: Concaténation/Bande suppriméed30: Concaténation/Bande supprimée
LAB#5 - Réserve de Tranches Dynamiques
Pour utiliser une Réserve de Tranches Dynamiques il convient d'abord de la créer grâce à la commande metainit :
# metainit hsp000 hsp000: Réserve de tranches dynamiques configurée#
A ce stade, votre Réserve de Tranches Dynamiques est vide. Pour visualiser l'état de la Réserve de Tranches Dynamiques, il convient d'utiliser la commande metahs -i :
# metahs -i hsp000: est vide Device Relocation Information: Device Reloc Device ID
Ajoutez maintenant la tranche 4 de votre disque à la Réserve de Tranches Dynamiques grâce à la commande metahs -a :
# metahs -a hsp000 c0t0d0s4 hsp000: Tranche dynamique ajoutée#
Constatez maintenant l'état de votre Réserve de Tranches Dynamiques :
# metahs -i hsp000: 1 hot spare Périphérique Etat Longue Redistribution c0t0d0s4 Disponible 4209030 blocks Oui Device Relocation Information: Device Reloc Device ID c0t0d0 Oui id1,sd@SATA_____VBOX_HARDDISK____VB11d23ca4-8967fc4b
Bien que votre Réserve de Tranches Dynamiques soit créée, elle est à ce stade inutilisable parce qu'elle n'est attachée à aucun volume. Pour attacher une Réserve de Tranches Dynamiques à un volume, il convient d'utiliser la commande metaparam.
A l'aide du manuel de la commande, déterminez les options adéquates pour attacher une Réserve de Tranches Dynamiques à un volume RAID 5.
Pour supprimer une Réserve de Tranches Dynamiques, il convient d'utiliser la commande metaclear :
# metaclear hsp000 hsp000: Réserve de tranches dynamiques supprimée#
Il est aussi possible d'attacher une Réserve de Tranches Dynamiques à un volume lors de la création de ce dernier.
Créez donc la Réserve de Tranches Dynamiques hsp001 :
# metainit hsp001 hsp001: Réserve de tranches dynamiques configurée
Ajoutez maintenant la tranche 4 de votre disque à la Réserve de Tranches Dynamiques grâce à la commande metahs -a :
# metahs -a hsp001 c0t0d0s4 hsp001: Tranche dynamique ajoutée
Mettez en place un miroir entre les tranches 5 et 6 en indiquant que la Réserve de Tranches Dynamiques hsp001 sera attachée aux volumes :
# metainit d10 1 1 c0t0d0s5 -h hsp001 d10: Concaténation/Bande configurée # metainit d11 1 1 c0t0d0s6 -h hsp001 d11: Concaténation/Bande configurée # metainit d20 -m d10 d11 metainit: d20: AVERTISSEMENT : Ce type de metainit est déconseillé. Les sous-miroirs ne contiennent peut-être pas les mêmes données. Pour de plus amples informations, reportez-vous à ERREURS dans metainit(1M). d20: Miroir configuré
Notez bien le message d'avertissement lors de la première création du miroir. Bien que possible, cette syntaxe est déconseillée. Il convient donc d'utiliser les deux commandes metainit et metattach.
# metaclear d20 d20: Miroir supprimé # metainit d20 -m d10 d20: Miroir configuré # metattach d20 d11 d20: sous-miroir d11 is attached
Constatez maintenant le résultat de votre travail :
# metahs -i hsp001: 1 hot spare Périphérique Etat Longue Redistribution c0t0d0s4 Disponible 4209030 blocks Oui Device Relocation Information: Device Reloc Device ID c0t0d0 Oui id1,sd@SATA_____VBOX_HARDDISK____VB11d23ca4-8967fc4b
# metastat d20: Miroir Sous-miroir 0: d10 Etat : Ok Sous-miroir 1: d11 Etat : Ok Accès : 1 Option de lecture : roundrobin (par défaut) Option d'écriture : parallel (par défaut) Taille : 2939895 blocs (1,4 GB) d10: Sous-miroir de d20 Etat : Ok réserve de tranches dynamiques : hsp001 Taille : 2939895 blocs (1,4 GB) Bande 0 : Périphérique Bloc de débu Base Etat Redis Tranche dynamique c0t0d0s5 0 Non Ok Oui d11: Sous-miroir de d20 Etat : Ok réserve de tranches dynamiques : hsp001 Taille : 2939895 blocs (1,4 GB) Bande 0 : Périphérique Bloc de débu Base Etat Redis Tranche dynamique c0t0d0s6 0 Non Ok Oui hsp001: 1 hot spare Périphérique Etat Longue Redistribution c0t0d0s4 Disponible 4209030 blocks Oui Device Relocation Information: Device Reloc Device ID c0t0d0 Oui id1,sd@SATA_____VBOX_HARDDISK____VB11d23ca4-8967fc4b
Essayez maintenant de supprimer la Réserve de Tranches Dynamiques hsp001 :
# metaclear hsp001 metaclear: unknown: hsp001: réserve de tranches dynamiques en cours d'utilisation
Notez qu'il n'est pas possible de supprimer hsp001 tant que cette dernière soit en cours d'utilisation.
Pour détacher hsp001 des sous-miroirs d10 et d11, il convient d'utiliser la commande metaparam avec l'option -h none :
# metaparam -h none d10 # metaparam -h none d11
Il est possible de supprimer des tranches de la Réserve de Tranches Dynamiques grâce à la commande metahs -d :
# metahs -d hsp001 c0t0d0s4 hsp001: Tranche dynamique supprimée
Dernièrement supprimez la Réserve de Tranches Dynamiques hsp001 ainsi que votre miroir :
# metaclear hsp001 hsp001: Réserve de tranches dynamiques supprimée# # metaclear -r d20 d20: Miroir supprimé d10: Concaténation/Bande suppriméed11: Concaténation/Bande supprimée#
LAB#6 - RAID 5 - Striping avec Parité Distribuée
Pour créer un volume RAID 5, il est nécessaire de disposer d'au moins trois disques.
Dans le cas de ce LAB, vous allez simuler la mise en place d'un RAID 5 en utilisant trois tranches. Pour accomplir cette tâche, il convient d'utiliser la commande metainit :
# metainit d5 -r c0t0d0s4 c0t0d0s5 c0t0d0s6 d5: RAID configuré
Il convient ensuite de constater l'état du volume :
# metastat -p d5 -r c0t0d0s4 c0t0d0s5 c0t0d0s6 -k -i 32b # metastat d5: RAID Etat : Initialisation Initialisation en cours: 74.3% terminé Entrelacement : 32 blocs Taille : 5863725 blocs (2,8 GB) Périphérique d'origine : Taille : 5879104 blocs (2,8 GB) Périphérique Bloc de débu Base Etat Redis Tranche dynamique c0t0d0s4 330 Non Ok Oui c0t0d0s5 330 Non Ok Oui c0t0d0s6 330 Non Ok Oui Device Relocation Information: Device Reloc Device ID c0t0d0 Oui id1,sd@SATA_____VBOX_HARDDISK____VB11d23ca4-8967fc4b
Notez que l'état du volume RAID 5 est Initialisation. Il existe trois états pour RAID 5, à savoir en anglais Initializing, Okay et Maintenance. Notez aussi qu'il existe un état pour chaque tranche dans le volume. Il existe 5 états pour les tranches, à savoir en anglais, Initializing, Okay, Resyncing, Maintenance ou Maintenance Last Erred.
A l'issu de la période d'initialisation, l'état devient Ok :
# metastat d5: RAID Etat : Ok Entrelacement : 32 blocs Taille : 5863725 blocs (2,8 GB) Périphérique d'origine : Taille : 5879104 blocs (2,8 GB) Périphérique Bloc de débu Base Etat Redis Tranche dynamique c0t0d0s4 330 Non Ok Oui c0t0d0s5 330 Non Ok Oui c0t0d0s6 330 Non Ok Oui Device Relocation Information: Device Reloc Device ID c0t0d0 Oui id1,sd@SATA_____VBOX_HARDDISK____VB11d23ca4-8967fc4b
Créez maintenant un file system sur le volume RAID 5 :
# newfs -v -b 4096 -m 10 /dev/md/rdsk/d5 newfs: construction d'un nouveau système de fichiers /dev/md/rdsk/d5 : (y/n)? y pfexec mkfs -F ufs /dev/md/rdsk/d5 5863725 63 240 4096 1024 64 10 3 6144 t 0 -1 8 14 n Avertissement : 2836 secteur(s) du dernier cylindre n'ont pas été alloués /dev/md/rdsk/d5: 5863724 secteurs dans 388 cylindres de 240 pistes, 63 secteurs 2863,1 Mo dans 130 groupes de cylindres (3 c/g, 22,15 Mo/g, 3552 i/g) sauvegardes de super-blocs (pour fsck -F ufs -o b=#) at: 32, 45456, 90880, 136304, 181728, 227152, 272576, 318000, 363424, 408848, 5450912, 5496336, 5541760, 5587184, 5632608, 5678032, 5723456, 5768880, 5814304, 5859728
Montez d5 sur /slice5 et constatez sa taille :
# mount /dev/md/dsk/d5 /slice5 # df -h Système de fichiers taille utilisé dispo capacité Monté sur /dev/dsk/c0t0d0s0 8,5G 4,1G 4,3G 49% / /devices 0K 0K 0K 0% /devices ctfs 0K 0K 0K 0% /system/contract proc 0K 0K 0K 0% /proc mnttab 0K 0K 0K 0% /etc/mnttab swap 1,5G 1016K 1,5G 1% /etc/svc/volatile objfs 0K 0K 0K 0% /system/object sharefs 0K 0K 0K 0% /etc/dfs/sharetab /usr/lib/libc/libc_hwcap1.so.1 8,5G 4,1G 4,3G 49% /lib/libc.so.1 fd 0K 0K 0K 0% /dev/fd swap 1,5G 112K 1,5G 1% /tmp swap 1,5G 36K 1,5G 1% /var/run mypool 341M 37K 340M 1% /mypool /dev/dsk/c0t0d0s7 5,9G 6,0M 5,9G 1% /export/home /dev/md/dsk/d5 2,7G 2,8M 2,5G 1% /slice5
Expliquez la dernière ligne. Y-a-t-il des anomalies ?
Quotas
Les quotas sont appliqués sur des filesystems. L'administrateur met souvent des quotas en place sur l'arborescence de /export/home pour limiter l'espace de stockage occupé par les utilisateurs.
LAB#7 - Quotas sur UFS
Dans le cas de cet exemple, vous allez utiliser le RAID 5 logiciel créé précédemment pour stocker les fichiers de /export/home.
Copiez tous le contenu de /export/home vers /slice5 :
# cp -pR /export/home/* /slice5
Démontez maintenant /slice5 :
# umount /slice5
Editez le fichier /etc/vfstab en mettant en commentaire la ligne commençant par /dev/dsk/c0t0d0s7 et en ajoutant la ligne commençant par /dev/md/dsk/d5 :
#/dev/dsk/c0t0d0s7 /dev/rdsk/c0t0d0s7 /export/home ufs 2 yes - /dev/md/dsk/d5 /dev/md/rdsk/d5 /export/home ufs 2 yes rq
Notez l'utilisation de l'option rq qui indique au système la mise en place de quotas pour ce volume.
Démontez ensuite /export/home :
# umount /dev/dsk/c0t0d0s7
Remontez /export/home et contrôlez le résultat :
# mount /export/home # cat /etc/mnttab /dev/dsk/c0t0d0s0 / ufs rw,intr,largefiles,logging,xattr,onerror=panic,dev=780000 1370245312 /devices /devices devfs dev=4a40000 1370245290 ctfs /system/contract ctfs dev=4ac0001 1370245290 proc /proc proc dev=4a80000 1370245290 mnttab /etc/mnttab mntfs dev=4b00001 1370245290 swap /etc/svc/volatile tmpfs xattr,dev=4b40001 1370245290 objfs /system/object objfs dev=4b80001 1370245290 sharefs /etc/dfs/sharetab sharefs dev=4bc0001 1370245290 /usr/lib/libc/libc_hwcap1.so.1 /lib/libc.so.1 lofs dev=780000 1370245301 fd /dev/fd fd rw,dev=4d40001 1370245312 swap /tmp tmpfs xattr,dev=4b40002 1370245318 swap /var/run tmpfs xattr,dev=4b40003 1370245318 mypool /mypool zfs rw,devices,setuid,nonbmand,exec,rstchown,xattr,atime,dev=2d50002 1370245324 -hosts /net autofs nosuid,indirect,ignore,nobrowse,dev=4e00001 1370245339 auto_home /home autofs indirect,ignore,nobrowse,dev=4e00002 1370245339 solaris:vold(pid557) /vol nfs ignore,noquota,dev=4dc0001 1370245340 /dev/md/dsk/d5 /export/home ufs rw,intr,largefiles,logging,xattr,onerror=panic,dev=1540005 1370263404
Pour activer les quotas sur /export/home, il convient de créer le fichier normal quotas à la racine du point de montage :
# touch /export/home/quotas
Le fichier quotas doit appartenir à root du groupe root et posséder des permissions de 600 :
# chmod 600 /export/home/quotas
Si besoin est, créez un utilisateur user1 avec le mot de passe test1234 :
# groupadd groupe1 # useradd -m -g groupe1 -d /export/home/user1 user1 64 blocs # passwd user1 Nouveau mot de passe : test1234 Entrez de nouveau le mot de passe : test1234 passwd: mot de passe correctement modifié pour user1
Configurez votre éditeur par défaut en tant que vi :
# which vi /usr/bin/vi # echo $EDITOR /usr/dt/bin/dtpad # EDITOR=/usr/bin/vi # export EDITOR # echo $EDITOR /usr/bin/vi
Mettez en place maintenant des quotas soft de 8 000 Ko et hard de 10 000 Ko pour l'utilisateur user1 :
# edquota user1
Modifiez ce fichier ainsi :
fs /export/home blocks (soft = 8001, hard = 10001) inodes (soft = 0, hard = 0)
Notez que les chiffres saisis sont 8001 et 10001. La taille des blocs est de 1 Ko. Il est à noter que vous pouvez soit mettre en place un quota en taille, soit mettre en place un quota basé sur le nombre d'inodes utilisés par l'utilisateur.
Activez maintenant les quotas sur /export/home :
# quotaon /export/home
La commande quotaon peut prendre comme argument soit un point de montage spécifique soit -a au cas où les quotas seront activés sur tous les filesystems ayant un fichier quotas à la racine de leur point de montage.
De cette manière vous avez mis en place un quota souple ou soft en anglais de 8 000 Ko et un quota stricte ou hard en anglais de 10 000 Ko pour l'utilisateur user1.
Quand l'utilisateur user1 aura dépassé le quota souple, il recevra un message d'avertissement. L'utilisateur aura ensuite 7 jours de grâce pour redescendre en dessous de sa limite souple. A l'issu de la période de grâce, sa consommation en taille ou en inodes devient de facto sa limite stricte.
Pour modifier la période de grâce, il convient d'utiliser la commande edquota avec l'option -t.
Mettez en place une période de grâce de 10 jours.
Si pendant la période de grâce l'utilisateur dépasse le quota stricte, il ne pourra plus enregistrer dans /export/home, sauf dans le cas où il supprime des fichiers pour retomber en dessous de la limite stricte.
Pour vérifier la cohérence des informations du fichier quotas, il convient d'utiliser la commande quotacheck :
# quotacheck /export/home
La commande quotacheck peut prendre comme argument soit un point de montage spécifique soit -a au cas où les cohérences de tous les quotas seront effectués sur tous les filesystems ayant un fichier quotas à la racine de leur point de montage. Attention, sur un filesystem contenant un grand nombre de fichiers la commande quotacheck peut prendre un temps considérable.
Pour visualiser les quotas utilisez la commande repquota :
# repquota /export/home Block limits File limits User used soft hard timeleft used soft hard timeleft user1 -- 5 8001 10001 5 0 0
Vérifiez ensuite la véracité de la colonne used :
# du -h /export/home/user1 5K /export/home/user1
Si besoin est, créez un utilisateur user2 avec le mot de passe test :
# groupadd groupe2 # useradd -m -g groupe2 -d /export/home/user2 user2 64 blocs # passwd user2 Nouveau mot de passe : test1234 Entrez de nouveau le mot de passe : test1234 passwd: mot de passe correctement modifié pour user2
Vous pouvez mettre en place les mêmes quotas pour d'autres utilisateurs en utilisant la commande edquota avec l'option -p suivie par le nom de l'utilisateur proto-type :
# edquota -p user1 user2 # repquota -v /export/home /dev/md/dsk/d5 (/export/home): Block limits File limits User used soft hard timeleft used soft hard timeleft user1 -- 5 8001 10001 5 0 0 user2 -- 0 8001 10001 0 0 0
Devenez maintenant l'utilisateur user1 et créez un gros fichier :
# su - user1 Sun Microsystems Inc. SunOS 5.10 Generic January 2005 $ pwd /export/home/user1 $ cd / $ ls -lRa > /export/home/user1/ls1 2>&1 quota_ufs: Warning: over disk limit (pid 1542, uid 100, inum 15, fs /export/home) quota_ufs: over hard disk limit (pid 1542, uid 100, inum 15, fs /export/home) $ exit # du -h /export/home/user1 9,8M /export/home/user1
Notez les deux messages lors du dépassement de la limite souple et stricte.
Revenez à l'utilisation de votre tranche 7 pour le montage de /export/home. Placez-y des quotas pour l'utilisateur user1 et détruisez votre volume RAID 5.
Références
<html> <center> Copyright © 2011-2018 I2TCH LIMITED.<br><br> </center> </html>