Olivier Chapuis À propos de l'auteur : Dans la vie l'auteur fait des mathématiques, en particulier de la logique, de l'algèbre et de l'informatique théorique. Il a découvert Linux que récemment et cela a été pour lui une vraie révélation. Il aime Muriel et son hobby préféré est actuellement la plongée sous-marine. Il aime aussi la Bretagne, la mer, le bateau, le ski et la bonne bouffe. Écrire à l'auteur Sommaire: 1. Introduction 2. Principales étapes 3. Préparatifs et données du problème 4. Reconstruire la partition windows 5. Utiliser la <<nouvelle>> partition 6. Problèmes References |
Il m'est arrivé un jour, environ 2 mois après avoir installé Linux, de vouloir supprimer windows. La raison était simple je ne l'utilisais plus ! J'imagine qu'un certain nombre de débutants sous Linux seront dans mon cas et j'ai écrit ce document pour les aider (les gourous peuvent tout de même le lire pour me conseiller des améliorations). Si vous êtes dans ce cas deux stratégies s'offre à vous.
La première est de réinstaller Linux. L'avantage de cette stratégie est qu'avec un peu d'expérience avec Linux vous ferez de meilleurs choix lors de l'installation, en particulier en ce qui concerne la taille de vos partitions. Son principal désavantage c'est que vous allez tout écraser. Vous pouvez remédier en partie à cela en sauvegardant tout ce qui n'est pas sur votre cédérom d'installation. Mais réinstaller cette sauvegarde peut vous faire perdre du temps et de la sueur.
La deuxième stratégie est tout d'abord de supprimer windows (ce qui est très facile) puis d'utiliser la place disponible pour linux, c.-à.-d. faire du <<repartitionnement>> chose assez délicate et peu documenté. L'avantage de cette méthode c'est que si elle réussie votre système sera <<comme avant>> mais avec plus de place disque. Son deuxième avantage c'est que si elle échoue vous pourrez toujours utiliser la première stratégie. Dans ce document j'explique comment j'ai fait. Bien sur la méthode peut dépendre de votre configuration. En particulier si vous avez un énorme disque dur <<vierge>> j'imagine que l'on peut imaginer une stratégie beaucoup plus sure et qui donne un meilleur résultat. Moi mon système de sauvegarde c'est des disquettes 1,44 Mo. Dans tous les cas j'espère que la stratégie exposée ci-dessous pourra aider un débutant.
Je tiens à remercier Olivier Tharan qui a bien voulu répondre avec quelques détails à un message posté dans fr.col.moderated et qui était une version -1 de ce document. Je remercie aussi Finn Bo Jorgensen et Chmouel Boudjnah pour leur réponse.
- Préparatifs : sauvegarder, consulter et prendre note de certains fichiers importants pour la suite. Lire la doc pour comprendre ce que l'on va faire. (section 3 ci-dessous).
- Supprimer windows (section 4 ci-dessous).
- Repartitionner, le plus délicat (section 5 ci-dessous).
Avant tout sauvegardez l'essentiel. En particulier, les fichiers de configurations et son travail. Je ne dirais rien de plus la dessus.
Une étape préliminaire est de comprendre ce que l'on va faire. Il y a parfois quelques explications sur les commandes et fichiers dans ce qui suit mais c'est très incomplet. Il faut lire les mans ! Ici il s'agit de fdisk, mk2ext, cp (commande pas si stupide), lilo, lilo.conf et fstab (il y a aussi des mans pour certains fichiers de configuration). On trouve des docs très détaillées sur lilo dans le répertoire /usr/doc/lilo-0.20/doc/ (si votre système est bien installé). En particulier il existe un <<user guide>> de 46 pages ! Pour fdisk voir le fichier /usr/doc/util-linux-2.7/README.fdisk très complet aussi. En écrivant ce document j'ai appris l'existence d'un mini-Howto très utile pour ce qui nous concerne : Hard Disk Upgrade Mini How-To (je ne sais pas s'il existe une traduction en français).
Tout d'abord voici ce qu'était ma table de partition :
[olivier@snoopy olivier]# /sbin/fdisk -l (en su) Disk /dev/hda: 128 heads, 63 sectors, 788 cylinders Units = cylinders of 8064 * 512 bytes Device Boot Begin Start End Blocks Id System /dev/hda1 * 1 1 397 1600672+ c Unknown /dev/hda2 398 398 601 822528 83 Linux native /dev/hda3 602 602 627 104832 82 Linux swap /dev/hda4 628 628 788 649152 83 Linux native |
On voit que windows est sur hda1, il n'est pas anormale que fdisk dise <<Unknown>> à propos de la partition FAT32. Mon noyau (à l'époque un 2.0.34) sait gérer ce type de système de fichiers mais cela n'est pas le cas de mon fdisk. A titre indicatif voilà ce que donnait df (avec la partition dos montée).
[olivier@snoopy olivier]# df Filesystem 1024-blocks Used Available Capacity Mounted on /dev/hda2 796065 506992 247947 67% / /dev/hda4 628351 226366 369528 38% /home /dev/hda1 1594456 850420 744036 53% /mnt/dos |
On va avoir à éditer deux fichiers de configurations /etc/fstab et /etc/lilo.conf. Voici à quoi ils ressemblaient.
[olivier@snoopy olivier] less /etc/fstab /dev/hda2 / ext2 defaults 1 1 /dev/hda4 /home ext2 defaults 1 2 /dev/hda3 swap swap defaults 0 0 /dev/fd0 /mnt/floppy ext2 user,noauto 0 0 /dev/cdrom /mnt/cdrom iso9660 user,noauto,ro 0 0 none proc proc defaults 0 0 /dev/hda1 /mnt/dos msdos user,noauto 0 0 |
[olivier@snoopy olivier] less /etc/lilo.conf boot=/dev/hda map=/boot/map install=/boot/boot.b prompt timeout=500 image=/boot/vmlinuz-2.0.34-1 label=linux root=/dev/hda2 read-only other=/dev/hda1 label=dos table=/dev/hda |
À partir de maintenant tout se passe en root. Pour des raisons psychologique je vous conseille de vous loger en root (pas en su dans votre compte). Si vous utilisez vi pour éditer il se peut qu'il faille utiliser w! pour sauver. Dans tous les cas je vous conseille de vérifier que vos modifications ont bien été pris en compte (quitter votre éditeur et regarder le fichier avec less).
On va utiliser les commandes fdisk et mke2fs. Ces commandes agissent sur les partitions d'un disque dur ou de tout autre système de sauvegarde. Il vaut mieux agir avec ces commandes sur des partitions qui ne sont pas montées. Le tout ce fait en trois étapes.
- Si votre partition dos est monté démonter la: umount /mnt/dos.
- On lance fdisk. On change l'identité de hda1: on dit à linux que cette partition sera maintenant une partition Linux native. Cela se fait avec la commande t (t, 1, 83). On regarde : p , la seul chose qui change c'est le Unkown qui devient linux native et le c qui devient 83. On quitte en sauvant: w. On re regarde: fdisk -l. En quittant fdisk j'ai eu le droit à un message d'erreur que voici:
The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks. Re-read table failed with error 16: Périphérique ou ressource occupé.. Reboot your system to ensure the partition table is updated. |
Ce message est à mon avis normal et inoffensif: je n'ai pas redémarré.
- Formater: mke2fs /dev/hda1. Plein de chiffres apparaissent puis cela compte un peu et hop windows 98 il n'y plus ! Les gens prudents rajouterons un -c en option pour faire une vérification rapide des mauvais blocs.
Bon et bien voilà windows a disparu. Je n'était pas spécialement comptant à cause de cela (je n'ai personnellement rien contre win98, par contre Microsoft ...). Mais j'étais content pour Linux ... <
Bon maintenant on a une partition de 1,5 Go avec rien dessus, une partition de 600 Mo avec /home et une partition de 800 Mo avec / (et une partition de swap de 100 Mo). Il y a en gros 100 Mo qui est dans mon /home/moncompte qui devrait être dans /usr/local/ (je voulais laisser de la place sur /dev/hda2) et il y a 10Mo dans /usr/local. On va déplacer / sur hda1 et mettre /usr/local sur hda2. Ce qui devait donner en gros:
Filesystem 1024-blocks Used Available Capacity Mounted on /dev/hda1 1600672 465000 1130672 29% / /dev/hda2 796065 110000 696065 13% /usr/local /dev/hda4 628351 40739 587612 6% /home |
De l'espace pour une dizaine d'années ....
Bon il faut réaliser cela. Pour pouvoir agir sur hda1 il faut la monter quelque part. En général on utilise /mnt.
- On crée un nouveau répertoire sur /mnt, disons /mnt/tmp pour avoir quelque chose de propre pour monter hda1 (mount ne crée pas de répertoires: mkdir /mnt/tmp.
- On monte hda1 sur /mnt/tmp : mount -t ext2 /dev/hda1 /mnt/tmp (là tout est clair -t ext2 indique le type du système de fichier).
- On copie / sur /mnt/tmp/ en préservant sa structure: cp -ax / /mnt/tmp/. Pour l'option -a citons le man : <<Préserver autant que possible la structure et les attributs du fichier original lors de la copie. Cette option est équivalente à -dpR>>. Voir le man de cp pour la signification de d, p et R ce qui explique mieux le a. L'option -x demande d'ignorer les sous-répertoires qui se trouvent sur un système de fichiers diffèrent de celui de départ de la copie. Dans notre cas cela permet de ne pas copier /home sur /mnt/hda1). Cette opération de copie peut prendre du temps (15 min environ avec mon disque IDE et mon AMD K6 à 266), il est temps de sortir la phrase habituelle: allez prendre une grenadine, un café ou un double whisky en attendant.
- Là on a pas tout à fait le hda1 qu'il faut. À cause de l'option -x il nous manque deux répertoires (vides) qui sont /home et /proc. Donc mkdir /mnt/tmp/home et mkdir /mnt/tmp/proc. Ces répertoires sont des points de montages ils doivent être là pour que /home (qui est sur hda3) et /proc soient montés sur la racine.
Bon là, les choses se compliquent un peu. On a / (=/-/home) sur hda2 mais aussi sur /mnt/tmp/. On va préparer le redémarrage. Il s'agit d'éditer fstab et lilo.conf. Il faut bien se rendre compte que l'on va redémarrer avec le / qui se trouve sur /mnt/tmp/. Donc, en ce qui concerne fstab, le fichier que l'on va modifier est en fait /mnt/tmp/etc/fstab. Pour lilo.conf c'est différent il faut éditer /etc/lilo.conf lancer lilo et aussi copier le nouveau /etc/lilo.conf sur /mnt/tmp/etc/lilo.conf (pour avoir un système consistant). On peut aussi éditer seulement /mnt/tmp/etc/lilo.conf et relancer lilo en lui indiquant avec l'option -C qu'il doit choisir un autre fichier de configuration. J'ai choisi la deuxième méthode.
- /mnt/tmp/etc/fstab
Ce fichier indique comment et où doivent être monté ce qui est montable lors du démarrage. Lorsque l'on va redémarrer on veut que la racine / soit celle de hda1, d'où la première ligne du /etc/fstab ci-dessous. Bien sûr il ne faut pas monter deux racines ! Comme on va avoir à travailler sur hda2 je la monte sur /mnt/tmp. Pour le reste il n'y a rien à changer.
/dev/hda1 / ext2 defaults 1 1 /dev/hda2 /mnt/tmp ext2 defaults 1 2 /dev/hda4 /home ext2 defaults 1 3 /dev/hda3 swap swap defaults 0 0 /dev/fd0 /mnt/floppy ext2 user,noauto 0 0 /dev/cdrom /mnt/cdrom iso9660 user,noauto,ro 0 0 none /proc proc defaults 0 0 |
- /mnt/tmp/etc/lilo.conf.
lilo.conf est le fichier de configuration de lilo le petit programme qui se trouve sur le MBR. Je ne rentre pas dans les détails. S'il y a des gens qui n'utilisent pas lilo je leurs conseille très fortement (lodalin est une absurdité dans notre cas et pourquoi démarrer avec une disquette de nos jour ?). Ici on indique juste à lilo que maintenant le noyau se trouve sur hda1 (il était avant sur hda2) et bien sûr on supprime ce qui concerne windows.
boot=/dev/hda map=/boot/map install=/boot/boot.b prompt timeout=500 image=/boot/vmlinuz-2.0.34-1 label=linux root=/dev/hda1 read-only |
- On relance lilo: /sbin/lilo -v -C /mnt/tmp/etc/lilo.conf. Le v c'est pour que lilo nous raconte un peut plus sa vie. Ici il est interdit de voir apparaître un message d'erreur ! On a pas le droit de se tromper si on veut redémarrer. On doit voir quelque chose comme:
LILO version 20, Copyright 1992-1997 Werner Almesberger Reading boot sector from /dev/hda Merging with /boot/boot.b Boot image: /boot/vmlinuz-2.0.34 Added linux * /boot/boot.0300 exists - no backup copy made. Writing boot sector. |
- On redémarre. Quelques petits tests (df , fdisk -l , on regarde si le système de fichiers est placé comme on l'a spécifié).
- On efface tout ce qu'il y a dans /mnt/tmp/, cela se fait comme cela: rm -rf * dans le répertoire /mnt/tmp. Ensuite on copie le répertoire /usr/local qui reste: cp -a * /mnt/tmp dans le cd /usr/local. On regarde si tout va bien puis on efface /usr/local: rm -fr * dans le répertoire /usr/local (attention il ne faut pas effacer le <<nom >> ou disons plutôt le point de montage local !).
- On édite une nouvelle fois /etc/fstab: on change juste la 2ème ligne:
/dev/hda2 /usr/local ext2 defaults 1 2 |
- On redémarre. On fait quelques tests.
Et voilà opération terminé... J'avoue que j'étais assez content surtout qu'après j'ai testé pleins de programmes et tout marchait !
Et bien j'en ai eu un petit problème. Ce qui est ci-dessus n'est pas exactement ce qui c'est passé mais une idéalisation. Un conseil que je peux vous donner c'est de comprendre un minimum ce que vous faites ce qui vous permettra de comprendre pourquoi cela ne marche pas et de rétablir la situation. Un conseil que m'avait donné Olivier Tharan était de redémarrer en single user (je n'ai pas fait cela car la seul doc que j'ai trouvé sur le mode single user est: <<regarder les fichiers du mode de démarrage single user>> et j'ai eu un peu la flemme). Avant le premier redémarrage il est peut-être prudent d'avoir une bonne disquette de redémarrage (il faut peut-être qu'elle soit adaptée à la situation et j'avoue ne pas savoir exactement comment la réaliser....).
Voici le petit problème que j'ai eu. Avant le premier redémarrage j'avais fait presque ce qui est expliqué ci-dessus. Mais lors du démarrage au niveau du montage du système de fichiers une suite de messages d'erreurs c'est mis à défiler à toute vitesse. J'ai réussi à lire: /proc ... error ... error ... /home ... error (sans trace dans /var/log/messages). PPuis (ouf) l'invite de login est apparue. Je me loge en root et tout de suite
[root@snoopy root]$ df Filesystem 1024-blocks Used Available Capacity Mounted on /dev/hda1 1548535 506977 961525 35% / /dev/hda2 796065 506992 247947 67% /mnt/tmp |
La maison n'avait pas été monté. J'ai édité fstab, mais tout semblait normal. Ensuite j'ai eu la brillante idée (le double whisky ?) de vouloir monter /home et j'ai eu le droit à un truc du genre <<pas de point de montage>>. À ce point, j'ai compris que je n'avais pas compris ce qu'était un point de montage et que j'avais un peut oublié l'option x de cp (j'avoue avoir un peu honte). J'ai créé les bons points de montages: /home et /proc, et j'ai monté ma /home et /proc pour voir si cela était OK. Puis l'opération c'est terminé comme expliqué ci-dessus.
© Olivier Chapuis 1999
LinuxFocus1999 Contacter le Webmestre |