天天看點

速度優化 - 分區大小調整完全手冊

<a href="http://linux.sheup.com/linux/linux1233.htm">http://linux.sheup.com/linux/linux1233.htm</a>

分區大小調整完全手冊

2004-04-23 15:18 pm

來自:Linux文檔

位址:無名

摘要

本文以一個例子介紹調整分區大小的完整過程。(2004-03-25 16:59:41)

環境

  伺服器安裝有一個60G的硬碟,目前已經劃分為/、/home、/chroot和/swap,詳細的分區資訊如何下所示:

Command (m for help): p

Disk /dev/hda: 61.4 GB, 61492838400 bytes

255 heads, 63 sectors/track, 7476 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System

/dev/hda1 * 1 915 7349706 83 Linux

/dev/hda2 916 1414 4008217+ 83 Linux

/dev/hda3 1415 7476 48693015 5 Extended

/dev/hda5 1415 1477 506016 82 Linux swap

/dev/hda6 1478 7476 48186936 83 Linux

  然後現在希望從/home分區裡面分出大約4GB的空間用于安裝FreeBSD。

過程

  首先,我們需要調整檔案系統的大小(注意是檔案系統,而不是分區的大小),然後對調整完畢的檔案系統進行檢查,然後再進一步調整分區的大小。

  文章以我自己用的系統為例子,實際操作時根據情況調整即可。

  用慣了傳統調整硬碟工具的人可能會認為檔案系統和硬碟的分區之間是統一的,實際上他們之間并不是完整的整體(這也就是為什麼BSD可以在一個硬碟分區裡面制作多個檔案系統分區)。想像一下帶有移動式書架的書櫥。你可以通過移動式書架調整書櫥裡面書籍的位置。把書當成檔案系統,你可以在書櫥裡面放滿書籍,也可以通過移動式書架調整書櫥的空間。當然也可以通過書架調整書櫥裡面書籍存放的位置。如下圖所示:

|&lt;-- hda1------&gt;|&lt;-- hda2------&gt;|

+---------------+---------------+

|XXXXXXXXXXXXXXX|XXXXXXXXXX| |

  硬碟分區/dev/hda1中的檔案系統占滿了整個分區,而/dev/hda2中的檔案系統隻占用了2/3左右的分區。

  基本的原理就是這樣,現在讓我們開始調整/dev/hda6中檔案系統的大小:

[root@ringmail root]# umount /home

[root@ringmail root]# resize_reiserfs -s 43000M /dev/hda6

&lt;-------------resize_reiserfs, 2002-------------&gt;

reiserfsprogs 3.6.4

You are running BETA version of reiserfs shrinker.

This version is only for testing or VERY CAREFUL use.

Backup of you data is recommended.

Do you want to continue? [y/N]:y

Processing the tree: 0%

....20%....40%....60%....80%....100% left 0, 301020 /sec

nodes processed (moved):

int 56 (0),

leaves 8124 (0),

unfm 6313240 (0),

total 6321420 (0).

check for used blocks in truncated region

ReiserFS report:

blocksize 4096

block count 11008000 (12046734)

free blocks 4678034 (5716736)

bitmap block count 336 (368)

Syncing..done

  由于/home原來的大小是47057,而我們希望在/home裡面劃分4G的空間出來,取整數/home的目标大小就是43000。是以在resize_reiserfs時為-s提供大小為43000M。

  這樣我們就已經完成了檔案系統大小調整的工作,下面讓我們計算一下目标分區的大小,這個大小需要根據你的fdisk裡面的Units值來計算,因為硬碟分區都是按照柱面來劃分的,基本的計算方法為:43000*1024*1024/8225280= 5481.7304699657640834111422346716,然後我們取最接近的值5482+1478=6960來作為分區結束的柱号,這裡面的1478是/home分區開始的柱面号,在前面的fdisk裡面可以看到。

  調整完檔案系統的大小以後,再使用以下指令以檔案系統進行全面的檢查:

[root@ringmail root]# reiserfsck --check --fix-fixable /dev/hda6

  現在我們已經完成檔案系統的大小調整工作,但是硬碟分區的大小仍然沒有調整,還是跟先前一樣大(可以想像我們從書櫥裡面拿走了幾本書,而書架的大小并沒有調整,依然占用着原來的空間)。

  現在我們要開始進行整個操作裡面最危險的操作:如果沒有必要的話,最好不要進行下去:-D,不過不必過于擔心,按照以下操作進行即可。

  啟動fdisk,并按照以下步驟進行:

[root@ringmail root]# fdisk /dev/hda

The number of cylinders for this disk is set to 7476.

There is nothing wrong with that, but this is larger than 1024,

and could in certain setups cause problems with:

1) software that runs at boot time (e.g., old versions of LILO)

2) booting and partitioning software from other OSs

(e.g., DOS FDISK, OS/2 FDISK)

Command (m for help): d

Partition number (1-6): 6

Command (m for help): n

Command action

l logical (5 or over)

p primary partition (1-4)

l

First cylinder (1478-7476, default 1478): 1478

Last cylinder or +size or +sizeM or +sizeK (1478-7476, default 7476): 6960

/dev/hda6 1478 6960 44042166 83 Linux

Command (m for help): w

The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: Device or resource

busy.

The kernel still uses the old table.

The new table will be used at the next reboot.

Syncing disks.

  這裡需要說明的是,由于核心仍然使用舊的分區表,我需要通過重新啟動才可以重新整理剛制作的分區資訊,是以在進行完重劃分區操作以後,我對系統進行了重新啟操作。系統重新開機後再繼續後續的操作過程。

  通過以上步驟,我們已經完成了硬碟分區大小調整的操作,接下來回到重新調整檔案系統大小的問題上來。由于硬碟分區是按照柱面來計劃的,我們要在 resize_reiserfs步驟上就一步到位調整檔案系統大小與硬碟分區大小正好相等是比較困難的事情。是以一般是調硬碟分區比檔案系統要大一點點,然後再通過以下指令進行同步(當然如果你不在意硬碟分區裡面存在部分空間的話也可以忽略以下步驟):

[root@ringmail root]# umount /home/

[root@ringmail root]# resize_reiserfs /dev/hda6

block count 11010541 (11008000)

free blocks 4680574 (4678034)

bitmap block count 337 (336)

  完成以後原有分區的大小調整操作已經結束,接下來需要建立新分區:

First cylinder (6961-7476, default 6961):

Using default value 6961

Last cylinder or +size or +sizeM or +sizeK (6961-7476, default 7476):

Using default value 7476

Command (m for help): t

Partition number (1-7): 7

Hex code (type L to list codes): a5

Changed system type of partition 7 to a5 (FreeBSD)

/dev/hda7 6961 7476 4144738+ a5 FreeBSD

  至此,整個調整分區大小及建立新分區的操作全部完成。

blockdev --rereadpt /dev/hda

kernel can re-read the partitions table.

hdparm -z &lt;dev&gt;

is also okay, and easier to remember

繼續閱讀