OVH Cloud OVH Cloud

[Q : Tiger] Comment faire pour que les swapfiles soient sur un autre disque ?

30 réponses
Avatar
blanc
Bonjour à tous.

Me voici rentré de vacances en espérant pour tous que vous en avez passé
d'excellentes.

Je rappelle ma config : G4 QS 933 avec 768 Mo de RAM (ça n'a pas changé)
et Tiger 10.4.7 (ça c'est tout nouveau pour moi :-)).

J'avais posé la même question (voir titre) en juin 2005, mais j'étais
alors sous Panther, et la solution que j'avais obtenu m'avais satisfait
jusqu'à maintenant... où je viens de passer sous Tiger ;-)

voir le fil correspondant :
<http://groups.google.fr/group/fr.comp.os.mac-os.x/browse_frm/thread/e4d
ffe5800ceb93f/f3bf8d71975f28a5?lnk=gst&q=tiger+swapfile&rnum=2#f3bf8d719
75f28a5>

En fait il semblerait que sous Tiger le script /etc/rc ne soit plus
exécuté.

Quelqu'un aurait-il une solution, car c'est un gros problème pour moi,
je n'ai que le strict minimum de dispo sur ma partition système, et je
n'ai pas envie de tout repartitionner...

JPaul.
--
/==/==\\-\ Jean-Paul BLANC
/ /--/--//\\ quelque-part (somewhere)
|/| L |\\\ en (in)
\/|| = |||\\\ FRANCE

10 réponses

1 2 3
Avatar
blanc
François Jacquemin wrote:

Oui, parce que c'est bash le shell par défaut. Mais rien ne t'empêche de
changer ça et de revenir au précédent.


???

Le shell d'exécution d'un script n'est pas forcément le même que le
login shell. Il est indiqué dans la première ligne du script :

#!/bin/sh
# Copyright 1997-2004 Apple Computer, Inc.

Dans le cas de /etc/rc c'est donc /bin/sh


JPaul.
--
/==/==- Jean-Paul BLANC
/ /--/--// quelque-part (somewhere)
|/| L | en (in)
/|| = ||| FRANCE

Avatar
1ternaute
Oui, exactement, il s'avere ;o) que j'avais deja creer une partition nomee
swap.

"JPaul" a écrit dans le message de news:
1hl5wpz.1yy5jtv1rt51vkN%
1ternaute wrote:

Bon, si ca y est, avec du mal, et si je me gourre pas vu que je debute
avec le terminal, j'ai vire "/private/var/vm/swapfile0", j'ai reboote,
il revient pas ;o) et j'ai bien mon nouveau
"/Volumes/swap/vm/swapfile0" avec une l'ancienne valeur de
"/private/var/vm/swapfile0". Par contre :


Tu as fait exactement la modif que tu indique précédemment ?

- je vois pas "|" sur mon clavier( je fais du copier-coller avec
textedit)


option-shift-L

- je vois pas avec le finder swapfile0, mais je le vois au "terminal"


Normal.

JPaul.
--
/==/==- Jean-Paul BLANC
/ /--/--// quelque-part (somewhere)
|/| L | en (in)
/|| = ||| FRANCE



Avatar
blanc
1ternaute wrote:

Oui, exactement, il s'avere ;o) que j'avais deja creé une partition nommée
swap.


Bon je vais revoir ça, bien que je ne crois pas que la création de cette
partition soit nécessaire. En fait j'ai l'impression que mon /etc/rc
n'est pas exécuté, et je ne sais pas pourquoi ...

Merci.
JPaul.

--
/==/==- Jean-Paul BLANC
/ /--/--// quelque-part (somewhere)
|/| L | en (in)
/|| = ||| FRANCE

Avatar
francois.jacquemin
JPaul wrote:

Le shell d'exécution d'un script n'est pas forcément le même que le
login shell. Il est indiqué dans la première ligne du script :

#!/bin/sh
# Copyright 1997-2004 Apple Computer, Inc.

Dans le cas de /etc/rc c'est donc /bin/sh


Oui, autant pour moi, et en fait, son /etc/rc devrait être exécuté,
normalement.
--
F. Jacquemin

Avatar
blanc
Matt wrote:

Bizarre ça.


Oui.

J'ai rapidement matté sur gogole


Pareil et même ça fait bien deux ou trois heures que j'y regarde, ainsi
que dans le man...

et pas de mise à jour pour une quelconque
marche à suivre, donc on peut en déduire que soit tout le monde vit
heureux avec les réglages par défaut de dynamic_pager(8) sur Mac OS X
10.4,


Peut-être après tout ;-)

soit il y une erreur minuscule genre fin de lignes


J'y ai pensé et vérifié, ainsi que les protections :
-rw-r--r-- 1 root wheel 8672 Aug 31 21:20 /etc/rc


qui fout le souk
dans ton /etc/rc


Voici exactement ce que j'ai rajouté,

#----------------------- below inserted locally (jpb 31/8/06)
newswap=/Volumes/Clermont4
oldswapdir=${swapdir}

if [ ! -d ${newswap}/.Trashes ]; then
swapcount=1
ConsoleMessage "Waiting for ${newswap} to mount"
while [ "$swapcount" -le 30 ]; do
sleep 1
if [ -d ${newswap}/.Trashes ]; then
ConsoleMessage "${newswap} mounted after $swapcount seconds"
break
fi
swapcount=`expr $swapcount + 1`
done
fi

if [ -d ${newswap}/.Trashes ]; then
swapdir=${newswap}/var/vm
ConsoleMessage "Using ${newswap} for swapfile"
if [ -f ${oldswapdir}/swapfile0 ]; then
rm -rf ${oldswapdir}/swap*
ConsoleMessage "Removing old swapfiles from ${oldswapdir}"
fi
else
ConsoleMessage "Unable to use ${newswap} for swapfile."
ConsoleMessage "Using then default swapdir : ${oldswapdir}."
fi
#--------------------- above inserted locally (jpb 31/8/06)

juste après les deux lignes :

echo "Starting virtual memory"
swapdir=/private/var/vm

J'ai beau chercher, je ne vois pas, et je ne vois aucun message dans la
console parmi ceux qui sont ci dessus, ni de message indiquant que
qquechose ne va pas du côté de rc ou de launchd.

D'où je me dis que rc n'est plus exécuté. Mais aucune des configs
système de launchd ne parle de dynamic_pager. Pourtant il est bien lancé
(pid 89, premier fils de launchd qui reste vivant) mais avec le swap par
défaut :
PID TT STAT TIME COMMAND
89 ?? Ss 0:00.00 /sbin/dynamic_pager -F
/private/var/vm/swapfile

JPaul.
--
/==/==- Jean-Paul BLANC
/ /--/--// quelque-part (somewhere)
|/| L | en (in)
/|| = ||| FRANCE

Avatar
blanc
François Jacquemin wrote:

JPaul wrote:

Le shell d'exécution d'un script n'est pas forcément le même que le
login shell. Il est indiqué dans la première ligne du script :

#!/bin/sh
# Copyright 1997-2004 Apple Computer, Inc.

Dans le cas de /etc/rc c'est donc /bin/sh



Et j'ajouterai même que c'est en fait celui qui le lance qui choisi : si
c'est launchd, celui-ci peut bien lancer le script avec le shell qu'il
veut.

François Jacquemin wrote:

Oui, autant pour moi, et en fait, son /etc/rc devrait être exécuté,
normalement.


le sien ?..

JPaul.

--
/==/==- Jean-Paul BLANC
/ /--/--// quelque-part (somewhere)
|/| L | en (in)
/|| = ||| FRANCE


Avatar
francois.jacquemin
JPaul wrote:

François Jacquemin wrote:

Oui, autant pour moi, et en fait, son /etc/rc devrait être exécuté,
normalement.


le sien ?..

JPaul.
Re, re, autant pour moi, le tien en fait vu que lui, c'est toi.


--
F. Jacquemin


Avatar
Nicolas.MICHEL
JPaul wrote:

Voici exactement ce que j'ai rajouté,

#----------------------- below inserted locally (jpb 31/8/06)
newswap=/Volumes/Clermont4
oldswapdir=${swapdir}

if [ ! -d ${newswap}/.Trashes ]; then


Si je puis me permettre, ...
ton script m'a l'air correct mais pour trouver un éventuel problème ici
j'insérerais un truc temporaire genre
mount >/tmp/mount.txt


swapcount=1
ConsoleMessage "Waiting for ${newswap} to mount"
^^^^^^^^^


Ce truc se trouve dans /usr/libexec
Tu as modifié le PATH ?
perso je mettrais le chemin complet par sécurité.



--
S'il n'y a pas de solutions, c'est qu'il n'y a pas de problèmes
iChat/AIM : michelnicolas

Avatar
blanc
Nicolas MICHEL wrote:

Si je puis me permettre, ...
ton script m'a l'air correct mais pour trouver un éventuel problème ici
j'insérerais un truc temporaire genre
mount >/tmp/mount.txt


Oui. Bonne idée. Mais je vais esssayer d'abord simplement avec un echo
pour voir si je passe dans le script.



swapcount=1
ConsoleMessage "Waiting for ${newswap} to mount"
^^^^^^^^^


Ce truc se trouve dans /usr/libexec


En effet

Tu as modifié le PATH ?


Non, mais peut-être a-t-il changé du fait du passage à Tiger. Il s'agit
en fait du PATH au moment de l'exec de /etc/rc. Je vais essayer de voir
la valeur qu'il a avec l'echo ci-dessus.

perso je mettrais le chemin complet par sécurité.


Oui. Je l'avais recopié tel quel de l'ancienne version.

Merci de toutes ses idées. Je vais voir ça.

JPaul.


--
/==/==- Jean-Paul BLANC
/ /--/--// quelque-part (somewhere)
|/| L | en (in)
/|| = ||| FRANCE


Avatar
blanc
Nicolas MICHEL wrote:

Si je puis me permettre, ...
ton script m'a l'air correct mais pour trouver un éventuel problème ici
j'insérerais un truc temporaire genre
mount >/tmp/mount.txt


Voilà. J'ai fait avec un echo et effectivement rc est bien exécuté :-)

Tu as modifié le PATH ?


PATH vérifié, il a bien /usr/libexec.

Par contre ConsoleMessage refuse d'être exécuté par un autre que root.
Est-ce la raison ?... (bien que je pense être root quand le script est
exécuté)
Du coup j'ai remplacé par un echo, et tant qu'à faire avec redirection
comme précédemment.

Et j'ai pu ainsi constaté qu'en fait, c'est que mon disque Clermont4
n'était pas encore monté.

J'ai donc augmenté le nombre d'iterations de la boucle (de 30 à 200) et
j'ai effectivement observé une attente de 120 et quelques secondes...
sans que le disque ne se monte ;-(

En fait en mettant quelques tests un peu partout, j'ai constaté que mes
disques secondaires ne se montaient effectivement qu'à la fin de rc
(bien que la commande mount soit plutôt au début), et ceci qquesoit le
nb d'iter. D'où j'en ai déduit que le processus de montage est bloqué
durant l'exécution d'une partie de rc, ce qui n'était pas le cas sous
Panther. Et ceci doit être du au fait que maintenant rc est en fait
interprété par launchd plutôt que par un shell indépendant. :-((((

Je n'ose pas changer l'ordre et mettre le lancement de la vm à la fin.

Du coup j'ai rétabli le rc initial, et je crois que je vais être obligé
de repartitionner mon disque :-(((

A moins que qqun n'ait une autre idée...

En tout cas merci bien à tous ceux qui m'ont répondu.

JPaul.

--
/==/==- Jean-Paul BLANC
/ /--/--// quelque-part (somewhere)
|/| L | en (in)
/|| = ||| FRANCE

1 2 3