操作之前的建议:
刚装出来的系统,想要让FreeBSD的csh像bash那样按tab列出无法补齐的候选文件,在/etc/csh.cshrc中加入以下,然后注销重新登录即可:
#vi /etc/csh.cshrc set autolist |
博客环境:
系统版本:FreeBSD8.2-64bit
内核参数:
1、首先查看新添加的磁盘有没有被系统识别出:
dmesg | grep "sector" | awk ‘{print $1,$2}' |
第一列代表系统识别出的硬盘,第二列表示磁盘大小;我这里有三块盘:da0、da1、da2;
da1和da2是我刚挂上去的盘,没有任何分区,可用gpart show命令查看,博客后面会简单介绍下FreeBSD磁盘分区的基本概念;
可见当前默认的文件系统类型是:freebsd-ufs
现在需要挂载硬盘da1,当前的挂载情况如下:
2、FreeBSD下建议使用的磁盘分区方法是用sysinstall提供的菜单选项;另外,在BSD系统中,也可用fdisk 命令来划分slice分区(可理解为主分区),disklabel/bsdlabel来划分扩展分区;
2.1、以下是用sysinstall进行:
#sysinstall |
选择要进行分区的磁盘:
A使用整个磁盘 C创建slice分区 D删除 W把所做的修改正式写入磁盘:
可用A选择整个磁盘;我这里要把da1分两个去分别挂载到/data1和/data2两个目录下;
按磁盘C,输入分区大小:
选择分区类型,默认165是slice,131为ext2fs,130为swap;
两个slice分区建好如下,之后W写入,选择yes:
这里安装引导器可选None不安装,因为已经在第一块磁盘安装过了:
OK 之后看到write successfully 100%即成功,Q退到之前的fdisk界面,选择编辑磁盘标签:
在之前建好的2个slice分区上分别C新建扩展,分区类型为文件系统,并指定挂载点(挂载目录/data1和/data2已提前建好)
完成之后退出,df -h查看挂载情况:
用gpart show 也可查看到新建的分区:
3、编辑fatab文件,实现开机挂载,reboot验证:
以下内容摘录自红联linux论坛:http://www.linuxdiyf.com/bbs/thread-79059-1-1.html
一,基本概念。
在所有PC体系架构上安装的操作系统都只能分四个分区。这四个分区在不同的操作系统中有不同的说法,在windows和linux中,通常被称为主分区(primary partition),而在BSD风格的UNIX以及Solaris系统中被称为slice (英文原意为小碎片,不知道有没有好的翻译来表述)。slice和主分区是同一个概念,在PC上能安装的操作系统都能根据MBR中的分区表认出这样的主分区。在windows和linux中,一个硬盘可以分四个主分区,其中一个可作为扩展分区,再在扩展分区中划分逻辑分区,而其他三个主分区则只能作为最小的分区单位了。就是说,只能选择一个扩展分区,然后再在扩展分区中划分逻辑分区。扩展分区中包含的逻辑分区数目可以有很多个,查了资料,一种说法是最多64 个,还没有具体验证过,不过反正这个数目比较大,可把硬盘分得足够细。
而FreeBSD,则可以在每个slice中再划分更小的分区单位,在FreeBSD中硬盘的slice中,这种更小的分区单位被称为 partition,其概念和windows和linux中的逻辑分区的概念类似。这种更小的分区单位用小写字母a-h表示,共有8个,但是其中c分区有特殊含义,c分区表示该分区所在的整个slice(主分区)。就相当于在solaris中/dev/dsk/c0t0d0c2分区一样,在sparc体系的solaris系统中c0t0d0c2表示的是整个磁盘,因为solaris中没有其他表示整个磁盘的设备名称。从概念上讲FreeBSD中的/dev/ad0s1c 等同于 /dev/ad0s1
因此,在FreeBSD中,一个硬盘最多可划分(8-1)x4 = 28 个分区。原先老的FreeBSD系统中,逻辑分区d也有特殊用途,就是说,在老版本的FreeBSD系统中,每个硬盘最多能分(8-2)X4 = 24 个分区,但是现在这个d分区的特殊用途也已经淡化了,虽然用sysinstall划分逻辑分区的时候sysinstall会尽量避开使用d分区,但是今天经过实验验证,d分区标识也可以作为一个普通的数据存储分区标识。因此,以IDE硬盘为例在freebsd中第一块硬盘正常情况下可用的分区设备号为:/dev/ad0s1a /dev/ad0s2a /dev/ad0s3a /dev/ad0s4a /dev/ad0s1b /dev/ad0s2b /dev/ad0s3b /dev/ad0s4b /dev/ad0s1d /dev/ad0s2d /dev/ad0s3d /dev/ad0s4d /dev/ad0s1e /dev/ad0s2e /dev/ad0s3e /dev/ad0s4e /dev/ad0s1f /dev/ad0s2f /dev/ad0s3f /dev/ad0s4f /dev/ad0s1g /dev/ad0s2g /dev/ad0s3g /dev/ad0s4g /dev/ad0s1h /dev/ad0s2h /dev/ad0s3h /dev/ad0s4h
二, FreeBSD下分区工具的使用。
在FreeBSD下最方便的分区方法是使用sysinstall提供的菜单选项,根据提示来完成分主分区(slice)和分逻辑分区(partiton)的划分工作。 这个方法比较简单,很容易学会。
今天主要学习了一下命令行工具fdisk 和 disklabel(又名bsdlabel)的使用。
首先,fdisk是用来划分主分区的,也就是用来划分slice,这一点和linux系统有很大的不同 .
一般的使用方法:dd if=/dev/zero of=/dev/ad0 bs=1k count=1 #目的是先清除硬盘上原有的分区表,新硬盘可跳过这步。
fdisk -BI /dev/ad0 #在硬盘/dev/ad0上创建一个主分区(slice)。
看了一下fdisk的man文档,参数B表示在硬盘的MBR中写入一个标准引导记录,I选项表示将整个硬盘划分出一个slice.也就是说,命令行的分区工具fdisk只能在一个硬盘上划分出一个主分区,应该通过-f参数加配置文件可以定义并划分出四个主分区,但是光用fdisk提供的参数,好像只能划分出一个来。这一点上来说,FreeBSD的命令行分区工具做得还不够人性化,还是用sysinstall提供的界面来分区更方便。
disklabel/bsdlabel的使用:
disklabel -B -w /dev/ad0s1 auto disklabel -e /dev/ad0s1
查看了bsdlabel的man文档,参数B表示在该主分区中写入引导程序。按照handbook中关于FreeBSD引导过程的描述,fdisk 的 B参数是表示在硬盘的MBR中写入boot0(512字节),而bsdlabel中的B参数则表示在该主分区中写入该主分区的引导记录(并非主引导记录),即boot1(512字节,写在主分区的第一个扇区)和boot2(大概8K左右,写在分区的某个特定区域,并非文件系统中)。参数w即write,表示写入,此外还可用r参数读取。
[auto]表示在该主分区中自动划分出一个逻辑分区,有点类似于fdisk中的I参数。如果不加auto参数,则用disklabel -e /dev/ad0s1来分区划分出逻辑分区的时候,disklabel会自动打开一个编辑器,让你手工输入逻辑分区大小,偏移量等信息,然后保存后更据你编辑的信息来划分出逻辑分区。手工编写逻辑分区的信息需要对硬盘的知识比较了解,但是好处是可以很自由的安排逻辑分区的起始位置、大小以及分区名称等信息,而且可以更据FreeBSD的规则最多化出7个可用分区和一个特殊的c分区。而用auto参数字自动划分出一个逻辑分区的好处是不需要对硬盘有比较深入的了结,坏处是只能分一个可用的逻辑分区。
disklabel -e /dev/ad0s1 命令用来在该主分区(slice)中写入该逻辑分区的起始位置等信息。
执行完这条命令后,在/dev/目录下就会自动生成设备文件 ad0s1a 和ad0s1c ,如果是手工编辑逻辑分区信息生成多个分区的话,/dev下会有对应的设备文件生成,用newfs创建文件系统后就可以用该逻辑分区了。
以上命令在handbook中有描述,但是没有这么详细的说明,今天根据实验和man文档,以及自己的理解,写下这些备忘记录,以上理解应该是正确的。
综上所述fdisk工具是用来划分主分区(slice)的,他的操作对象是硬盘的第一个扇区(MBR),在MBR中写入标准引导程序(boot0),以及主分区的分区信息。而disklabel/bsdlabel是用来在主分区中划分逻辑分区的,他的操作对象是硬盘中主分区的第一个扇区,以及一些特殊区域,用来写入引导程序的第二、第三步(boot1和boot2)以及位于该主分区中的逻辑分区的分区信息以及标识号。
一般情况下,用fdisk和disklabel/bsdlabel进行分区不太方便也不直观,sysinstall应该是一个快速直观的选择。
通过阅读相关文档和实验以及和其他操作系统的分区方式和概念的对比,对FreeBSD的分区概念和分区工具的使用有了比较清晰的了解 .
三,一组有趣的实验
在实验的过程中,发现一个有趣的现象,即:在FreeBSD中无论是整个硬盘/dev/ad0整个主分区/dev/ad0s1还是主分区中的逻辑分区 /dev/ad0s1a
都可以用newfs直接创建文件系统然后挂到某个目录下使用。
首先,我对一个没有任何分区的硬盘做如下操作:newfs /dev/ad0 mount /dev/ad0 /mnt
发现没有任何错误和警告信息,该硬盘没有分区就直接可以用了,实际测试了一下,也确实正确。
然后对硬盘划分了四个主分区,再分别在四个主分区上创建文件系统:
newfs /dev/ad0s1 newfs /dev/ad0s2 newfs /dev/ad0s3 newfs /dev/ad0s4
mount /dev/ad0s1 /mnt/1 mount /dev/ad0s2 /mnt/2 mount /dev/ad0s3 /mnt/3 mount /dev/ad0s4 /mnt/4
同样没有任何错误和警告,这些主分区在没有进一步划分逻辑分区的情况下也可直接创建文件系统后使用。
最后,再在四个主分区中分别划分出几个逻辑分区,创建文件系统后当然也能使用,这是FreeBSD中默认的硬盘使用方式。
我甚至对代表整个主分区的c号逻辑分区上创建文件系统:newfs /dev/ad0s1c mount /dev/ad0s1c /mnt 这样也能使用,当然 如果划分了其他逻辑分区的情况下,这种用法会破坏其他逻辑分区,这种用法和:newfs /dev/ad0s1 mount /dev/ad0s1 /mnt 应该是一致的。
通过实验得出结论:在FreeBSD中,硬盘不需要分区,可直接创建文件系统而使用该硬盘。
创建分区的好处,是可以和其他操作系统共存一个硬盘上。
在FreeBSD系统上做完上述实验后,本人又想到linux上是否也可以不划分分区而直接使用整个硬盘呢?
立即做了一下实验,证实了我的想法是正确的,只不过linux的创建文件系统命令mkfs.ext3会发出警告,只要回答yes就可以直接在一个没有分区的硬盘上创建文件系统并mount到系统中使用了。
命令如下:mkfs.ext3 /dev/sdb mke2fs 1.32 (09-NOv-2002)
/dev/sdb is entire device, not just one partition!
Proceed anyway? (y,n) y
mount /dev/sdb /mnt
以上实验说明,在操作系统中,硬盘分区并非必需的,分区是为了更好的管理文件和与其他系统共存。
摘录的代码:
dd if=/dev/zero of=/dev/ad0 bs=1k count=1 #目的是先清除硬盘上原有的分区表
fdisk -BI /dev/ad0 #在硬盘/dev/ad0上创建一个主分区(slice)
disklabel -B -w /dev/ad0s1 auto disklabel -e /dev/ad0s1
for i in `egrep "^(ad|aacd|mlxd|mlyd|amrd|idad|twed|da|ar|ips|)[0-9]:" /var/run/dmesg.boot | cut -d':' -f1 | sort | uniq`
do
LN="`cat /var/run/dmesg.boot | grep ^$i | grep MB`" >/dev/null
echo ${LN}
fdisk /dev/${i} >/tmp/${i}
FOUND="1"
done
#!/bin/sh
#Get our Device Name
device=${1}
#Erase any existing bootloader
dd if=/dev/zero of=/dev/${device} count=1024
sleep 2
fdisk -I -B /dev/${DEVICE}
# Install new partition setup
fdisk -f /tmp/fdiskconfig /dev/${device}
sleep 1
本文转自Jx战壕 51CTO博客,原文链接:http://blog.51cto.com/xujpxm/1676207,如需转载请自行联系原作者