前言:
4 D) s3 u+ [6 }+ ]) u- v8 U& s) M: ]% z9 E: F5 p/ k* j9 s4 z
我在这篇文章里要讲解的是如何从
Linux和
Windows共存的
机器中移除
Windows系统,而且把空出来的
空间留给Linux用。这篇文章的主要
对象是给Linux的新手(也包括我自己)。
! j. F/ a" j* `, G0 U8 i A. j% E9 o& J$ {
] s+ l$ O) O! _ d5 K
--------------------------------------------------------------------------------
( c# i5 P" R& Y; ^5 e! w9 v, {/ k. \. {
! o2 a( ~- m: C8 ^. [简介
# x# r5 Y3 y' w" W9 F# |
安装完Linux两个月後的某一天,我突然想把Windows删掉。原因是我根本不想再用Windows了!我想许多的初学者可能也遇到和我同样的情况,所以我写了这篇文章来帮助他们(进阶者也可以读读,给我一些建议)。这种情况有两种解决办法:
* y* G0 k8 w" u6 k$ C/ g- ~! H
% h8 |. s e; ]5 P第一种是从新安装Linux。这样的好处是即使你对Linux知道的不多,也可以在安装时做出很好的选择,尤其在处理磁碟分割(DiskPartitioning)的时侯。但缺点是你会丢掉硬碟上所有的东西。虽然你也可以把必要的档案先备份起来,但是还原的工作会花上很多的
时间和心血。
9 L$ A$ q. K7 D6 I: ?' i/ u) Z' F* k. F: R1 l
第二种方法是直接移除Windows(很简单),然後再把空出来的空间挪给Linux用。也就是说,「重新分割」(Repartition),这道手续有点困难,相关文件也不多。但好处是你的系统会和从前的一模一样,只是多了很多空间。而且如果你没有成功,你还是可以用第一种方法再试。以下我介绍我用的方法,但细节可能会和你的系统有一些出入。还有一点,如果你有一张空磁碟,你可以先把重要的档案备份到这张磁碟上,再重新安装。我想这是一种较
安全的方法,且结果也比较理想。我是把档案备份到一张1.44Mb的磁片上。不管如何希望以下的方法对初学者能有所帮助。
, ?9 f- s& `, X; m% f+ n
A0 n8 f8 A, q& \ {. |3 w1 R( ^我要感谢OlivierTharan在fr.col.moderated上的回信,那封信算是本文的第"负一"版。还有FinnboJorgensen和Chomouelboudjnah他们的回信。
) X5 ^9 S) x( U$ F0 Y+ P. u6 ?$ a9 e+ H+ I% e
% V K. M2 u6 _
主要步骤
7 G3 H. j0 ^! w- b. c9 V% ?$ c. l-准备工作:备份且记下重要的档案。读完整篇文章再继续。(请参照第三节)
% s6 g. u, N, Y- W: z z& c
0 j0 `( \, q* @. B0 B$ c-移除Windows。(请参照第四节)
( {) C0 R. v9 L: ]% ?1 N
1 y$ C0 ~* b0 W- n( ~) g-重新分割,较难的步骤。(请参照第五节)
' s( U6 S+ c3 N( b! {! Z
6 [6 W3 x1 @. Z3 B) N
, _8 L W5 U0 |3 K: g) N准备工作
_: A3 |0 m9 u6 j6 H9 V# O首先,备份所有重要的档案。尤其是设定档和你的文件档案。以下我不再重覆。
, M; \: n5 y! H( l- v6 `
0 E7 z% m) Y1 G C% D
最重要的一步是了解你到底要怎麽做。本文对使用到的指令和档案只作一些解说。最好是用man读一读这些指令的说明:fdisk,mk2ext,cp(蛮实用的指令),lilo,lilo.conf和fstab(此外还有一些设定档的man说明)。Lilo有些很详尽的说明放在/usr/doc/lilo-0.20/doc下(因系统而异),而且还有一篇长达46页的使用说明书。有关fdisk的完整说明则是放在/usr/doc/util-linux-2.7/README.fdisk。写这篇文章的时侯我还发现了一篇很有用的mini-HOWTO:硬碟升级MiniHow-To(HardDiskUpgradeMiniHow-To)。
+ `3 Z1 n) Q1 y, h5 a
4 D5 C! d. R0 `6 T8 U; l第一步,底下是我的磁碟分割表(PartitionTable):
% X7 v( g, ~: b( T6 _) V- U- Q+ D/ W# u, Q$ d( d& v
[olivier@snoopyolivier]#/sbin/fdisk-l(用超级使用者su的身份)
2 Q/ Q, w4 K: S: }9 _! ^
, \! v- \" i& w6 m- Z0 GDisk/dev/hda:128heads,63sectors,788cylinders
8 o6 `3 \' N. z' e' K9 ?- s. kUnits=cylindersof8064*512bytes
* `4 P( R# m: ?9 f8 Q; y
+ F' _4 l2 K) RDeviceBootBeginStartEndBlocksId
System! K6 S% \1 o' l: r# J" V$ ]
/dev/hda1*113971600672cUnknown
- A J5 @. g3 N, n# a/dev/hda239839860182252883Linuxnative
' M8 f' L2 g7 M! p4 p/dev/hda360260262710483282Linuxswap
$ P2 \: N' o A) o4 [2 O/dev/hda462862878864915283Linuxnative
, T* M6 x, c& M q% J* h6 Y2 Z/ `% ?# i. F5 i" e5 W% Y7 B1 Y7 b
6 m5 G, d1 T# \( ]% B; k3 f6 r
( A2 N1 ~( T- }1 _1 `& b @7 n/ g& ?; U4 k5 S8 _4 X; o* H Y9 U% q9 t& P# H, b
我们可以看到Windows位在hda1上。fdisk通常都会把FAT32的分割区看成%26lt;%26gt;(未知)。我的Linux核心(Kernel,2.0.34版)知道怎麽存取FAT32,但fdisk却不知道。底下是df指令的输出,可以发现/dev/hda1的确可以被Linux使用。
( p$ k0 K' }4 ^! M
/ {$ b& k* `. z- S
[olivier@snoopyolivier]#df
- H$ [/ j# C& K' L
% p9 h& `) X. g4 b2 Y, cFilesystem1024-blocksUsedAvailableCapacityMountedon
: n' R: J6 X+ j" |9 g/dev/hda279606550699224794767%/
- T6 Y! ]8 l- U# p) z, O/dev/hda462835122636636952838%/home
( V! ?: V% W# ~
/dev/hda1159445685042074403653%/mnt/dos
, u: W) G2 N7 [) X0 |; {
3 s/ _ y! A7 t9 |4 W/ c
7 W" a0 N V1 N& `7 N
1 S' Z, L3 S0 x" d
) `& |; Q3 T9 P, n# T你得修改两个设定档/etc/fstab和/etc/lilo.conf,它们看起来有点像底下的输出。
1 n! C; O+ ?1 e9 b% G8 @- {4 E
2 A) P# P2 h5 k' |7 ?[olivier@snoopyolivier]less/etc/fstab
7 w! U' W' l; b
0 b9 j8 L9 }8 v0 C' t/dev/hda2/ext2defaults11
4 N, U0 j; Y, L3 Q* h! F[color=#FFFFFF']
& Z3 b+ q5 R/ v: _
3 I& N5 L+ ~$ S. d/dev/hda4/homeext2defaults12
! x" {) q1 Y: V6 d0 k4 i8 W7 n% Y( {1 D/dev/hda3swapswapdefaults00
6 p" Q& X6 e- v/dev/fd0/mnt/floppyext2user,noauto00
0 [" o2 C; Z/ U3 e& J
/dev/cdrom/mnt/cdromiso9660user,noauto,ro00
, M, m" d. V- H3 q[color=#FFFFFF']
8 }$ d u$ d0 t
+ T5 A2 W: W- Jnoneprocprocdefaults00
8 G. y" ?; \% s+ w: [7 n6 |# p4 w+ s/dev/hda1/mnt/dosmsdosuser,noauto00
0 E+ G/ f# c! `6 ^" s# X- F1 `3 Q8 W$ i0 H. E: ^
+ T% s# I/ f- D' j6 a3 {[olivier@snoopyolivier]less/etc/lilo.conf
3 X* ?3 i' q) r" j( ]7 T' w
( i" [0 R! A1 i/ f
boot=/dev/hda
. \4 P6 b9 B1 f7 X
map=/boot/map
A* ^' W7 U& I) M9 [$ U
install=/boot/boot.b
1 ~8 L' h% u( E. g* W: e$ A8 h$ c- Aprompt
( u% M9 H$ z0 z% C, ~4 A. @7 ntimeout=500
% K& R: ?( q) h Dimage=/boot/vmlinuz-2.0.34-1
& _! d. ?9 ~' \" ~" Z' m
label=linux
3 v5 ]( l. |, C( S7 ~/ O
root=/dev/hda2
6 T( T1 W: K* @; Z8 C- m1 Y+ rread-only
0 l8 u q! s# ~1 d% B, v& r8 dother=/dev/hda1
; @& S$ |& o3 l1 |# I$ `
label=dos
, H, { M, M8 M {, f
table=/dev/hda
* B6 y! n ]. g, X
& h/ }) `( D; X5 Q3 \0 @, [3 j5 P v! a L* v9 h
9 T( w5 |% |. C$ @- x6 ? B
/ M# ^# j$ h- |8 Q' m% U重新建立Windows的硬碟分割区
9 g- h" a7 I5 J5 w- Y! ]; w9 Z从现在起你一定得用root的身份操作。我尤其建议你用root登入(别用su)。如果你用的是vi编辑器,你可能要下w!指令才能存档。建议你在每回存档完後,检查是否修改过的档案真的被存起来了。(离开编辑器用less指令来查看)
) ]# G E. ~7 h) }) T# t
. F. u/ r; y( t4 M( i你现在要用fdisk和mke2fs两个指令。这些可以在硬碟或是其它储存媒体上用。在使用前最好是不要连接(mount)要修改的那一个分割区。请看底下的三个步骤:
5 ~! D6 N; W, q+ G- h9 {
: J/ w8 u: {8 s! [- ~
-如果你要的分割区已经被连接上了,用umount指令来分离,如:umount/mnt/dos
) A3 p. X# L% Q! G$ K2 l5 n% T; B4 p$ j: p" A% `
-启动fdisk。更换hda1的分割区类别(SystemId)。我们现在告诉fdisk这个分割区要改成为Linux自有的分割区(LinuxNativePartition)。用t指令(t,1,83)来修改。再用p指令来查看。唯一不同的地方是Unkown现在变成了linuxnative还有SystemId现在变成了83。最後,用w指令储存和离开。用fdisk-l指令再看一次。离开时我遇到以下的错误讯息:
' W( b0 H+ u; X) f2 k1 H& f; q( t# P4 {: [+ b
Thepartitiontablehasbeenaltered!
( j0 I W/ q" |Callingioctl()tore-readpartitiontable.
0 k9 r$ V1 {( ASyncingdisks.
/ @' P' I" v0 o* \5 U; C4 ?
Re-readtablefailedwitherror16

eviceorresourcebusy.
4 U; @, B) b# FRebootyoursystemtoensurethepartitiontableisupdated.
4 }1 K7 }, W3 |, _% @
9 k6 [1 Z( W i6 u- F
5 S% r% f U) q* V& @, |4 D D% T( u% D) f! x: Q2 v/ `
+ g D# P- `4 B( v但我不理会它所以没有重新开机。
& ^' b, A. B6 Q4 m! \
* P" m9 j" N# t7 {-格式化(Format):mke2fs/dev/hda1。你会先看见很多数字在跳动,然後就再也见不到Windows了!你也可以在mke2fs後加上-c的参数,这样可以顺便检查硬碟有没有损坏的地方。
4 s9 ~9 q& J! ^! D
% @: R% e4 s; _; R' N3 O& `
好啦!Windows没啦!其实我并不是很排斥Win98(但讨厌
Microsoft),只是很喜欢Linux...
! w1 H. T2 H( q: u
. V2 L$ g% `9 a" z5 |! w+ o' c' d% q [/ `- X
使用新的分割区
A3 x" B- }: j# \- y6 J0 g$ Z
好了,现在我有一个1.5Gb的空白分割区,我打算把600Mb拿来做/home,800Mb做/和100Mb做交换区(Swappartition)。我把/home/myaccount里100Mb的资料移到/usr/local,把/usr/local留在hda2上再把/移到hda1上:
; {2 H4 }! c. M5 J* J' u; B* r: f' R3 q0 E5 o& v4 c. m
Filesystem1024-blocksUsedAvailableCapacityMountedon
2 }0 j$ e' V! k. {1 d/dev/hda11600672465000113067229%/
; L9 b; n9 C6 G3 b/dev/hda279606511000069606513%/usr/local
" u. X+ R& W8 W" M
/dev/hda4628351407395876126%/home
, h0 M$ I8 M R$ n# r
* _' m5 o$ w) S S( a! y! v( y+ W0 D1 C' V0 Z) s8 H. \
# Z7 }% i# k, ~/ O) O# t
- u% q! G# {. h0 v3 c: Q足够我用好几年了....
L0 k2 I2 b: ~
& n, |$ s: P" [; S f3 X# Z
照我上面的计划,我得先把hda1连接起来才行。一般就连接到/mnt即可。
d" c$ u6 F# |+ B* Z. Y! ?' y' V, r( L6 ^
1 C, W, y, X; p( g-在/mnt底下再建一个tmp的次目录(sub-directory)。来连接hda1:mkdir/mnt/tmp.
$ s8 ?" _$ V* Z, W1 _" W
8 z4 M# Q6 A; ~& C; |( U6 v; c-连接hda1到/mnt/tmp:mount-text2/dev/hda1/mnt/tmp(-text2指定档案系统的种类)。
! u" I! r4 `' m; ]" w: t: \, }3 ~, v4 M5 ^( d5 o; y8 |" y
-复制/到/mnt/tmp/但保留目录结构:cp-ax//mnt/tmp/。-a参数在man说明里解释为:%26lt;%26gt;请自行参考cp的man说明。-x参数指定不要把和现在所在位置不同的分割区也包括进来。以我为例,这样就不会把/home一起复制了。整个复制过程在我的AMDK6266上花了15分钟。所以你可以先去喝杯咖啡或威士忌再回来。
5 V# ?" D0 d$ C& k2 r( Y$ }; H7 {0 m2 [ P% _7 `7 O7 v( [
-但这样做还是有一些地方不完整,因为-x参数的关系有两个目录没有被复制进来,/home和/proc。所以现在我们要在新的分割区上建立这两个目录:mkdir/mnt/tmp/home然後mkdir/mnt/tmp/proc这两个目录一定不可漏掉,这样/home(在hda3上)和/proc以後才可以被连接上。
. \0 ]* x9 P* [5 ]- Q
* j1 z7 d& C2 k1 A! P. O+ W e7 z现在更复杂的是我们得修改fstab和lilo.conf档案,重新开机後Lilo和Linux本身才知道/在哪里。注意,我们必须修改/mnt/tmp/etc/下的fstab而不是/etc下的。因为新的系统在/mnt/tmp下。但是在重新开机前我们必须重新安装Lilo(如果你有用Lilo的话)。现在必须修改/etc/下的lilo.conf因为我们现在就要执行lilo指令来重新安装Lilo。然後再把/etc/lilo.conf复制到新的分割区/mnt/tmp/etc。或者你可以直接修改/mnt/tmp/etc/lilo.conf然後在执行lilo的时候加上-C的参数告诉lilo你的设定档不是在/etc/lilo.conf而是在/mnt/tmp/etc/lilo.conf中。我示□的是第二种方法。
3 m1 V- v& W) M6 _ O" C
2 }5 R. }! w+ x% [4 P-/mnt/tmp/etc/fstab
8 I5 g4 `4 b: p- b
- Y5 {; O2 ~$ W( u这个档案指示系统在启使的时侯如何连接不同的分割区。我们现在想把/连接到hda1上,所以要如下修改。但我们不可以有两个/连接点!所以我把/dev/hda2改为连接到/mnt/tmp。其它地方则没变。
. w$ c2 Y x, H, g F5 I: J6 h6 E0 f/ L* ^4 A
/dev/hda1/ext2defaults11
9 X9 v* O$ D9 R+ k& H
/dev/hda2/mnt/tmpext2defaults12
L/ A$ }! O& z- g/dev/hda4/homeext2defaults13
, s8 m; \4 R4 ^, A/ C. Q9 d) W
[color=#FFFFFF']
+ a' _. O* \, x- o4 {% a, `
4 A% b0 i- g2 m Q1 D7 g4 G
/dev/hda3swapswapdefaults00
/ ]' L4 g$ q, k: b' {. l8 _& S
/dev/fd0/mnt/floppyext2user,noauto00
! Z$ @& H# X$ {5 I/dev/cdrom/mnt/cdromiso9660user,noauto,ro00
/ c* t- i7 {% @: o0 x2 j
none/procprocdefaults00
3 R/ P7 x# y, n O( T- c {: t |; u
+ U. G d* q3 O5 a, r. S& L, B* Z
& `& h8 p# h$ b7 z% {, ~
' V3 ?% ?) h: T. `( x% E b0 {& k+ N. T3 Q' q
-/mnt/tmp/etc/lilo.conf.
4 a! k2 A) @: T
- N" V! O2 [ ^
lilo.conf是lilo的设定档,lilo是位在MBR(启动磁区)的开机
管理程式。我不想浪费篇幅说明MBR。如果有人还在用Loadlin或用软碟开机,我强烈建议换成lilo,因为我们的系统上loadlin已经没用,而且这年头谁还用软碟片来开机呢?我们告诉liloLinux的核心(Kernel)现在是在hda1上(原本是hda2)还有我们得删除所有有关Windows的设定。
: r$ U+ `0 Q* m5 \7 Q6 Z; E
/ n5 O( ^* [: l) m
boot=/dev/hda
, P4 W2 M* L' K+ m
map=/boot/map
5 F. N! {0 ?: R, e+ `% h6 J+ m. h
install=/boot/boot.b
6 P. E. Y. g% ^3 k8 p2 a9 I- V% I
prompt
, c- ]; ^+ W2 h' `timeout=500
: Z& \& b( c0 d, v
image=/boot/vmlinuz-2.0.34-1
9 B, ?+ ]& ?( p. Z3 Slabel=linux
1 D7 H i6 O9 }! W! {
root=/dev/hda1
_" p2 J- Q1 H$ I) F
read-only
! `1 m/ s, {( W- G1 Z; }
. q1 Q0 `+ m. d. g& R! v. H0 B
# z# z) `5 G; B9 z, i1 q" j. K' a8 T- X9 e4 g% _7 \9 ]8 I1 M
$ M. D5 N" G8 e X# ?' i# {
-执行lilo:/sbin/lilo-v-C/mnt/tmp/etc/lilo.conf.-v告诉lilo给予详尽的输出。这时应该没有任何的错误讯息,因为我们要重新启动所以一定不能犯错。lilo的讯息如下:
^# }8 }6 _+ y5 t' h5 o5 e7 @% H; A( b9 [/ l6 q' F# I
LILOversion20,Copyright1992-1997WernerAlmesberger
0 E: o! l3 n& o6 B0 a9 l/ J) G, RReadingbootsectorfrom/dev/hda
( j- n& V- d/ J6 `$ kMergingwith/boot/boot.b
; W# ~4 L, a+ X3 U' Z% ^Bootimage:/boot/vmlinuz-2.0.34
* s. |* C8 W- {
Addedlinux*
* V/ g$ x s8 C$ `
/boot/boot.0300exists-nobackupcopymade.
, \" {6 p l) [: kWritingbootsector.
7 p% U, V# G/ ^
5 @2 z0 G S. g, |7 [0 [+ i" B$ V- l3 g0 m
8 ]! y w6 A( U2 I
' w: v1 K. u6 W
-重新开机,再做一些小
测试(df,fdisk-l)看看档案系统是不是和我们指定的符合。
. O# x) [$ {' e7 f6 ?' e$ @
) s) ~! f) U4 O3 o-把/mnt/tmp底下(hda2)所有的东西删除掉

在/mnt/tmp下)rm-rf*
- `; r& O2 }: H0 q7 z2 q9 S4 a, N6 F
7 Q! c& J' K( P按照先前的安排,我们再用cd切换到/usr/local下,复制所有档案到/usr/tmp:cp-a*/mnt/tmp
@3 a2 z, U8 F( Z. f* f
3 ^4 l6 v }. Q" X验证是否一切顺利,再删除/usr/local

在/usr/local下)rm-rf*,注意不可以删除/usr/local这个名字。
: _( L* P/ M- Q% X, D: m* ^
. x n5 B! {- y) p' ]6 o) {4 C7 m-再编辑/etc/fstab,修改第二行:
]- z) X5 m3 i2 Z* G, Y/ U/ R [$ O: [3 d( |: _. b
/dev/hda2/usr/localext2defaults12
4 z! `' I1 ^5 s% v* \9 L# M
! [* ~/ c- T- O+ L1 i
2 e& G1 g( Y3 B$ b) Z0 \: X- s- C3 \' @8 ~
: @6 c" C# d) G6 v% t! @5 M" k
-重新开机,再测试。
l" {4 V: s5 q$ q/ m0 I" j0 ~$ {7 Q
2 W, h0 Z# y" a4 D& s大功告成!告诉你我当时非常的满意,尤其是所有的程式後来都能正常的工作!
4 i+ H3 H; b; i" \" ^
* D: i0 @& h4 D% f
& }% ]7 V' ^. ?; m7 [问题
/ J# n5 v- Y* E% r( q" e2 J事实上我在实作时遇到了一些问题。但我建议你去了解这些步骤,所以在你遇到问题的时候你可以试著自行解决。OlivierTharan建议我重新启动到单人模式中(Single-usermode)但我偷懒而跳过这一节。最好能在重新启动前准备一张开机磁片(但我不知道怎麽弄)。
( K& U3 }& _- u3 K- I
; V; c, Q; u g8 Q H8 X: `% w底下是我遭遇到的问题。在第一次重新开机後,我的/home和/proc没有被连接进来,但幸好登入系统不成问题,所以我赶快用:
5 i5 V9 Y5 D5 W0 Q c
* D$ j# ~" E# u9 q[root@snoopyroot]$df
" A6 G# D4 Z8 S9 O2 A1 hFilesystem1024-blocksUsedAvailableCapacityMountedon
/ ^8 w# K$ x$ L* T/ H
/dev/hda1154853550697796152535%/
' D$ M: q. h: a [' f0 L
/dev/hda279606550699224794767%/mnt/tmp
# a% S7 [# O7 K6 N
+ K9 W* R/ P5 t
. L4 n0 @8 ~: }) e# P0 r8 z2 c; z+ o; @3 c/ J4 d
4 f1 ?' a" k( V3 C1 l
/home没有被连接进来,所以我试著用mount/home,但mount却显示:%26lt;%26gt;我才发觉我没了解什麽叫"连接点"(MountPoint)而漏了cp的-x的参数。所以我重新建立了/home和/proc两个连接点,结果才和前面所叙述的一样。
$ y7 F0 G% X0 H. }/ ^7 Z% p' i/ { k4 t8 } g
( N) m; Z/ k! l* ]+ J
8 n. l# D# X3 [" U参考资料
0 z3 w; S0 v! I' ?
man说明:fdisk,mk2ext,cp,mv,rm,lilo,lilo.conf,fstab
& i5 O; b/ F, R6 X% I
/usr/doc/lilo-0.20/doc/User_Guide.ps
2 j( ]& K9 b2 D$ V0 o5 w/usr/doc/util-linux-2.7/README.fdisk
# {1 Y7 o, z& M' R- X6 u+ qHardDiskUpgradeMiniHow-To(硬碟升级MiniHow-To)
0 }2 J4 P/ I0 u3 c+ y# m8 ^
本文出处Commentsupprimerwindows.
- t7 Y$ E- R# C9 S* n原文以法文写成,英文翻译PaulKienzle,中文翻译郭予廷