Partage des fichiers d'echange entre LINUX et Ms-Windows H. Peter Anvin hpa@yggdrasil.com v 1.3, 19 Juin 1995 Copyright (c) 1994, 1995 H. Peter Anvin. Toute remarque ou commen- taire concernant la traduction de ce HOWTO peuvent etre envoyees a la personne concernee. Traduction de Pierre Tane tanep@usa.net 11.. IInnttrroodduuccttiioonn Nombreux sont ceux qui utilisent conjointement Linux et Ms-Windows. La possibilite de le faire tient une place importante dans la 'revolution Linux'. En effet, cela permet aux gens d'experimenter (et d'en devenir accro) Linux tout en etant toujours capables d'executer leurs programmes commerciaux. Comme Linux et Ms-Windows utilisent un systeme de memoire virtuelle sous la forme d'un fichier d'echange sur le disque dur, une question frequemment postee a comp.os.linux.setup etait 'Comment partager le fichier d'echange de maniere a minimiser l'espace disque necessaire ?'. Il y a diverses methodes pour partager l'espace d'echange, celle decrite ici etant sans doute la plus compliquee tout en etant la seule parmi celles que j'ai rencontrees qui autorise les performances maximales pour les deux environnements sans risque de planter une partition du disque. NOTE : si vous aviez une version precedente de ce document et que vous ayez eu des problemes avec la recuperation de votre fichier d'echange (Windows disant que celui-ci est corrompu), essayez la version legerement modifiee du script shutdown incluse dans cette version. 22.. CCee ddoonntt vvoouuss aavveezz bbeessooiinn Il y a des prerequis avant d'entamer la procedure decrite ci-dessous. Je vous recommande fortement de remplir strictement les conditions enoncees sous peine de problemes serieux avec les anciennes versions. +o MS-DOS 5.0 ou plus +o MS-Windows 3.1 ou plus +o Un fichier shutdown ou init qui sache lancer un programme au moment du shutdown (comme le paquetage SysVinit-2.50, qui peut-etre obtenu sur sunsite.unc.edu dans /pub/Linux/system/Daemons. Presque toutes les distributions utilisent ce paquetage pour init). NdT : la date de ce document etant ancienne, cela n'est peut-etre plus le cas. 33.. LLaa pprroocceedduurree +o Lancez le DOS. Creez une partition DOS (a l'aide de FDISK) de taille egale a la taille que vous voulez pour votre fichier d'echange. Il va lui etre assigne une lettre par laquelle vous allez remplacer X a chaque fois que la procedure fait mention d'une commande telle que 'LABEL X: ' ou 'COPY FOO X:DUMMY.DAT' +o Formatez cette partition en utilisant la commande FORMAT du DOS : ______________________________________________________________________ FORMAT X: ______________________________________________________________________ +o Changez le nom de volume de cette partition pour 'SWAP SPACE' a l'aide de la commande DOS LABEL. Verifiez ensuite avec la commande DIR. Veillez a faire l'operation en deux temps car certaines versions de FORMAT n'ecrivent pas le nom de volume dans le secteur de demarrage comme elles le devraient. (Note : certaines personnes m'ont ecrit pour me dire que le nom de voume est stocke dans le repertoire racine. Cela est vrai mais depuis DOS 5.0 au moins, il figure aussi dans le secteur de demarrage.) ______________________________________________________________________ LABEL X: DIR X: ______________________________________________________________________ +o Demarrez Windows. Allez dans le Panneau de Configuration, selectionnez '386 Enhanced' et creez un fichier d'echange permanent sur le lecteur X : de la taille maximale (Windows vous informera de la taille maximale). Window se plaindra peut-etre du fait qu'il ne va pas utiliser un fichier d'echange aussi gros. Ignorez le message et creez tout de meme le fichier. +o Sortez de Windows +o Demarrez Linux et loggez vous en tant que root +o Utilisez la commande fdisk pour trouver le nom de la partition et sa taille en blocks. Creez un lien symbolique de /dev/winswap vers cette partition. Si la partition est /dev/hda7 alors vous taperez : ______________________________________________________________________ ln -s /dev/hda7 /dev/winswap ______________________________________________________________________ (Note pour les puristes : Veuillez etablir un lien symbolique. Le nom de cette partition va se retrouver dans de nombreux fichiers de con- figuration et des incoherences seraient fatales.) +o Ce qui suit est un fichier binaire encode par uuencode qui analyse la partition et en extrait des informations particulieres. Decodez le fichier par uudecode, gunzip-pez le et executez le par : ______________________________________________________________________ msinfo /dev/winswap ______________________________________________________________________ begin 755 msinfo.gz M'XL(`$$YNRT"`Y557TQ;51@_MW]HZ0AM'"$U.28W([..>84%1%D2QH>',9*M2S&VC); V=FV]T*;WWBD+1I)K'YH;DOJF#YH80GPR^J""D"R8K('MS2;#Q*SM%Y,EP&592A$V:[?.;?M"F P/?DG/G^_[?7_Z_3G7PL313TT(?8P0<J"CI':8M$5H^#:=5<KT^MQ`^UAQ1O*QUH0<.]B 7S/FC[U!98Y;))]<*N^AG"^LB((J%EMAFIM[A9U0O`;%:*7N#[L%G!_IH34V(J,WUZ.CK%O6I#N 4DTE,E144Q7T)M>]_PX\M<3@!`'ZZ26[`I7A.F!%$;JK.;21`!#.\,5A/CK)\=B3FL:3F8PH M<#$QDSO91Q%^>L%"Z@KW*"NR3;""5SN,A?'NI[0=P0Q=#[P&&$5@3UNZ3VWM=(V `NYQ/)6CX)DC2F`KD!&C/!:R7"Q%]L6`8'D+=]8T*^$V8@RR\;5\P9(M^;\&T:F]E`Q`EI ,_6YHCZBT#BJ09M0VV9!:XVKLF]0NX%'Z4R];\W](3A%JMI:`_&12!>@33QC0S'V8]?O5+0 `;3UC23K)!"?@97N8R#:29MF/>R)PI>UJF)MK%/4QR39OSJE8,8MHZ)UC#`?1ZX'N!ZU`L'X ;@.?X["C<1DUT%,9QW32C''M"<98PQR#8#=(L'>96NQWR/4W1@>H3\'!OC3,MMN_"[ ,=A1OVK^XEH($[$S^HMY@28=MB78$/`=8)(L=\P*$5*I_LS@)_G7!=\Z9V@F"``Y$XQM[T!T>(W HNUM/T9CH)YIZI("&9ZK32AR=DTN/QNZ."&7?27H_<(=_^=Q"U1N3Y.>!E`$BY(M ;(4ZG)/[\_0F_54HY7\5[<!33)\2M%:Y(.THX_N%K?%2L9&(O=4>8F^@IV9(M,<HE DU:17T'23M)GA#ANW<F'J5]>6!G2;BU+YN)@<RL.JBIFD4[:<###UGMO3Z77WO?L?O +@@G\+(<"X&QT"&#_N7@_\2;JGAEF&U1`JR#ZCD/Z]7HJ'ZHM09_JNAZGJ^N?X5 &J#UYJW>4#"7/#D,0/GG`0ZI@__`;6>]K!>C[<GDM31/IQP>:!B]D?DT,* <;Y6=9Y]3:P][^W`?+>8F(1!*ZY7B1:BN=@D_XY9?0IM'?ZT0=V@BBWIIV$47#Y@7,9Q> 0<*=7;NMWNS2>9#_X3V)8()?A$;!`ALRWM#&\%RO_^@9F6TP<]'M8J@'AFA"[JM]0 (WCQ!`[.826!F&A@HG4JWU5R_KKL&M9GNQF$;J[?NZ\YUZ?B].C,OEWI*\94J`:6LB?U,R K^2.([0QRQK(W!D2[K5MM,G>&0B7A'K03F"'17*&L#9XU@+U2L9K4GCIG(K(NE:SM, >SM,?;X,T:&U6,MT./E%NAUTNE_$,^E(A0M!B7K[D'>X6'\FC25Q3W=+V3YLR^CXJW.S 0>#54*#M#ZE^AI+N35^_>![U4!?@VQ%ET<L!BC>MC5"\GH>"T6'4/2NS>((N 0,DT>_9K6^!S%65KRS`,`,UVB43\!]-BKG]B`<``#5"` end Prenez en note le nombre apres 'Total special sectors' et verifiez que le nom du volume est 'SWAP SPACE'. Si ce n'est pas le cas, rebootez DOS et renommez le par LABEL. Si ca ne marche toujours pas, veuillez me communiquer la version de DOS que vous avez et j'essaierai de vous aider. +o (Etape optionnelle) Windows laissera peut-etre de la place sur la partition meme si on lui indique de ne pas le faire. N'essayez pas d'occuper cet espace car il sera efface a chaque lancement de Linux. Si vous voulez eviter de l'utiliser accidentellement (et de perdre des donnees), vous pouvez creer un fichier qui remplira l'espace laisse vacant avec : ______________________________________________________________________ mkdir /mnt mount -t msdos /dev/winswap /mnt dd if=/dev/zero of=/mnt/dummy.fil umount /mnt ______________________________________________________________________ La commande dd renverra 'No space left on device'. C'est exactement ce que vous vouliez. +o Verifiez le nom du fichier shutdown. Pour SysVinit, c'est le fichier mentionne dans la ligne suivante de /etc/inittab ; veuillez la rajouter si elle n'y est pas. ______________________________________________________________________ # Runlevel 0 means shut down the system l0:0:wait:/etc/brc ______________________________________________________________________ Pour le reste de la procedure, je considererai que le nom du fichier est /etc/brc. +o Tapez : ______________________________________________________________________ dd if=/dev/winswap bs=512 count=XXX | gzip -9 > /etc/winswap.gz ______________________________________________________________________ ou XXX est remplace par le nombre 'Total special sectors'. +o Ajoutez le code suivant a votre fichier /etc/rc (ou le nom que init lui donne), juste avant la commande 'swapon -a' (s'il n'y a pas cette commande, ajoutez la a votre fichier /etc/rc avant les commandes mount). Si vous avez un repertoire /etc/rc.d, le fichier dans lequel vous introduirez ce qui precede devrait s'appeler '/etc/rc.d/rc.S' ou '/etc/rc.d/rc.boot'. Si swapon est dans /etc, remplacez /sbin/swapon par /etc/swapon. S'il est dans /bin, remplacez-le par /bin/swapon. Faites la meme chose pour mkswap. Remplacez XXXXX par la taille de votre partition en blocs telle qu'elle vous fut donnee par fdisk. ______________________________________________________________________ ---[BEGIN CODE SEGMENT]--- # # Verify and initialize swap space # echo -n 'Verifying swap space... ' if [ "`/bin/dd 2>/dev/null if=/dev/winswap bs=1 count=10 skip=4086`" \ = 'SWAP-SPACE' ]; then echo 'Linux signature found' /sbin/swapon /dev/winswap elif [ "`/bin/dd 2>/dev/null if=/dev/winswap bs=1 count=11 skip=43`" \ = 'SWAP SPACE ' ]; then echo 'DOS signature found' /sbin/mkswap /dev/winswap XXXXX /sbin/swapon /dev/winswap else echo 'No signature found' echo 'ERROR: Will not swap' fi ---[END CODE SEGMENT]--- ______________________________________________________________________ +o Ajoutez la section de code suivante a votre fichier /etc/brc (quelque soit son nom, a savoir /etc/rc.d/rc.0 ou /etc/rc.d/rc.halt si vous avez un repertoire /etc/rc.d). Ajoutez le apres toute commande qui necessite que le swap soit en place. ______________________________________________________________________ ---[BEGIN CODE SEGMENT]--- # # Terminate swapping and restore DOS/Windows swap info # /sbin/swapoff /dev/winswap if [ "`/bin/dd 2>/dev/null if=/dev/winswap bs=1 count=10 skip=4086`" \ = 'SWAP-SPACE' ]; then echo 'Restoring DOS/Windows swap info' /bin/zcat /etc/winswap.gz > /dev/winswap else echo 'ERROR: /dev/winswap lacks swap signature, skipping restore' fi ---[END CODE SEGMENT]--- ______________________________________________________________________ +o Relancez Linux. Vous devriez normalement utiliser la partition creee comme partition d'echange. 44.. QQuueellqquueess rreemmaarrqquueess +o Pas besoin de rajouter votre /dev/winswap dans le fichier /etc/fstab, il est d'ailleurs preferable de ne pas le faire (sauf peut-etre en commentaire). +o Si votre session Linux se plante ou fonctionne sans lancer /etc/brc, vous aurez a rebooter et a sortir de Linux avant que le swap ne marche sous Windows. Il est egalement possible de faire FORMAT X : et de recreer le fichier d'echange de Windows. La seule maniere de contourner ce probleme serait de mettre un equivalent des commandes de /etc/brc dans le fichier AUTOEXEC.BAT du DOS (malheureusement, je ne connais aucune maniere de le faire sous DOS !). +o Si le FDISK du DOS reconnait la partition comme etant 'logical DOS drive', elle a un numero de 5 ou plus (comme dans /dev/hda5). Ce n'est pas la partition denommee 'extended' qui a un numero de 4 ou moins ! Si votre fdisk de Linux n'affiche pas les partitions logiques, votre fdisk Linux est endommage (Slackware 2.2, par exemple comprenait un fdisk endommage). Vous pouvez essayer cfdisk si vous l'avez dans votre distribution ou vous devrez recuperer une version de fdisk qui fonctionne. +o Si vous obtenez une exception float en lancant msinfo, vous l'avez surement execute sur la mauvaise partition. Voir la remarque ci- dessus. +o Veuillez ne pas m'envoyer de mail a moins que vous n'ayez verifie et reverifie que vous avez recopie vos scripts correctement. Plus de la moitie des problemes concernant ce Mini-HOWTO etaient dus a des erreurs typographiques dans le recopiage des scripts. (utilisez le copier-coller si vous le pouvez !).