萬盛學電腦網

 萬盛學電腦網 >> Linux教程 >> Linux操作系統下如何刪除Windows分區

Linux操作系統下如何刪除Windows分區

class="21461">

  前言:

  我在這篇文章裡要講解的是如何從 Linux 和 Windows 共存的機器中移除 Windows 系統,而且把空出來的空間留給 Linux 用。這篇文章的主要對象是給 Linux 的新手 (也包括我自己)。


  簡介
  安裝完 Linux 兩個月後的某一天,我突然想把 Windows 刪掉。原因是我根本不想再用 Windows 了! 我想許多的初學者可能也遇到和我同樣的情況,所以我寫了這篇文章來幫助他們 (進階者也可以讀讀,給我一些建議)。這種情況有兩種解決辦法:

  第一種是從新安裝 Linux。這樣的好處是即使你對 Linux 知道的不多,也可以在安裝時做出很好的選擇,尤其在處理磁碟分割 (Disk Partitioning) 的時侯。但缺點是你會丟掉硬碟上所有的東西。雖然你也可以把必要的檔案先備份起來,但是還原的工作會花上很多的時間和心血。

  第二種方法是直接移除 Windows (很簡單),然後再把空出來的空間挪給 Linux 用。也就是說,「重新分割」(Repartition),這道手續有點困難,相關文件也不多。但好處是你的系統會和從前的一模一樣,只是多了很多空間。而且如果你沒有成功,你還是可以用第一種方法再試。以下我介紹我用的方法,但細節可能會和你的系統有一些出入。還有一點,如果你有一張空磁碟,你可以先把重要的檔案備份到這張磁碟上,再重新安裝。我想這是一種較安全的方法,且結果也比較理想。我是把檔案備份到一張 1.44 Mb 的磁片上。不管如何希望以下的方法對初學者能有所幫助。

  准備工作

  首先,備份所有重要的檔案。尤其是設定檔和你的文件檔案。以下我不再重覆。

  最重要的一步是了解你到底要怎麽做。本文對使用到的指令和檔案只作一些解說。最好是用 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: 硬碟升級 Mini How-To (Hard Disk Upgrade Mini How-To)。

  第一步,底下是我的磁碟分割表 (Partition Table):


[olivier@snoopy olivier]# /sbin/fdisk -l (用超級使用者 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

  我們可以看到 Windows 位在 hda1 上。fdisk 通常都會把 FAT32 的分割區看成 > (未知)。我的 Linux 核心 (Kernel, 2.0.34 版) 知道怎麽存取 FAT32,但 fdisk 卻不知道。底下是 df 指令的輸出,可以發現 /dev/hda1 的確可以被 Linux 使用。


[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

  你得修改兩個設定檔 /etc/fstab 和 /etc/lilo.conf ,它們看起來有點像底下的輸出。


[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

  重新建立 Windows 的硬碟分割區
  從現在起你一定得用 root 的身份操作。我尤其建議你用 root 登入(別用 su)。如果你用的是 vi 編輯器,你可能要下 w! 指令才能存檔。建議你在每回存檔完後,檢查是否修改過的檔案真的被存起來了。 (離開編輯器用 less 指令來查看)

  你現在要用 fdisk 和 mke2fs 兩個指令。這些可以在硬碟或是其它儲存媒體上用。在使用前最好是不要連接 (mount) 要修改的那一個分割區。請看底下的三個步驟:

  1、如果你要的分割區已經被連接上了,用 umount 指令來分離,如: umount /mnt/dos

  2、啟動 fdisk。更換 hda1 的分割區類別 (System Id)。我們現在告訴 fdisk 這個分割區要改成為 Linux 自有的分割區 (Linux Native Partition)。用 t 指令 (t, 1, 83)來修改。再用 p 指令來查看。唯一不同的地方是 Unkown 現在變成了 linux native 還有 System Id 現在變成了 83。最後,用 w 指令儲存和離開。用 fdisk -l 指令再看一次。離開時我遇到以下的錯誤訊息:


The partition table has been altered!;
Calling ioctl() to re-read partition table.;
Syncing disks.;
Re-read table failed with error 16: Device or resource busy.;
Reboot your system to ensure the partition table is updated.

  但我不理會它所以沒有重新開機。

  3、格式化 (Format): mke2fs /dev/hda1。你會先看見很多數字在跳動,然後就再也見不到 Windows 了! 你也可以在 mke2fs 後加上 -c 的參數,這樣可以順便檢查硬碟有沒有損壞的地方。

  好啦! Windows 沒啦! 其實我並不是很排斥 Win98 (但討厭 Microsoft),只是很喜歡 Linux...

  使用新的分割區

  好了,現在我有一個 1.5 Gb 的空白分割區,我打算把 600 Mb 拿來做 /home , 800 Mb 做 / 和 100 Mb 做交換區 (Swap partition)。我把 /home/myaccount 裡 100Mb 的資料移到 /usr/local ,把 /usr/local 留在 hda2 上再把 / 移到 hda1 上:


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

  足夠我用好幾年了....

  照我上面的計劃,我得先把 hda1 連接起來才行。一般就連接到 /mnt 即可。在 /mnt 底下再建一個 tmp 的次目錄 (sub-directory) 。來連接 hda1: mkdir/mnt/tmp.連接 hda1 到 /mnt/tmp : mount -t ext2 /dev/hda1 /mnt/tmp (-t ext2 指定檔案系統的種類)。復制 / 到 /mnt/tmp/ 但保留目錄結構: cp -ax / /mnt/tmp/。-a 參數在 man 說明裡解釋為: > 請自行參考 cp 的 man 說明。-x 參數指定不要把和現在所在位置不同的分割區也包括進來。以我為例,這樣就不會把 /home 一起復制了。整個復制過程在我的 AMD K6 266 上花了 15 分鐘。所以你可以先去喝杯咖啡或威士忌再回來。但這樣做還是有一些地方不完整,因為 -x 參數的關系有兩個目錄沒有被復制進來, /home 和 /proc。所以現在我們要在新的分割區上建立這兩個目錄: mkdir /mnt/tmp/home 然後 mkdir /mnt/tmp/proc 這兩個目錄一定不可漏掉,這樣 /home (在 hda3 上) 和 /proc 以後才可以被連接上。

  現在更復雜的是我們得修改 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 中。我示□的是第二種方法。/mnt/tmp/etc/fstab.這個檔案指示系統在啟使的時侯如何連接不同的分割區。我們現在想把 / 連接到 hda1 上,所以要如下修改。但我們不可以有兩個 / 連接點! 所以我把 /dev/hda2 改為連接到 /mnt/tmp。其它地方則沒變。


/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 是 lilo 的設定檔,lilo 是位在 MBR (啟動磁區) 的開機管理程式。我不想浪費篇幅說明 MBR。如果有人還在用 Loadlin 或用軟碟開機,我強烈建議換成 lilo ,因為我們的系統上 loadlin 已經沒用,而且這年頭誰還用軟碟片來開機呢? 我們告訴 lilo Linux 的核心 (Kernel) 現在是在 hda1 上 (原本是 hda2) 還有我們得刪除所有有關 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

  執行 lilo: /sbin/lilo -v

copyright © 萬盛學電腦網 all rights reserved