Version : 2020.01

Dernière mise-à-jour :

SO208 - Gestion des Disques et le Swap

Disques

La correspondance entre les entrées du répertoire /dev et /devices est gérée par la commande devfsadm qui est lancée au démarrage du système. Cette même commande lance le démon devfsadmd. Ce démon sert aux re-configurations dynamiques des périphériques :

# 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
# 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

Le format de chaque ligne dans /devices est pilote@adresse:arguments.

Mode bloc

L'accès aux périphériques en mode bloc se fait via des buffers vers le noyau. Un périphérique en mode bloc peut recevoir un filesystem.

Mode raw bloc

L'accès aux périphériques en mode raw bloc ne se fait pas via des buffers vers le noyau. Un périphérique en mode raw bloc ne peut pas recevoir un filesystem.

Disquettes

Dans un système Solaris, il existe plusieurs liens dynamiques pour le même périphérique. Par exemple le lecteur de disquette est référencé par 4 liens différents :

/dev/fd0 > /dev/fd0c > /dev/diskette0 > /dev/diskette

L'accès à une disquette en mode raw bloc se fait en utilisant le fichier /dev/rdiskette.

Autres Périphériques

Les noms des fichiers spéciaux pour les autres périphériques sont :

Fichier	Description
/dev/rmt/*	Bandes avec rembobinage
/dev/rmt/*n	Bandes sans rembobinage
/dev/cua/*	Modems
/dev/term/*	Terminaux
/dev/pts/*	Pseudo-terminaux
/dev/mem	Mémoire physique
/dev/kmem	Mémoire virtuelle du noyau
/dev/mouse	Souris
/dev/swap	Disque swap primaire
/dev/null	La poubelle de Solaris
/dev/zero	Périphérique qui renvoie en lecture un octet de 0
/dev/dump	Périphérique vers lequel sont envoyés les dumps

Détection automatique

Afin de procéder à une re-détection automatique des périphériques dans le système, il convient de créer le fichier /reconfigure et de redémarrer le système. Le fichier est supprimé en même temps que la reconfiguration.

Partitionnement

Lors de son installation un disque Solaris est divisé en partitions appelés :

sections

tranches

slices

Le terme partition est générique. En effet lors de l'installation sur un PC, Solaris installe ses partitions dans une seule partition DOS.

En règle générale, il existe aussi une partition destinée à recevoir le swap.

Visualiser les partitions avec format

Pour visualiser les partitions, il convient d'utiliser la commande format :

# format
Searching for disks...done
AVAILABLE DISK SELECTIONS:
0. c0t0d0 <ATA -VBOX HARDDISK -1.0 cyl 2085 alt 2 hd 255 sec 63>
/pci@0,0/pci8086,2829@d/disk@0,0
Specify disk (enter its number):

Il convient donc de choisir le disque voulu, dans notre cas le disque 0 :

Specify disk (enter its number): 0
selecting c0t0d0
[disk formatted]
Warning: Current Disk has mounted partitions.
/dev/dsk/c0t0d0s0 is currently mounted on /. Please see umount(1M).
/dev/dsk/c0t0d0s1 is currently used by swap. Please see swap(1M).
/dev/dsk/c0t0d0s7 is normally mounted on /export/home according to /etc/vfstab. Please remove this entry to use this device.
FORMAT MENU:
disk - select a disk
type - select (define) a disk type
partition - select (define) a partition table
current - describe the current disk
format - format and analyze the disk
fdisk - run the fdisk program
repair - repair a defective sector
label - write label to the disk
analyze - surface analysis
defect - defect list management
backup - search for backup labels
verify - read and display labels
save - save new disk/partition definitions
inquiry - show vendor, product and revision
volname - set 8-character volume name
!<cmd> - execute <cmd>, then return
quit
format>

Le prompt de deuxième niveau attend un choix parmi ceux proposés. Saisissez donc le choix partition pour visualiser les partitions :

format> partition
PARTITION MENU:
0 - change `0' partition
1 - change `1' partition
2 - change `2' partition
3 - change `3' partition
4 - change `4' partition
5 - change `5' partition
6 - change `6' partition
7 - change `7' partition
select - select a predefined table
modify - modify a predefined partition table
name - name the current table
print - display the current table
label - write partition map and label to the disk
!<cmd> - execute <cmd>, then return
quit
partition>

Et enfin le choix print :

partition> print
Current partition table (original):
Total disk cylinders available: 2085 + 2 (reserved cylinders)
Part Tag Flag Cylinders Size Blocks
0 root wm 68 - 1141 8.23GB (1074/0/0) 17253810
1 swap wu 1 - 67 525.56MB (67/0/0) 1076355
2 backup wm 0 - 2084 15.97GB (2085/0/0) 33495525
3 unassigned wm 0 0 (0/0/0) 0
4 unassigned wm 0 0 (0/0/0) 0
5 unassigned wm 0 0 (0/0/0) 0
6 unassigned wm 0 0 (0/0/0) 0
7 home wm 1142 - 2083 7.22GB (942/0/0) 15133230
8 boot wu 0 - 0 7.84MB (1/0/0) 16065
9 unassigned wm 0 0 (0/0/0) 0
partition>

Par convention la partition virtuelle numéro deux correspond au disque complet vu par Solaris.

L'utilisation des partitions peut être observée en comparant la sortie de format avec celle de la commande mount :

# mount
/ on /dev/dsk/c0t0d0s0 read/write/setuid/devices/rstchown/intr/largefiles/logging/xattr/onerror=panic/dev=840000 on Sat Nov 30 06:44:41 2019
/devices on /devices read/write/setuid/devices/rstchown/dev=4b80000 on Sat Nov 30 06:44:37 2019
/system/contract on ctfs read/write/setuid/devices/rstchown/dev=4c00001 on Sat Nov 30 06:44:37 2019
/proc on proc read/write/setuid/devices/rstchown/dev=4bc0000 on Sat Nov 30 06:44:37 2019
/etc/mnttab on mnttab read/write/setuid/devices/rstchown/dev=4c40001 on Sat Nov 30 06:44:37 2019
/etc/svc/volatile on swap read/write/setuid/devices/rstchown/xattr/dev=4c80001 on Sat Nov 30 06:44:37 2019
/system/object on objfs read/write/setuid/devices/rstchown/dev=4cc0001 on Sat Nov 30 06:44:37 2019
/etc/dfs/sharetab on sharefs read/write/setuid/devices/rstchown/dev=4d00001 on Sat Nov 30 06:44:37 2019
/lib/libc.so.1 on /usr/lib/libc/libc_hwcap1.so.1 read/write/setuid/devices/rstchown/dev=840000 on Sat Nov 30 06:44:40 2019
/dev/fd on fd read/write/setuid/devices/rstchown/dev=4e80001 on Sat Nov 30 06:44:41 2019
/tmp on swap read/write/setuid/devices/rstchown/xattr/dev=4c80002 on Sat Nov 30 06:44:42 2019
/var/run on swap read/write/setuid/devices/rstchown/xattr/dev=4c80003 on Sat Nov 30 06:44:42 2019

Visualiser les partitions avec prtvtoc

Solaris implémente aussi la commande prtvtoc en spécifiant le nom du disque complet en mode raw bloc :

# prtvtoc /dev/rdsk/c0t0d0s2
* /dev/rdsk/c0t0d0s2 partition map
*
* Dimensions:
* 512 bytes/sector
* 63 sectors/track
* 255 tracks/cylinder
* 16065 sectors/cylinder
* 2087 cylinders
* 2085 accessible cylinders
*
* Flags:
* 1: unmountable
* 10: read-only
*
* Unallocated space:
* First Sector Last
* Sector Count Sector
* 33479460 16065 33495524
*
* First Sector Last
* Partition Tag Flags Sector Count Sector Mount Directory
0 2 00 1092420 17253810 18346229 /
1 3 01 16065 1076355 1092419
2 5 00 0 33495525 33495524
7 8 00 18346230 15133230 33479459 /export/home
8 1 01 0 16065 16064

Les chiffres de la colonne Sector Count sont exprimés en blocs de 512 octets.

La commande format

Revenez maintenant à votre commande format :

partition> quit
FORMAT MENU:
disk - select a disk
type - select (define) a disk type
partition - select (define) a partition table
current - describe the current disk
format - format and analyze the disk
fdisk - run the fdisk program
repair - repair a defective sector
label - write label to the disk
analyze - surface analysis
defect - defect list management
backup - search for backup labels
verify - read and display labels
save - save new disk/partition definitions
inquiry - show vendor, product and revision
volname - set 8-character volume name
!<cmd> - execute <cmd>, then return
quit
format>

Dans cette liste on peut constater certains choix. Parmi les plus important on trouve :

current

Indique des informations sur le disque courant.

format> current
Current Disk = c0t0d0
<ATA -VBOX HARDDISK -1.0 cyl 2085 alt 2 hd 255 sec 63>
/pci@0,0/pci8086,2829@d/disk@0,0
format>

format

Effectue un formatage bas niveau mais uniquement pour certains types.

format> format
Cannot format disk while it has mounted partitions.
format>

fdisk

Ce choix n'est présent que sur des PC. Il permet de créer une partition pour Solaris :

Warning: Current Disk has mounted partitions.
Total disk size is 2088 cylinders
Cylinder size is 16065 (512 byte) blocks
Cylinders
Partition Status Type Start End Length %
========= ====== ============ ===== === ====== ===
1 Active Solaris2 1 2087 2087 100
SELECT ONE OF THE FOLLOWING:
1. Create a partition
2. Specify the active partition
3. Delete a partition
4. Change between Solaris and Solaris2 Partition IDs
5. Exit (update disk configuration and exit)
6. Cancel (exit without updating disk configuration)
Enter Selection: 6

repair

Essaie de réparer un bloc défecteux.

format> repair
Enter absolute block number of defect: ^C
format>

analyze

Ce choix permet des test d'intégrité sur le disque :

format> analyze
ANALYZE MENU:
read - read only test (doesn't harm SunOS)
refresh - read then write (doesn't harm data)
test - pattern testing (doesn't harm data)
write - write then read (corrupts data)
compare - write, read, compare (corrupts data)
purge - write, read, write (corrupts data)
verify - write entire disk, then verify (corrupts data)
print - display data buffer
setup - set analysis parameters
config - show analysis parameters
!<cmd> - execute <cmd> , then return
quit
analyze> quit

verify

Affiche des informations sur le disque courant y compris la table des partitions.

format> verify
Warning: Primary label on disk appears to be different from
current label.
Warning: Check the current partitioning and 'label' the disk or use the
'backup' command.
Primary label contents:
Volume name = < >
ascii name = <DEFAULT cyl 2085 alt 2 hd 255 sec 63>
pcyl = 2087
ncyl = 2085
acyl = 2
bcyl = 0
nhead = 255
nsect = 63
Part Tag Flag Cylinders Size Blocks
0 root wm 68 - 1141 8.23GB (1074/0/0) 17253810
1 swap wu 1 - 67 525.56MB (67/0/0) 1076355
2 backup wm 0 - 2084 15.97GB (2085/0/0) 33495525
3 unassigned wm 0 0 (0/0/0) 0
4 unassigned wm 0 0 (0/0/0) 0
5 unassigned wm 0 0 (0/0/0) 0
6 unassigned wm 0 0 (0/0/0) 0
7 home wm 1142 - 2083 7.22GB (942/0/0) 15133230
8 boot wu 0 - 0 7.84MB (1/0/0) 16065
9 unassigned wm 0 0 (0/0/0) 0
format>

volname

Ce choix permet de stipuler un nom de volume de 8 caractères :

format> volname
Enter 8-character volume name (remember quotes)[""]:"mydisk"
Ready to label disk, continue? y
format>

Pour vérifier la prise en compte, choisissez de nouveau le choix verify :

format> verify
Warning: Primary label on disk appears to be different from
current label.
Warning: Check the current partitioning and 'label' the disk or use the
'backup' command.
Primary label contents:
Volume name = < mydisk>
ascii name = <ATA -VBOX HARDDISK -1.0 cyl 2085 alt 2 hd 255 sec 63>
pcyl = 2087
ncyl = 2085
acyl = 2
bcyl = 0
nhead = 255
nsect = 63
Part Tag Flag Cylinders Size Blocks
0 root wm 68 - 1141 8.23GB (1074/0/0) 17253810
1 swap wu 1 - 67 525.56MB (67/0/0) 1076355
2 backup wm 0 - 2084 15.97GB (2085/0/0) 33495525
3 unassigned wm 0 0 (0/0/0) 0
4 unassigned wm 0 0 (0/0/0) 0
5 unassigned wm 0 0 (0/0/0) 0
6 unassigned wm 0 0 (0/0/0) 0
7 home wm 1142 - 2083 7.22GB (942/0/0) 15133230
8 boot wu 0 - 0 7.84MB (1/0/0) 16065
9 unassigned wm 0 0 (0/0/0) 0
format>

A tout moment il est possible d'exécuter une commande système sans quitter le programme format en utilisant le caractère ! :

format> !pwd
/tmp/inode
[Hit Return to continue]
FORMAT MENU:
disk - select a disk
type - select (define) a disk type
partition - select (define) a partition table
current - describe the current disk
format - format and analyze the disk
fdisk - run the fdisk program
repair - repair a defective sector
label - write label to the disk
analyze - surface analysis
defect - defect list management
backup - search for backup labels
verify - read and display labels
save - save new disk/partition definitions
inquiry - show vendor, product and revision
volname - set 8-character volume name
!<cmd> - execute <cmd>, then return
quit
format>

Filesystems Utilisés par Solaris

Filesystems Disques

UFS

Unix File System est le filesystem par défaut de Solaris 10.

ZFS

Solaris 10 comprend le système de fichiers Solaris ZFS, nouveau système de fichiers 128 bits. Solaris ZFS offre une administration simple, une sémantique transactionnelle, une intégrité complète des données et une capacité d'évolution extraordinaire. Solaris ZFS ne constitue pas l'amélioration d'une technologie existante. Il s'agit d'une approche totalement nouvelle de gestion de données.

HSFS

High Sierra File System est le filesystem utilisé pour le standard ISO 9660, c'est-à-dire pour les CD. Solaris support aussi les Rock Ridge Extensions ce qui implique la disponibilité de toutes les fonctions du filesystem UFS sauf celles de l'écriture et les liens physiques.

PCFS

PC File System est le filesystem permettant accès en lecture et écriture à des disquettes DOS.

UDF

Universal Disk Filesystem est le filesystem des DVD.

Filesystems Virtuels

Les filesystems virtuels sont pour la plupart des représentations en mémoire qui n'occupent aucune espace disque. En règle générale les filesystems virtuels ne nécessitent aucune intervention de l'administrateur.

CacheFS

Cache File System est utilisé pour amélioré les performances d'un filesystem NFS.

TMPFS

Temporary File System est un filesystem en mémoire. Il est donc très rapide. Ceci est le filesystem par défaut de /tmp ainsi que le swap.

LOFS

Loopback File System de dupliquer un filesystem comme s'il s'agissait d'une image dans une glace.

PROCFS

Process File System est un filesystem en mémoire. Il est donc très rapide. Ceci est le filesystem par défaut de /proc.

CTFS

ConTract File System est un filesystem spécialement conçu pour des relations entre des processus et les ressources système. Cecie est le filesystem par défaut du nouveau service SMF de Solaris 10 (Service Management Facility).

MNTFS

Ce filesystem donne un accès en lecture seule à la table des filesystems.

OBJFS

OBJect File System. Ce filesystem décrit l'état des modules du noyau. Il sert à déboguer le noyau sans y avoir accès.

SPECFS

SPECial File System. Ce filesystem fournit l'accès aux fichiers spéciaux, c'est-à-dire le répertoire /devices.

Le Swap

Solaris doit disposer d'un espace de pagination appelé le swap. Solaris utilise un type de filesystem virtuel pour le répertoire /tmp, à savoir le TMPFS. Le swap est utilisé par ce type de filesystem.

Lors de la procédure d'installation, Solaris met en place un swap de 512 Mo. Par contre la taille conseillée du swap varie avec la mémoire physique de la machine :

Mémoire Physique	Taille du swap
4Go	1Go
8Go	2Go
16Go et +	4Go

Pour visualiser l'utilisation de la mémoire virtuelle,il convient d'utiliser la commande swap avec l'option l. Saisissez donc la commande suivante :

format> quit
# swap -l
swapfile dev swaplo blocks free
/dev/dsk/c0t0d0s1 33,1 8 1076344 1076344

où :

swapfile est le nom de la zone de swap

dev est les numéros de majeur et de mineur expliqués dans la leçon Gestion des Paramètres du Matériel et les Ressources de ce cours

swaplo est le nombre de blocs de 512 octets réservé en début de zone

blocks est la taille de la zone de swap en blocs de 512 octets

free est le nombre de blocs de 512 octets libres

Pour visualiser l'utilisation de la totalité de la mémoire,il convient d'utiliser la commande swap avec l'option s. Saisissez donc la commande suivante :

# swap -s
total: 179520k bytes allocated + 40056k reserved = 219576k used, 1484504k available

Il est également possible de créer un fichier de swap grâce àla commande mkfile. Saisissez la commande suivante :*

# mkfile -v 256m /swap
/swap 268435456 bytes
# ls -l /swap
-rw------T 1 root root 268435456 Nov 30 10:19 /swap

On active le fichier swap grâce à la commande swap avec l'option -a. Saisissez la commande suivante :*

# swap -a /swap
# swap -l
swapfile dev swaplo blocks free
/dev/dsk/c0t0d0s1 33,1 8 1076344 1076344
/swap - 8 524280 524280

Pour activer le fichier de swap lors du démarrage de la machine,il convient d'inclure la ligne suivante dans le fichier /etc/vfstab :

/swap - - swap - no -

C'est le script /sbin/swapadd qui se charge d'activer les zones et les fichiers de swap au démarrage.

Pour supprimer votre fichier de swap, il convient d'utiliser la commande swap avec l'option -d :

# swap -d /swap
# swap -l
swapfile dev swaplo blocks free
/dev/dsk/c0t0d0s1 33,1 8 1076344 1076344

N'oubliez pas de supprimer la ligne suivante du fichier /etc/vfstab :

/swap - - swap - no -

et de supprimer le fichier disque lui-même :

# rm /swap

<html> <center> Copyright © 2020 Hugh Norris. </center> </html>