Le site des administrateurs systèmes sous Mac OS X
  Un grand pouvoir implique de grandes responsabilités.



Accueil du site > Dossiers > La gestion des partitions
La gestion des partitions


Comment gérer de manière fiable les partitions sous Mac OS X. mercredi 3 octobre 2007, par Jayce Piel

Depuis la version 10.2, Mac OS X dispose d’un mécanisme particulier et intéressant pour la gestion des partitions. Ce dossier va expliquer pourquoi il faut l’utiliser, comment, et montrer les manipulations pour déplacer sur une autre partition les comptes utilisateurs ou le swap.


Introduction

Depuis la version 10.2, Mac OS X dispose d’un mécanisme particulier et intéressant pour la gestion des partitions. Ce dossier va expliquer pourquoi il faut l’utiliser, comment, et montrer les manipulations pour déplacer sur une autre partition les comptes utilisateurs ou le swap.

Pour les utilisateurs de versions précédentes de Mac OS X, vous pouvez me contacter pour obtenir le kit namedFS.

Fonctionnement de la gestion automatique des partitions

Pour comprendre les risques de l’utilisation du mode de gestion automatique, il faut comprendre comment fonctionne Mac OS X. Il y a deux niveaux pour la gestion des partitions :

  • la reconnaissance et l’identification des périphériques de stockage.
  • le montage des volumes à un point de montage précis.

Le premier point correspond à la création des fichiers de périphériques dans le dossier /dev/. Les disques sont nommés selon leur ordre de chargement. Ainsi, le disque /dev/disk0 est le premier disque chargé au démarrage, le disque /dev/disk1 est le deuxième, etc…

Dans le mode de gestion automatique, le deuxième point correspond à la création du point de montage au nom du volume dans le dossier /Volumes/.

Les risques de la gestion automatique

Le premier problème que l’on peut rencontrer est que le nom du dossier dans /Volumes/ n’est pas forcément toujours le même. (un volume « Données », par exemple, peut, sous certaines conditions être monté sur /Volumes/Données 1 et apparaître tout de même dans le Finder en tant que « Données »). Cela peut se produire quand un dossier du même nom existe déjà dans /Volumes/ (soit parce-qu’un volume du même nom est déjà monté, soit parce-que, suite à un plantage, le dossier n’avait pas été effacé la fois d’avant). À cause de ça, on ne peut pas se baser de manière fiable sur ce point de montage automatique lorsque le chemin d’accès est important (utilisation du volume pour les comptes utilisateurs, pour les fichiers de swap, dans des scripts…).

Il faut donc utiliser le fichier /etc/fstab pour définir un point de montage fixe pour notre volume.

Le problème alors, c’est qu’on ne peut être sûr, lorsque l’on a plusieurs disques, que /dev/disk0 (ou autre) représente toujours le même disque. Pour vérifier ce comportement, voici un essai simple :

  • Ouvrez le Terminal et tapez la commande df. Vous verrez alors la liste des partitions montées.
  • Insérez un CD dans votre lecteur, et refaites df. Notez le nom des partitions relatives au CD (dans la première colonne).
  • Éjectez le CD.
  • Monter une image disque (fichier .dmg ou .img) quelconque.
  • Réinsérer le même CD que précédemment.
  • Refaites un df et constatez que les noms des partitions du CD ont changé.

Avec plusieurs disques, l’ordre de chargement n’est absolument pas déterministe. Donc, les noms que l’on donne dans le fichier /etc/fstab ne sont pas forcément les bons noms. Cela peut amener à des gros problèmes où on se retrouve avec des points de montage qui n’ont pas les bonnes partitions montées.

On ne peut donc utiliser les noms de périphériques de la forme /dev/diskXsY dans fstab car ils peuvent changer d’un démarrage à l’autre.

Les solutions proposées par Mac OS X

On peut mettre dans le fichier /etc/fstab des informations complémentaires. Ceci est géré par la commande autodiskmount dans Mac OS X 10.2 et par le démon diskarbitrationd dans Mac OS X 10.3 et 10.4. On peut ainsi définir des partitions en fonction de leur nom de volume ou en fonction d’un identifiant unique de partition.

Il faut créer un fichier /etc/fstab avec votre éditeur de texte préféré (VI, TextEdit ou BBEdit par exemple). Attention toutefois si vous utilisez TextEdit à bien sauver votre fichier au format texte et non au format RTF. Ce fichier contient les descriptions des points de montage des partitions.

Il faudra ensuite vérifier que ce fichier appartient bien à l’utilisateur « system ». Pour cela, dans le Finder, dans le menu « Aller » sélectionnez l’élément « Aller au dossier… » et tapez /etc. Dans la fenêtre qui s’ouvre, sélectionnez le fichier fstab et affichez la fenêtre d’informations sur le fichier (raccourci clavier Pomme-i). Dans cette fenêtre, cliquez sur le triangle de la ligne « Possesseur et autorisations : ». Si le possesseur n’est pas « system », vous devez le changer. Pour changer le possesseur, il suffit de déverrouiller le cadenas situé à côté du nom du possesseur en cliquant dessus. (vous pouvez aussi le faire par la commande sudo chown root /etc/fstab)

Le plus simple : le tag LABEL

Le tag LABEL permet de définir le point de montage en fonction du nom de volume. Cela est utile pour des disques de sauvegarde par exemple. En effet, si vous avez plusieurs disques de sauvegarde que vous inter-changez de temps en temps, il faut, pour simplifier les scripts de sauvegarde, que tous les disques de sauvegardes soient montés sur le même point de montage. Vous nommerez alors vos disques « Sauvegarde » et vous mettrez le tag label sur le nom « Sauvegarde ».

Le tag LABEL se présente dans le fichier fstab sous la forme suivante :

LABEL=NomVolume        PointDeMontage        type        mode

  • Les espaces sont en fait des tabulations.
  • NomVolume est le nom de volume de la partition (qui apparaît dans le Finder)
  • PointDeMontage est le dossier où vous voulez monter la partition
  • type est le type de la partition (hfs ou ufs)
  • mode est le mode de montage de la partition (rw pour read/write, ro pour read-only)

Le plus fiable : le tag UUID

Il se peut que vous ayez plusieurs volumes de même nom. Dans ce cas là, la solution proposée ci-dessus ne marchera pas comme prévue. Apple y a pensé et propose une solution : un identifiant unique de partition, l’UUID (Universal Unique IDentifier).

Cet identifiant est unique pour chaque partition et il est donc impossible qu’il puisse y avoir un problème pour trouver la partition voulue.

Voici la démarche à suivre pour définir un UUID :

  • trouver l’identifiant temporaire de la partition choisie
  • générer un UUID pour la partition choisie si besoin
  • lire l’UUID généré pour cette partition
  • modifier le fichier /etc/fstab
trouver l’identifiant temporaire de la partition choisie

C’est en fait le nom de la forme diskXsY. Pour cela, dans le Terminal, tapez la commande /usr/sbin/disktool -l. Le premier champ entre parenthèses indique l’identifiant temporaire de la partition, le deuxième indique le point de montage actuel de la partition, le troisième indique le type de la partition et le dernier le nom du volume :

Alumousse:~> disktool -l  
***Disk Appeared ('disk0',Mountpoint = '', fsType = '', volName = '')
***Disk Appeared ('disk0s1',Mountpoint = '', fsType = '', volName = '')
***Disk Appeared ('disk0s3',Mountpoint = '/Volumes/Data', fsType = 'ufs', volName = 'Data')
***Disk Appeared ('disk0s5',Mountpoint = '/', fsType = 'hfs', volName = 'Tiger')
***Disk Appeared ('disk0s7',Mountpoint = '/Volumes/Archives', fsType = 'hfs', volName = 'Archives')
***Disk Appeared ('disk0s9',Mountpoint = '/Lynx', fsType = 'hfs', volName = 'Docs')

L’identifiant du volume Docs est donc disk0s9, et son type est HFS (HFS+, en fait, mais disktool ne fait pas la différence). Par contre, le volume Data (disk0s3) est de type UFS.

générer un UUID pour la partition choisie

Pour Mac OS X 10.2 seulement (depuis Mac OS X 10.3, toutes les partitions ont automatiquement un UUID d’attribué, vous pouvez cependant l’écraser et en créer un nouveau en suivant cette même procédure).

Pour pouvoir générer un UUID, il faut que la partition ne soit pas utilisée. Nous allons donc « démonter » la partition. Attention, pour pouvoir démonter un volume, aucun fichier ni aucune application ne doit être ouvert sur ce volume. La seule manière fiable est de le faire depuis le Terminal : sudo diskutil unmount <i>id_partition</i>

Alumousse:~> sudo diskutil unmount disk0s9
Volume disk0s9 unmounted
Alumousse:~> sudo diskutil unmount disk0s3
Volume disk0s16 unmounted

Depuis Mac OS X 10.3, vous pouvez également le faire avec « Utilitaire de Disque », mais il a la fâcheuse manie d’essayer de démonter tous les volumes d’un disque lorsqu’on veut en démonter qu’un seul.

Pour générer un UUID, la commande diffère suivant le type de partition. Pour une partition de type HFS+, la commande à lancer est hfs.util tandis que pour une partition UFS, c’est ufs.util. L’option à utiliser est -s.

Alumousse:~> sudo /System/Library/Filesystems/hfs.fs/hfs.util -s disk0s9
Alumousse:~> sudo /System/Library/Filesystems/ufs.fs/ufs.util -s disk0s3
lire l’UUID pour la partition

Les commandes à utiliser pour lire l’UUID sont hfs.util et ufs.util, avec l’option -k. Cependant, l’affichage de l’UUID ne se termine pas par un retour à la ligne, il est donc préférable de faire afficher une ligne vide après la commande (en rajoutant «  ;echo » à la fin de la ligne) :

Alumousse:~> sudo /System/Library/Filesystems/hfs.fs/hfs.util -k disk0s9 ;echo
864E0B743DB37A48
Alumousse:~> sudo /System/Library/Filesystems/ufs.fs/ufs.util -k disk0s3 ;echo
A589585BF578DEBB

Notez l’UUID en faisant attention à ne pas vous tromper.

modifier le fichier /etc/fstab

Le tag UUID se présente dans le fichier fstab sous la forme suivante :

UUID=NumeroUUID        PointDeMontage        type        mode

  • Les espaces sont en fait des tabulations.
  • NumeroUUID est l’UUID noté plus haut
  • PointDeMontage est le dossier où vous voulez monter la partition
  • type est le type de la partition (hfs ou ufs)
  • mode est le mode de montage de la partition (rw pour read/write, ro pour read-only)

Un redémarrage vous permettra de vérifier que les montages sont corrects.

Gérer une partition de swap

Avant tout, je tiens à rappeler quelques points. La première, c’est qu’il n’est pas possible, sous Mac OS X, de gérer une partition de swap proprement dite, mais uniquement une partition dédiée aux fichiers de swap. L’intérêt de déplacer le fichier de swap sur une autre partition est limité et cela reste risqué. Risqué parce qu’on court toujours le risque de sous-estimer la taille de la partition. Ensuite, il y a un intérêt à avoir les fichiers de swap sur une partition dédiée que si cette partition se trouve sur un autre disque que le disque système et que le disque de données, et que ce disque est au moins aussi rapide que le disque système.

Si vous êtes vraiment sûr de vouloir déporter le fichier de swap, il faut savoir que les disques ne sont montés qu’après l’activation de la mémoire virtuelle car ils ne sont montés qu’au lancement de autodiskmount ou diskarbitrationd. En effet, même si les pages man de fstab et de mount disent que mount devrait gérer le fichier fstab correctement, depuis Mac OS X 10.2, Apple n’a toujours pas mis à jour mount pour qu’il gère les tags LABEL et UUID.

Il existe des solutions de contournement, mais il est peu fiable de les utiliser car les modifications que l’on doit faire dans le fichier /etc/rc peuvent être effacées lors d’une mise à jour système (et créer des situations ou le swap crée un fichier sur une partition et le modifie sur une autre…….). La seule solution fiable serait de faire un StartupItem qui lancerait le swap et qui vérifierait, en modifiant si nécessaire le fichier /etc/rc pour que celui-ci ne lance pas lui-même le swap (en forçant un redémarrage en cas de modification automatique du fichier /etc/rc). Étant donné l’intérêt tout de même limité du swap déporté, je ne fournis pas ici de StartupItem pour faire ceci, mais je peux aider ceux qui sont intéressés à en écrire un.

Pour ceux qui veulent absolument déporter le swap sur une autre partition et ne pas tenter de faire un StartupItem, voici les solutions de contournement pour Mac OS X 10.2 et 10.3 (je n’ai pas trouvé de moyen simple autre que le startupitem pour le 10.4) :

Gérer le swap avec Mac OS X 10.2

Il suffit de modifier le fichier /etc/rc pour faire appel à autodiskmount. Commencez par faire une copie de sauvegarde du fichier : sudo cp /etc/rc /etc/rc.bak Ce qui vous permettra de revenir à un état normal en faisant l’opération inverse à celle décrite ci-dessous si vous rencontrez des problèmes. Ensuite, ouvrez le fichier /etc/rc dans votre éditeur de texte favori (attention, ce fichier doit être édité avec les droits root). Cherchez les lignes commençant par mount -vat. Après ce bloc de 4 lignes, juste après la ligne commençant par mkdir, insérez une ligne contenant uniquement /sbin/autodiskmount -va :

...
mount -vat hfs
mount -vat ufs
mount -t fdesc -o union stdin /dev
mkdir -p -m 0555 /.vol && chmod 0555 /.vol && mount_volfs /.vol

/sbin/autodiskmount -va
...

Une fois la modification effectuée, vous pouvez redémarrer.

Gérer le swap avec Mac OS X 10.3

Il suffit également de modifier le fichier /etc/rc. Commencez par faire une copie de sauvegarde du fichier : sudo cp /etc/rc /etc/rc.bak Ce qui vous permettra de revenir à un état normal en faisant l’opération inverse à celle décrite ci-dessous si vous rencontrez des problèmes. Ensuite, il faut rajouter les lignes suivantes juste avant le lancement de la mémoire virtuelle :

result=`grep -v "^#" /etc/fstab |grep "${swapdir}"`
if [ "${result}RES" != "RES" ]
then
 let i=12
 while [ $i -ne 0 ]
 do
   mount |grep "${swapdir}"
   if [ $? -eq 0 ]
   then
     break
   fi
   echo "Waiting for mounted swap directory... ($i)"
   sleep 5
   let i=i-1
 done
 if [ $i -eq 0 ]
 then
   echo "WARNING : ${swapdir} was not mounted"
 fi
fi

Vous pouvez ajouter ces lignes soit avec votre éditeur de texte favori (attention, ce fichier doit être édité avec les droits root, consultez l’article)

Après, vous pouvez redémarrer…

Voici une explication du fonctionnement de ces lignes. Si un montage de $swapdir est défini dans le fichier fstab, toutes les 5 secondes pendant une minute (12 fois 5s), on regarde si le montage est effectué et on attend si ce n’est pas le cas. Au bout d’une minute, le démarrage continue sans attendre le montage, ce qui permet d’éviter de bloquer le démarrage si la partition n’est pas disponible. Si vous avez beaucoup de volumes non journalisés et que 1mn ne suffit pas (ce qui devrait être très rare), vous pouvez augmenter la valeur de i pour mettre un chiffre supérieur à 12.

Cacher le volume dans le Finder

Si vous voulez que le volume correspondant à la partition n’apparaisse pas dans le Finder, il faut modifier les attributs du dossier racine du volume pour le rendre invisible en utilisant les commandes SetFile et GetFileInfo (livrées avec les outils développeurs). Tapez la commande suivante : sudo /Developer/Tools/SetFile -a V /point/de/montage

Déporter les dossiers utilisateur

Déplacer les dossiers utilisateurs est beaucoup plus utile, et donc plus courant que le déplacement de la mémoire virtuelle. Cependant, il existe plusieurs manière de la faire, plus ou moins simples. Dans tous les cas, il est fortement recommandé d’utiliser la méthode UUID pour faire le montage de la partition.

Sous Mac OS X Server, personnellement, je préfère laisser les comptes locaux (administrateurs) du serveur sur la partition système à leur emplacement standard (/Users/) et créer un dossier indépendant (par exemple /UsersData/) qui sera défini comme point de montage pour le volume contenant les comptes utilisateurs. Il n’y a aucune difficulté particulière à cela, il faudra juste penser à partager ce « dossier » une fois le montage effectué et sélectionner ce point de partage lors de la création des comptes dans Workgroup Manager.

Sous Mac OS X non serveur, il y a plusieurs possibilités, en fonction de si l’on veut déplacer uniquement un compte ou l’ensemble des comptes actuels et futurs. Avant tout, il faut décider du point de montage de la partition contenant le ou les comptes utilisateurs. Si vous souhaitez que l’ensemble des comptes utilisateurs soient sur la nouvelle partition, le plus simple est alors de faire de /Users le point de montage, mais cela implique de faire quelques manipulations que je vais détailler plus bas. Si c’est juste quelques comptes que vous voulez déporter sur une autre partition, il faudra alors juste créer un dossier indépendant (par exemple /UsersData/) et le définir dans fstab comme point de montage de votre partition.

Déplacer tous les comptes utilisateurs sur un autre volume (Mac OS X Client)

Pour déplacer tous les comptes actuels sur un autre volume et s’assurer que tous les comptes futurs y seront également créés, le plus simple est d’utiliser le dossier /Users (qui contient les comptes utilisateurs sur le disque système) comme point de montage.

Pour cela, il faut d’abord copier tout le contenu du dossier sur la partition définie (utiliser par exemple ditto pour le faire) :

sudo ditto -rsrc /Users /Volume/NomPartition/

Attention, il est préférable de quitter tout les applications avant de faire cette copie. En effet, si, par exemple, votre logiciel de messagerie est lancé pendant cette copie, vous n’aurez pas une copie à jour de votre base de messagerie…

Une fois la copie effectuée, modifiez le fichier fstab en utilisant le tag UUID pour définir le point de montage /Users pour votre partition puis, tapez les commandes suivantes :

sudo mv /Users /Users.bak
sudo mkdir /Users
sudo chown root:admin /Users
sudo chmod 1775 /Users
sudo shutdown -r now

Cela déplace le dossier utilisateurs actuel dans une copie de sauvegarde, recrée le point de montage à l’identique et redémarre.

Une fois que vous êtes sûr que tout va bien, vous pouvez effacer le dossier /Users.bak .

Déplacer un seul compte sur un autre volume (Mac OS X Client)

Il existe, comme toujours, de nombreuses manières de faire, la bonne et les autres. Même si ce n’est pas la meilleure solution, une manière simple de faire est de déplacer le dossier de l’utilisateur sur l’autre volume puis de faire un lien symbolique (on considère que le point de montage de la partition est /UsersData) :

sudo mv /Users/toto /UsersData/toto
sudo ln -s /UsersData/toto /Users

Cette solution peut être utilisée en attendant de le faire de manière propre.

Pour le faire de manière propre, il faudrait indiquer au système que le répertoire de l’utilisateur n’est plus au même endroit. L’article Déplacer le répertoire de départ d’un utilisateur sur une autre partition détaille les manipulations à faire pour cela.


[ Haut ] Enregistrer au format PDF

Creative Commons License

Cette création est mise à disposition sous un contrat Creative Commons.




Recommandez ce site à un ami :

Votre Prénom : E-mail de votre ami :

Valid XHTML 1.0 Transitional

FORUM DE L'ARTICLE :



7 Messages de forum
La gestion des partitions

15 octobre 2007 12:41, par erion

Bonjour,

pourquoi la solution du ln n’est pas viable ? Merci :-)


La gestion des partitions

15 octobre 2007 14:22, par Jayce Piel
Si c’est le ln pour redéfinir le dossier des comptes utilisateurs, je n’ai pas dit que ce n’était pas viable, j’ai dit que ce n’était pas propre. Personnellement, je préfère utiliser les liens symboliques pour des raccourcis, par pour des chemins complets. Un exemple, un bête rm efface un lien symbolique, mais pas un répertoire non vide. Dans notre cas, si on effaçait le lien par erreur, le système serait complètement perdu car il ne retrouverait pas ses petits, le chemin « officiel » du répertoire utilisateur passant par ce lien.
La gestion des partitions

31 octobre 2007 13:58, par Jayce Piel

Pour la gestion du swap sur Leopard…

Comme pour le 10.4, il n’y a pas de manière simple de s’assurer sous 10.5 que les disques sont bien montés avant le lancement de la mémoire virtuelle. En fait, sous 10.5, il n’y a même plus de fichier /etc/rc… Il reste donc la solution du StartupItem qui désactiverait le LaunchDaemon dynamic_pager et le lancerait à la main une fois les disques montés. Ce StartupItem devrait déplacer le fichier /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist et redémarrer (ou tuer dynamic_pager) si il est présent, et faire une boucle pour attendre que le volume soit monté si le fichier est déjà déplacé.


La gestion des partitions

19 décembre 2007 20:02, par fifi_fifi

… et le contenu du Startupitems ressemblerait à quoi ?

Désolé, mais bien que j’ai parfaitement compris ce qu’il faut faire, je suis incapable créer le fichier en question. Merci de « m’aider »

Philippe

Petites erreurs… en tout cas avec MacOSX 10.4

20 mars 2010 16:46, par zeroheure

Sur un poste de travail MacOSX 10.4 (donc non serveur) il y a des petites différences. Il s’agit peut-être d’erreurs dans l’article ?

hfs.util -k est censé donner un UUID (man hfs.util l’indique) mais dans la pratique ce qu’on obtient n’est pas l’UUID - ou alors il faut encore le transformer. Par contre en passant par l’utilitaire « utilitaire disque » on obtient le bon.

ditto -rsrc /Users/* /Volume/nomPartition/ copie le contenu des dossiers contenus dans /Users vers /Volume/nomPartition, et non le contenu du dossier /Users. La bonne commande est ditto -rsrc /Users/ /Volume/nomPartition/

Sinon, excellent article, merci beaucoup.

Y-a-t-il moyen de masquer le volume sans passer par les outils dévelopeurs ?


Petites erreurs… en tout cas avec MacOSX 10.4

20 mars 2010 17:58, par Jayce Piel

Ce n’est effectivement pas le même UUID qui s’affiche dans les deux, mais je confirme que c’est bien celui affiché par hfs.util qui est utilisé dans le fstab. En cherchant un peu, je vois que l’utilitaire de disque donne la même information que l’utilitaire diskutil avec l’option -info… Normalement, le fait de recréer un UUID avec hfs.util devrait mettre à jour l’information affichée avec diskutil (après un reboot), mais ça ne semble pas être le cas en 10.4.

En tout cas, pour l’utilisation avec fstab, se fier à ce que dit hfs.util…

Pour ditto, en revanche, il y a bien une erreur… Trop l’habitude de faire du rsync… :-) Je corrige de suite…


Petites erreurs… en tout cas avec MacOSX 10.4

20 mars 2010 21:31, par zeroheure

Merci pour la réponse rapide !

En tout cas, pour l’utilisation avec fstab, se fier à ce que dit hfs.util

Justement non, chez moi ça ne marche qu’avec l’UUID de l’utilitaire de disque. Peut-être parce que je n’ai pas regénéré l’UUID ?

Et puisque vous metttez à jour l’article, pour ce petit paragraphe :

sudo mv /Users /Users.bak
sudo mkdir /Users
…
je suggère d’expliquer qu’on peut le faire sans quitter l’interface graphique. Parce que quand on vient d’autres Unix c’est déroutant.