Disques durs et systèmes de fichiers
Conventions
Solaris fait la distinction entre les partitions "normale" (type bloc) et les partitions raw : ce sont les mêmes partitions physiques, mais c'est la façon d'y accéder qui est différente. Un programme va utiliser la partition normale, la partition raw est réservée aux commandes de bas niveau comme "fsck".
Les partitions normales sont vues dans /dev/dsk/. Pour y accéder en mode raw, il faut aller dans /dev/rdsk.
Exemple de disque dur : /dev/dsk/c0t0d0.
- le "c" représente le numéro de contrôleur SCSI.
- le "t" est la target SCSI
- le "d" est le numéro de disque sur la target.
Ensuite, le disque est découpé en "slices", qui correspondent à des partitions dans le langage windows ou linux. Le numéro de slice est repéré par la lettre "s", allant de 0 à 7. ATTENTION : le slice 2 n'est pas utilisable, il représente le disque dur dans son ensemble.
Ainsi, /dev/dsk/c1t0d2s6 correspond à la 7ème partition du 3è disque de la première target du 2è contrôleur. /dev/dsk/c1t0d2s2 correspond au même disque, mais dans son ensemble.
L'utilitaire format
Format est un utilitaire qui permet de voir ou modifier les disques et les partitions. Il suffit de taper "format" et de faire son choix dans les menus.
Dans l'exemple qui suit, on tape "format" qui va afficher la liste des disques, puis on tape "0" pour voir en détail le disque 0. Puis on tape "p" pour voir la table des partitions et encore "p" pour afficher le détail des partitions :
# format Searching for disks...done AVAILABLE DISK SELECTIONS: 0. c0t0d0 <SUN4.2G cyl 3880 alt 2 hd 16 sec 135> /pci@1f,4000/scsi@3/sd@0,0 1. c0t1d0 <SUN4.2G cyl 3880 alt 2 hd 16 sec 135> /pci@1f,4000/scsi@3/sd@1,0 2. c0t2d0 <SUN18G cyl 7506 alt 2 hd 19 sec 248> /pci@1f,4000/scsi@3/sd@2,0 3. c0t3d0 <IBM-DDRS39130SUN9.0G-S98E cyl 4924 alt 2 hd 27 sec 133> /pci@1f,4000/scsi@3/sd@3,0 4. c2t0d0 <IBM-DDYST1835SUN18G-S96H cyl 7506 alt 2 hd 19 sec 248> /pci@6,4000/scsi@4/sd@0,0 Specify disk (enter its number): 0 selecting c0t0d0 [disk formatted] Warning: Current Disk has mounted partitions. 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 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> p 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> p Current partition table (original): Total disk cylinders available: 3880 + 2 (reserved cylinders) Part Tag Flag Cylinders Size Blocks 0 root wm 0 - 758 800.51MB (759/0/0) 1639440 1 usr wm 759 - 2181 1.47GB (1423/0/0) 3073680 2 backup wm 0 - 3879 4.00GB (3880/0/0) 8380800 3 swap wu 2941 - 3225 300.59MB (285/0/0) 615600 4 unassigned wm 0 0 (0/0/0) 0 5 unassigned wm 0 0 (0/0/0) 0 6 swap wu 2182 - 2940 800.51MB (759/0/0) 1639440 7 unassigned wm 0 0 (0/0/0) 0 partition>
Pour sortir on tape "q" puis "q".
On voit dans l'exemple qu'il y a 5 disques dur. Quand on regarde en détail le disque 0, on voit qu'il fait 4GB (partition 2 = disque entier). Il y a une partition root de 800Mo, une usr de 1.47Mo et deux partitions swap de 300Mo et 800Mo. La colonne Tag n'est qu'indicative et n'a pas obligatoirement de rapport avec le point de montage final.
Lorsqu'on prépare les partitions du disque, on passe par le même menu et on tape ensuite le numéro de la partition qu'on veut modifier. Il faut faire très attention à ce qu'on écrit, car format demande le numéro de cylindre auquel on veut commencer, puis la taille de la partition ; si on ne fait pas attention, on peut se retrouver avec des partitions à cheval sur les mêmes cylindres et ça va mal se passer !
Faire un fsck
Pour le fsck, on accède au périphérique de type raw. La partition doit être démontée. Exemple :
# fsck [-fy] /dev/rdsk/c2t0c0d0
Les options entre crochets sont facultatives.
- "f" : force, pour forcer le fsck, même si le filesystem semble ok "y" : yes, répond automatiquement yes à toutes les questions (peut sauver la vie quand il demande 500 fois s'il doit réparer un secteur...)"f" : force, pour forcer le fsck, même si le filesystem semble ok
- "y" : yes, répond automatiquement yes à toutes les questions (peut sauver la vie quand il demande 500 fois s'il doit réparer un secteur...)
Cas particulier de Veritas File System (VxFS)
Dans le cas de partitions Veritas, les partitions sont accessibles dans /dev/vx/dsk et en mode raw dans /dev/vx/rdsk. Pour un fsck, il est préférable de préciser à fsck qu'on est en vxfs comme suit :
# fsck -F vxfs [-fy] /dev/rdsk/c2t0c0d0
ATTENTION : pour voir le type de FS d'une partition il existe la commande "fstyp" (voir ci-après). Curieusement, fsck ne se sert pas de cette commande pour savoir à quel type de FS il a affaire, mais il se base sur ce qu'il voit dans /etc/vfstab. S'il ne trouve pas dans /etc/vfstab, alors il va choisir le type de FS "par défaut" qui est inclus dans /etc/default/fs qui est normalement UFS. Si jamais fsck se trompe de type de filesystem et corrige des problèmes (car du coup il va forcément en trouver), les données seront irrécupérables !
Voir le type de filesystem
Solaris possède la commande "fstyp" qui permet de connaître le type de filesystem d'une partition. Exemples :
# fstyp /dev/vx/dsk/zonedg/zonelv vxfs # fstyp /dev/vx/dsk/appli_stddg/appli_stdlv ufs
fstyp fonctionne indifféremment avec dsk ou rdsk.
/etc/vfstab
/etc/vfstab est l'équivalent de /etc/fstab sous linux. La syntaxe est légèrement différente car il nécessite d'indiquer les raw devices. Exemple de fichier /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/md/dsk/d0 /dev/md/rdsk/d0 / ufs 1 no - /dev/md/dsk/d1 - - swap - no - /dev/md/dsk/d3 /dev/md/rdsk/d3 /var ufs 1 no - /devices - /devices devfs - no - sharefs - /etc/dfs/sharetab sharefs - no - ctfs - /system/contract ctfs - no - objfs - /system/object objfs - no - swap - /tmp tmpfs - yes - /dev/vx/dsk/zonedg/zonelv /dev/vx/rdsk/zonedg/zonelv /zones vxfs 2 yes - /dev/vx/dsk/zonedg/uirgs49lv /dev/vx/rdsk/zonedg/uirgs49lv /zones/uirgs49 vxfs 2 yes - /dev/vx/dsk/zonedg/uirgs50lv /dev/vx/rdsk/zonedg/uirgs50lv /zones/uirgs50 vxfs 2 yes - /dev/vx/dsk/zonedg/uirgs51lv /dev/vx/rdsk/zonedg/uirgs51lv /zones/uirgs51 vxfs 2 yes -