Partage des fichiers d'echange entre LINUX et Ms-Windows
 H. Peter Anvin  [email protected]
 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 [email protected]

 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 !).