硬盘的添加方法

发表于:2007-06-09来源:作者:点击数: 标签:
http://blog.chinaunix.net/index.php?op=ViewArticleblogId=2809articleId=7782 习惯了windows的人一到FreeBSD的时候,由于还没有领会到unix下的高效和工作方式,往往会觉得FreeBSD下的一些工作非常耐烦,不直观,不高效,比如硬盘的添加就是其中一项。需要
http://blog.chinaunix.net/index.php?op=ViewArticle&blogId=2809&articleId=7782

习惯了windows的人一到FreeBSD的时候,由于还没有领会到unix下的高效和工作方式,往往会觉得FreeBSD下的一些工作非常耐烦,不直观,不高效,比如硬盘的添加就是其中一项。需要指出的是,这是一种误解,下面我将详细来说明一下FreeBSD下硬盘的准备、文件系统创建等问题。

FreeBSD下添加硬盘一般有三个步骤,即:fdisk disklabel newfs。如果不需要考虑和别的系统共用一个硬盘那么就只有两个步骤,即:disklabel newfs。同时为了先删除原来的分区,先要进行一个准备工作。下面将就每一个步骤详细说明:

注意:为了说明方便以一个设备名为ad2的硬盘为例,参数如下:
******* Working on device /dev/ad2 *******
parameters extracted from in-core disklabel are:
cylinders=3618 heads=15 sectors/track=63 (945 blks/cyl)
如果你参照这篇文章进行操作,请把ad2换成对应的设备文件

1、准备步骤
# dd if=/dev/zero of=/dev/ad2 bs=1k count=1
上面这行命令的作用是把一个大小为1k的全为0的文件写入到ad2的第一个扇区中,我们知道第一个扇区是主引导区,运行上面这个命令后就等于把原来的主引导区给删了。删除后的分区表为:

******* Working on device /dev/ad2 *******
parameters extracted from in-core disklabel are:
cylinders=3618 heads=15 sectors/track=63 (945 blks/cyl)

Figures below won't work with BIOS for partitions not in cyl 1
parameters to be used for BIOS calculations are:
cylinders=3618 heads=15 sectors/track=63 (945 blks/cyl)

fdisk: invalid fdisk partition table found
Media sector size is 512
Warning: BIOS sector numbering starts with sector 1
Information from DOS bootblock is:
The data for partition 1 is:

The data for partition 2 is:

The data for partition 3 is:

The data for partition 4 is:
sysid 165 (0xa5),(FreeBSD/NetBSD/386BSD)
start 63, size 3418947 (1669 Meg), flag 80 (active)
beg: cyl 0/ head 1/ sector 1;
end: cyl 545/ head 14/ sector 63


可以看到要像这个硬盘有一个分区,这个分区覆盖了整个硬盘,这是初始状态,先不用管它。这种效果和使用
# fdisk -I
的效果是一样的。(下面会说到)

2、fdisk
fdisk -I //创建一个覆盖整个硬盘的FreeBSD分区
fdisk -B //初始化引导区
-b //初始化引导区时用这个指定引导区文件,比如:fdisk -B -b /boot/boot0
fdisk -i //进行分区
fdisk -t //测试模式

在fdisk的阶阶段,一般使用
# fdisk -i ad2
进入分区状态,它会一个一个地问你关于四个主分区的设置。在这个阶段比较难的在于计算分区大小和设置分区类型(sysid):
1)计算分区大小
磁盘的总容量=cylinders * heads * sectors/track
本例中就是 3618 * 15 * 63 = 3419010

每个磁盘中的头64个扇区是引导区,因此:
实际可用容量= 总容量 - 63 //为什么不是64?因为是0 - 63
所以第一个分区要从63开始。以后的各个分区依此类推就可以了。

2)分区类型(sysid)
查看/usr/src/sbin/fdisk/fdisk.c中的130到214行,这里也附上:
0x00 unused
0x01 Primary DOS with 12 bit FAT
0x02 XENIX / file system
0x03 XENIX /usr file system
0x04 Primary DOS with 16 bit FAT (< 32MB)
0x05 Extended DOS
0x06 Primary 'big' DOS (>= 32MB)
0x07 OS/2 HPFS, NTFS, QNX-2 (16 bit) or Advanced UNIX
0x08 AIX file system or SplitDrive
0x09 AIX boot partition or Coherent
0x0A OS/2 Boot Manager, OPUS or Coherent swap
0x0B DOS or Windows 95 with 32 bit FAT
0x0C DOS or Windows 95 with 32 bit FAT (LBA)
0x0E Primary 'big' DOS (>= 32MB, LBA)
0x0F Extended DOS (LBA)
0x10 OPUS
0x11 OS/2 BM: hidden DOS with 12-bit FAT
0x12 Compaq diagnostics
0x14 OS/2 BM: hidden DOS with 16-bit FAT (< 32MB)
0x16 OS/2 BM: hidden DOS with 16-bit FAT (>= 32MB)
0x17 OS/2 BM: hidden IFS (e.g. HPFS)
0x18 AST Windows swapfile
0x24 NEC DOS
0x3C PartitionMagic recovery
0x39 plan9
0x40 VENIX 286
0x41 Linux/MINIX (sharing disk with DRDOS)
0x42 SFS or Linux swap (sharing disk with DRDOS)
0x43 Linux native (sharing disk with DRDOS)
0x4D QNX 4.2 Primary
0x4E QNX 4.2 Secondary
0x4F QNX 4.2 Tertiary
0x50 DM (disk manager)
0x51 DM6 Aux1 (or Novell)
0x52 CP/M or Microport SysV/AT
0x53 DM6 Aux3
0x54 DM6
0x55 EZ-Drive (disk manager)
0x56 Golden Bow (disk manager)
0x5c Priam Edisk (disk manager) /* aclearcase/" target="_blank" >ccording to S. Widlake */
0x61 SpeedStor
0x63 System V/386 (such as ISC UNIX), GNU HURD or Mach
0x64 Novell Netware/286 2.xx
0x65 Novell Netware/386 3.xx
0x70 DiskSecure Multi-Boot
0x75 PCIX
0x77 QNX4.x
0x78 QNX4.x 2nd part
0x79 QNX4.x 3rd part
0x80 Minix until 1.4a
0x81 Minix since 1.4b, early Linux partition or Mitac disk manager
0x82 Linux swap or Solaris x86
0x83 Linux native
0x84 OS/2 hidden C: drive
0x85 Linux extended
0x86 NTFS volume set??
0x87 NTFS volume set??
0x93 Amoeba file system
0x94 Amoeba bad block table
0x9F BSD/OS
0xA0 Suspend to Disk
0xA5 FreeBSD/NetBSD/386BSD
0xA6 OpenBSD
0xA7 NeXTSTEP
0xA9 NetBSD
0xAC IBM JFS
0xB7 BSDI BSD/386 file system
0xB8 BSDI BSD/386 swap
0xC1 DRDOS/sec with 12-bit FAT
0xC4 DRDOS/sec with 16-bit FAT (< 32MB)
0xC6 DRDOS/sec with 16-bit FAT (>= 32MB)
0xC7 Syrinx
0xDB CP/M, Concurrent CP/M, Concurrent DOS or CTOS
0xE1 DOS access or SpeedStor with 12-bit FAT extended partition
0xE3 DOS R/O or SpeedStor
0xE4 SpeedStor with 16-bit FAT extended partition < 1024 cyl.
0xEB BeOS file system
0xEE EFI GPT
0xEF EFI System Partition
0xF1 SpeedStor
0xF2 DOS 3.3+ Secondary
0xF4 SpeedStor large partition
0xFE SpeedStor >1024 cyl. or LANstep
0xFF Xenix bad blocks table


2、disklabel
这个阶段是和windows最不一样的。其实这就是FreeBSD下的分区工具,没有什么神秘的。
这里需要搞清楚的是,fdisk的分区和disklabel的分区,fdisk分的区是磁盘的分区,而disklabel的分区是在fdisk的分区中再分出FreeBSD的分区。

在disklabel中分区,相当于在一个文件中把你要怎么分区写好,也就是所谓的“磁盘标签”。一般在两个步骤:
1)为每个fdisk分区创建disklabel
# disklabel -w ad2s1 auto
后面的auto是指磁盘的类型,如果不很少见的硬盘,就象上面一样直接指定为auto就可以了。

2)分区
# disklabel -e ad2s1
# /dev/ad2:
8 partitions:
# size offset fstype [fsize bsize bps/cpg]
a: 3419720 0 4.2BSD 2048 16384 28552
c: 3419720 0 unused 0 0 # "raw" part, don't edit

上面就是我的ad2的disklabel,我只分了一个区。说明如下:
一个fdisk分区里只能分8个区,也就是a b c d e f g h,所以在指定分区字母的时候,不要超出这个范围。
size:不用说了,就是指分区的大小,最大不要超过c中的数值。
offset:偏移量,说白了,就是说明这个分区从什么地方开始的,这个数值是相对于这个fdisk分区来说的,是一个相对量,可认从0开始。
fstype:有四种选择
unused:一般就用在c上,不用于真正的文件系统。
4.2BSD:文件系统都需要使用这个选项。
swap:交换区
vinum:做RAID用的
后面的fsize等用默认值就可以了,如果定要知道的话man disklabel

3 newfs
这就是所谓的创建文件系统。
# newfs -U /dev/ad2s1 //加上-U是加是softupdate支持
如果要使用fat32分区
# newfs_msdos -F 32 /dev/ad2s1

ok就是这样,不难吧!!!!

原文转自:http://www.ltesting.net