荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: Chair (银发), 信区: Linux
标  题: FreeBSD下增加(改变)硬盘传统方法
发信站: BBS 荔园晨风站 (Wed Oct 11 15:12:38 2000), 站内信件

        这一篇将介绍如何以传统的方法来新增一颗硬碟 (或一个 partition)
        或修改已经存在的 partition 或 label。

        当然传统的方法不一定好用,但是你应该要知道。

        0. 分割硬碟不管在什麽作业系统下都是相当危险的,除非你已经驾轻
           就熟了,不然最好先用一颗空的硬碟来练习,以免毁掉重要资料。

           还有,请准备一台计算机以便计算各种资料。

        1. 首先请先阅读本 gopher "简易安装说明" 中的 "硬碟分割政策"
           以了解 FreeBSD 新的 slice 观念。这个新的 slice 观念於
           1995 四月 开始启用,跟传统的 BSD (如 386BSD, NetBSD,
SunOS)
           有很大的不同,允许多个 BSD partition 存在。

        2. 不管你是要新增 IDE 或 SCSI 硬碟,或是只是要新增一个 partition,
           这些观念都是一样的,首先你要知道你想新增的硬碟的 device 名称,
           例如 :  IDE 第二颗硬碟的第 3 个 primary partition -> wd1s3
                   SCSI 第三颗硬碟的第 1 个 primary partition -> sd2s1
         * (以下以 sd0s2 为例,假设为 100MB)


        3. 首先把硬碟挂上去,你可以用 DOS 的 pfdisk.exe 来分割新的
           partition,或是以 DOS 的 fdisk.exe 割一个 primary partition,
           再用 pfdisk.exe 把 partition ID 改成 165 (十进位)。
           完毕後跳看 Step-4。

         * 如果你想用 FreeBSD 的 fdisk,在进入 FreeBSD 後先以 Step-4
           的方法建立 /dev/sd0s2*,再执行 fdisk sd0 观察 sd0 的硬碟分割
           状况,如下□例:(这是 1G 的 SCSI Fireball,已经割了一个 primary
           FreeBSD partition)

******* Working on device /dev/rsd0 *******
parameters extracted from in-core disklabel are:
cylinders=1042 heads=64 sectors/track=32 (2048 blks/cyl)

 Figures below won't work with BIOS for partitions not in cyl 1
parameters to be used for BIOS calculations are:
cylinders=1042 heads=64 sectors/track=32 (2048 blks/cyl)

Warning: BIOS sector numbering starts with sector 1
Information from DOS bootblock is:
The data for partition 0 is:
sysid 165,(FreeBSD/NetBSD/386BSD)
    start 32, size 614368 (299 Meg), flag 80
        beg: cyl 0/ sector 1/ head 1;
        end: cyl 299/ sector 32/ head 63
The data for partition 1 is:                    <<<--- 欲新建於此 !!!
<UNUSED>                                              ^^^^^^^^^^^^
The data for partition 2 is:
<UNUSED>
The data for partition 3 is:
<UNUSED>

        再来就要开始分割了,键入 fdisk -i sd0,首先它会问你硬碟的参数,如:

******* Working on device /dev/rsd0 *******
parameters extracted from in-core disklabel are:
cylinders=1042 heads=64 sectors/track=32 (2048 blks/cyl)

 Figures below won't work with BIOS for partitions not in cyl 1
 parameters to be used for BIOS calculations are:
 cylinders=1042 heads=64 sectors/track=32 (2048 blks/cyl)

 Do you want to change our idea of what BIOS thinks ? [n]

        如果有错误 (注意:你必须非常了解各种 translation 的数据),不然
        不需要修改,直接回答 n 或按 Enter 跳过。
        (在本□例中,这颗 Fireball 没有经过 SCSI Translate,所以数据为
         cyl=1042, heads=64, sec/track=32)

        再来它会依次问你 primary 1,2,3,4 的分割状况,根据你的情形回答,
        不改变的回答 n,要改变的回答 y。
        比方说,第二个 primary partition (在 FreeBSD 中为 partition 1,
        由零开始) 是空的,你想建立成 FreeBSD partition,你应该会看到:

The data for partition 1 is:
<UNUSED>
Do you want to change it? [n]

        这时候回答 y,再来它会问你:

Supply a decimal value for "sysid" [0]

        请回答 165,这是 UFS 的 partition ID。
        接下来是此 partition 的开始位址:

Supply a decimal value for "start" [0]

        由於此□例中新增的 partition 是从第 300MB 开始,大小为742MB,
        因此 start 应为 300*2048 = 614400。
        你要是不会算的话,把前面已经存在的 partition 资料加起来,如:
        partition 0: start 32, size 614368 (299 Meg), flag 80
        start+size (32+614368) 就是罗!

        要是你是从该硬碟的最前面开始,start 请回答 "32" !! 注意:不是 0 !!
        因为要预留一些空间给 MBR 之类的。

        再来它会问你该 partition 的大小,如:

Supply a decimal value for "size" [0]

        请回答 MB*2048,如此□例为 742*2048 = 1519616。
        再来它会问你是否要明确的定义从那个 cyl 的那个 head 开始:

Explicitly specifiy beg/end address ? [n]

        这除了超人以外,是没有必要去名确定义的。就回答 n 就好了。
        然後它会把这个新建的 partition 资料印出来,如:

sysid 165,(FreeBSD/NetBSD/386BSD)
    start 614400, size 1519616 (742 Meg), flag 0
            beg: cyl 300/ sector 1/ head 0;
            end: cyl 17/ sector 32/ head 63
Are we happy with this entry? [n]

        如果你确定无误後,回答 y 继续。
        然後它会继续问你後面剩下的 partition 是否要更动,如果没有的话
        就一路回答 n 到所有的 partition 完。
        然後它会问你是否要改变 active 的 partition,如:

Do you want to change the active partition? [n]

        如果不是开机用的 partition 就不要更动了。
        最後它会确定你要不要更动 partition table,如:

Should we write new partition table? [n]

        确定的话,复颂一遍大榔头的名言: "Trust me, I know what I am
doing !"
        再回答 y。
        後悔的话回答 n 或按 Ctrl-C 都可以,你的 partition table 就不会被
        更动。

        4. 建立新的 device nodes :
           cd /dev
           ./MAKEDEV sd0
           ./MAKEDEV sd0s1a
           这样会在 /dev 下建立出 sd0s1a, sd0s1b, sd0s1c, ... ,sd0s1h

        5. 构思好你的 slice 分割情形,例如 sd0s1 是 300MB 大小,
           你想要把一开始的 30MB 割给 /tmp,把再来的 64MB 割给 swap,
           在把最後的 206MB 给 /home。
           当然在分割的时候你只要分两种情形,是 FileSystem 或是 Swap,
           要 mount 到那里是 /etc/fstab 中定义的。

        6. 建立一个空的 disklabel
           $ disklabel -r -w sd0s1 auto

        7. 执行 disklabel -e sd0s1
           你应该会看到:

# /dev/rsd0s1c:
type: SCSI
disk: sd0s1
label:
flags:
bytes/sector: 512
sectors/track: 32
tracks/cylinder: 64
sectors/cylinder: 2048
cylinders: 299
sectors/unit: 614368
rpm: 3600
interleave: 1
trackskew: 0
cylinderskew: 0
headswitch: 0           # milliseconds
track-to-track seek: 0  # milliseconds
drivedata: 0

8 partitions:
#        size   offset    fstype   [fsize bsize bps/cpg]
  c:   614368        0    unused        0     0         # (Cyl.    0 - 299*)

        其中你只需要修改最後那些 label 的资料就好了,其他的资料是为了跟
        旧的 BSD label 相容而遗留的。除非你有特殊需要 (如改变 disk
geometry)
        ,不然不要去更动。

        由於这是新增的 slice,其中只有 c: 一个分割区,此 c: 代表整个 slice
        的大小 (300MB)。
        如果你先读过 Step-1 的资料,你应该知道 a: 通常是给 root 区用的,
        b: 通常是给 swap 用的,c: 强制代表该 slice 的大小,d:原先代表整颗
        硬碟的大小,不过新的 slice 已经把 d: 废除了,e: - h: 是随便你的。
        其实从 a: - h: 只有 c: 是强制性的,其他随便你要拿来做 FS 或是 swap。
        不过为了维护传统,一般还是喜欢把 a: 留给 root partition,把 b: 留给
        swap,其他的 FS 由 e: 开始到 h:。

        所以在这个 300MB 的 slice,我们想把 b: 割 64MB 给 swap,把 e: 割
        30MB 给 /tmp,把 f: 割 206MB 给 /home。
        在你的编辑器中键入:

8 partitions:
#        size   offset    fstype   [fsize bsize bps/cpg]
  b:   131072    61440      swap                        <<-- 新增
  c:   614368        0    unused        0     0
  e:    61440        0    4.2BSD        0     0     0   <<-- 新增
  f:   421856   192512    4.2BSD        0     0     0   <<-- 新增

        其中最前面为 e:(30MB),再来是 b:(64MB),最後是 f:(206MB)。所
以:
        e: 的 offset (就是 start offset) 是 0 (由该 slice 的头开
           e: 的 size 是 30MB*2048=61440。  (e: 实际上位於 0 - 614399)

        b: 的 offset 是 61440 (e: 的 offset+size),size 是
64MB*2048=131072
           b: 实际上位於 61440 - 192511
        f: 的 offset 是 192512 (b: 的 offset+size),要注意的是,为了 slice
           alignment 的关系,c: 不见得是 (整个 slice 的大小 * 2048),所以
           在 slice 中最後一个区块大小通常不会是 (预定的大小 * 2048)。
           因此最後一个区块的大小要用 (c: 的 size - 最後一个区块的 offset) !!
           在此□例中是 614368-192512=421856。

        ftype 如果是 swap 请键入 swap,如果是一般的 FS,请键入 4.2BSD。

        在算这些资料的时候,要注意不要有区块彼此覆盖到的情形,不然就只有
        等著 crash and lost data 了。
        完成後用你编辑器的 save 功能存档,要是有显而易见的错误,disklabel
        会要你再修改。

        然後用 disklabel -r sd0s1 看看新建的 label,如下:

8 partitions:
#        size   offset    fstype   [fsize bsize bps/cpg]
  b:   131072    61440      swap                        # (Cyl.   30 - 93)
  c:   614368        0    unused        0     0         # (Cyl.    0 - 299*)
  e:    61440        0    4.2BSD        0     0     0   # (Cyl.    0 - 29)
  f:   421856   192512    4.2BSD        0     0     0   # (Cyl.   94 -
299*)

        现在多出最右边 (# Cyl) 的资料,你可以看看有没有覆盖到的地方。

        8. 一切 OK 後,恭禧您,大风大浪已经过了,最後只剩两个步骤。
           # newfs /dev/rsd1s1e
           # newfs /dev/rsd1s1f
           swap 不需要格式化, 在 newfs 的时候你可以加入参数,来达到特殊
           需求。
           如 -m 0 设定预留的空间为 0,不然内定 7% 的大小预留给 root 及
              避免 fragmentation 使用。
           如 -i 1024 设定每 1024 bytes 给一个 inode (内定 2048),通常
BBS
              跟 News Server 须要较多的 inodes。

        9. 执行 fsck -y /dev/rsd0s1e; fsck -y /dev/rsd0s1f 检查看看有没有

           错误。

        A. 执行 mount /dev/sd0s1e /mnt; ls -la /mnt 看看能不能用。

        B. 最後把新增的 /dev/sd0s1b /dev/sd0s1e /dev/sd0s1f 加入
/etc/fstab,
           mkdir 新的 mount point,执行 mount -a -t ufs 或是 reboot,一

           就大功告成了。

        一切还好玩吗 ?!   :)

--

--
☆ 来源:.BBS 荔园晨风站 bbs.szu.edu.cn.[FROM: bbs@202.104.119.98]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店