ArthurXF从业10年的CTO,受上海非凡学院邀请,进行PHP,CSS,FREEBSD等网络技能授课培训,有意向参加的,请联系.
  我们到/usr/ports/java/jdk16安装jdk16的时候,直接stop了。原来这个安装包是需要我们自己到http://download.java.net/jdk6/6u3/promoted/b05/index.html把三个安装包下载到/usr/ports/distfiles,才能安装的。
那我们就先下载:
wget http://www.java.net/download/jdk6/6u3/promoted/b05/jdk-6u3-fcs-src-b05-jrl-24_sep_2007.jar
wget http://www.java.net/download/jdk6/6u3/promoted/b05/jdk-6u3-fcs-bin-b05-jrl-24_sep_2007.jar
wget http://www.java.net/download/jdk6/6u3/promoted/b05/jdk-6u3-fcs-mozilla_headers-b05-unix-24_sep_2007.jar


还要到http://java.sun.com/javase/downloads/index.jsp下载
JDK DST Timezone Update Tool - 1.3.6
这里需要注册的,下载了以后上传到服务器/usr/ports/distfiles


另外还要到http://www.eyesbeyond.com/freebsddom/java/JDK16JRLConfirm.html下载
bsd-jdk16-patches-4.tar.bz2
然后上传到服务器/usr/ports/distfiles

还要到http://www.FreeBSDFoundation.org/cgi-bin/download?download=diablo-caffe-freebsd6-i386-1.6.0_07-b02.tar.bz2
下载diablo-caffe-freebsd6-i386-1.6.0_07-b02.tar.bz2
然后上传到服务器/usr/ports/distfiles

都下载好了,我们再进入jdk16目录开始安装了
cd /usr/ports/java/jdk16
make install clean

然后在/etc/profile添加以下几句信息
export PATH=$PATH:/usr/java/jdk1.5.0_07/bin:/usr/java/jdk1.5.0_07/jre/bin
export JAVA_HOME=/usr/java/jdk1.5.0_07
export CLASSPATH="./:/usr/java/jdk1.5.0_07/lib:/usr/java/jdk1.5.0_07/jre/lib"
export LD_LIBRARY_PATH=/usr/java/jdk1.5.0_07/jre/lib/i386:/usr/java/jdk1.5.0_07/jre/lib/
Tags: , ,

IPFW中文man

2008/10/07 00:06 ArthurXF
  ipfw是FreeBSD下的一个用户界面,它用来控制ipfw防火墙和流量整形。


  ipfw的配置,也叫做规则集,它是由一系列的规则组成的,这些规则的编号是从1到65535。通过ipfw的数据包可以来自协议栈的许多各个的地方(这主要依赖于数据包的来源和目的,某些数据包很可多次经过防火墙)。数据包在通过防火墙的时候,要和防火墙规则集逐条对比。如果发现匹配的规则,则执行相应规则的动作。

  在特定的规则动作和系统设置下,数据包在匹配完一个规则后,可能在某些规则之后重新进入防火墙。

  一个ipfw规则集总是包含一个默认的规则(编号为65535),这个默认规则匹配所有的数据包,不能修改或删除。根据内核配置的不同,这个默认规则或者是拒绝所以数据包通过,或者是允许所有数据包通过。

  如果规则集中存在一个或多个包含有keep-state(状态保持)或limit(限制)的规则,那么ipfw就表现为状态保持。例如:当这种规则匹配了一个数据包时,ipfw将创建一个动态规则,让后来的,同这个数据包的地址和端口参数严格一致的数据包,与这个动态规则相匹配。

  这些动态规则,都有一个有限的生存期。生存期在第一次遇到check-state、keep-state或者是limit规则时被检查。这些动态规则的典型应用,是用来保证合法的数据包在通过时开启防火墙。查看下面的“状态防火墙”和“示例”章节,获取更多关于状态保持的信息。

  包括动态规则在内的所有规则,都有几个相关的计数器:一个包计数器,一个字节计数器,一个记录计数器和一个用来提示最后匹配时间的时间戳。这些计数器都可以被ipfw命令显示和清零。

  可以用add命令来添加规则;可以用delete命令来删除单个或一组规则;可以用flush命令来删除所有的规则(set 31除外);可以用show和list命令来显示包括计数器在内的信息。最后,计数器可以被zero和resetlog命令清零。

  并且,每个规则隶属于32个不同的规则集中的一个。有一些ipfw的命令可以独立地操作这些规则集,例如:启动、禁止、交换规则集;把一个规则集中的所有规则移动到另一个规则集;删除一个规则集中的所有规则。这对于安装临时配置,或者是测试配置是非常有用的。查看“规则的规则集”一节,获取更多关于set的信息。

  以下是ipfw命令可以利用的选项:

-a  使用 list 时,列出数据包的计数器,show命令包含这个选项。

-b  只显示动作和注释,不显示规则体。包含-c选项。

-c  进入或显示规则时,用紧凑格式输出。例如:在没有任何附加意义的情况下,不显示“ip from any to any”字符串。

-d  在list时,在显示静态规则的同时,显示动态规则。

-e  在list时,如果指定了-d选项,则显示过期的动态规则。

-f  对于有些会导致问题的命令,不要提出确认的询问。例如:flush命令。哪果一个进程没有相关的tty,这个是默认被包含的选项。(译注:没看懂这句话的意思,好像是如果不是在tty中输入的命令,比如在scripts中,默认是有-f的。)

-n  只检查命令的语法,不真正执行命令。

-N  尝试在输出中,解析地址和服务名。

-q   当新增 (add)、归零(zero)、重置日志(resetlog)或清除(flush) 时,不要显示任何回应信息(就像使用-f选项一样)。这对于在脚本里利用ipfw命令来调整防火墙规则(例如执行“sh /etc/rc.firewall”脚本)、或者是处理与一个远程登录相关的有多条ipfw命令的,是非常有用的。同时,它防止无意间,在规则中加入或删除一个列表而导致的错误。(译注:没看懂,好像下面是一个例子。)在正常的模式,默认内核配置下,一个flush命令会输出一个信息。因为所有的规则都被清除掉,这个消息又不能传送到登录的进程中,脚本后面的规则将无法执行,所以将导致远程连接中断。这时,只好回到计算机前去工作了。

-S 当列出一个规则的时候,显示每条规则的规则集号。如果没有指定这个标识,则被禁止的规则不再显示。

-s [field]
当显示pipe时,按照四个计数器之一排序显示。(对于所有的数据包、当前数据包或者是字节数)

-t 当列出时,显示最后匹配的时间戳。(显示用ctime()转化后的时间)

-T 当列出时,显示最后匹配的时间戳。(从新纪元到现在的秒数)。这个格式更容易被脚本处理。

  为了使配置更容易,规则可以写到一个文件里供ipfw处理,语法规则参照大纲栏最后一行(译注:指本文最前面的语法部分最后一行,即:“ipfw [-cfnNqS] [-p preproc [preproc-flags]] pathname”)。注意必须是绝对路径。这个文件会被逐行读取并且将作为ipfw工具的参数处理。

  作为选择,你还可以使用-p preproc参数来使用预处理程序,其中路径是用管道来传入的。可以使用的预处理程序包括cpp和m4。如果preproc不是以"/"开头,那么将搜索PATH里的路径。在使用它的时候,要谨慎,因为在很多时候,ipfw启动时,系统文件可能没有挂接(比如:文件系统是通过NFS挂接的)。一旦使用了 -p参数,所有其它的参数,都被传送到预处理程序去等待处理。


  ipfw的pipe和queue命令用来配置流量整形,你可以下面的“TRAFFIC SHAPER (DUMMYNET) CONFIGURATION”节看到看到相关内容。

  如果系统的world和内核不能保持一致,ipfw的ABI将失效,以防你加入任何规则。这样能保证你的顺利地完成启动过程。你可以利用ipfw临时禁止的机会登录你的网络,来修复你的问题。


PACKET FLOW(数据包流程)


  一个数据包在几个内核变量的控制下,在协议栈的多个地方被防火墙检查。这些地方和变量如下图所示,要在头脑中保持下图,它对于规划一下正确的规则集是非常重要的。


^ 到上层 V
| |
+----------->-----------+
^ V
[ip(6)_input] [ip(6)_output] net.inet(6).ip(6).fw.enable=1
| |
^ V
[ether_demux] [ether_output_frame] net.link.ether.ipfw=1
| |
+-->--[bdg_forward]-->--+ net.link.bridge.ipfw=1
^ V
| 到设备 |



  如图所示,根据数据包的源和目的,以及系统配置的不同,同一个数据包穿过防火墙的次数在0和4之间变化。

  需要注意的是,在包通过不同栈的时候,头会被加上或剥离,可能会导致这些包被检查不到。例如:当ipfw被ether_demux()调用的时候,进入的包将包括MAC头;而当ipfw被ip_input()或者ip6_input()调用的时候,同一个数据包的MAC头将被剥离。

  还需要注意的是:不论检查发生在什么地方,也不论数据包源自哪里,每个数据包也整个规则进行对照。(译注:是整个规则集吗?有时候只对照一部分的时候就中止检查)。如果一个规则包含的一些匹配模型或动作不符合某处的要求(比如:在ip_input或ip6_input处匹配MAC头),那么匹配模型将不会被匹配。然而,带有not前缀操作符的匹配模型,总是可以和这些数据包相匹配。所以,如果有必要,在有很多地方可以选择的时候,有能力的程序员可以为写出的规则集选择一个合适的位置。skipto规则在这儿是非常有用的。例如:

# packets from ether_demux or bdg_forward
ipfw add 10 skipto 1000 all from any to any layer2 in
# packets from ip_input
ipfw add 10 skipto 2000 all from any to any not layer2 in
# packets from ip_output
ipfw add 10 skipto 3000 all from any to any not layer2 out
# packets from ether_output_frame
ipfw add 10 skipto 4000 all from any to any layer2 out

(对,在这儿,没有办法区别ether_demux和bdg_forward)


SYNTAX(语法规则)

  通常,每个关键字或者参数都是作为独立的命令行参数来提供的,前后都不能有空格。关键字是区分大小写的,而参数按照它们本身的含义,可以是,也可以不是区分大小写的。(例如,udi要区分大小写,而hostname没有必要区分大小写)

  在ipfw2中,为了提高可读性,可以在逗号后面加上一个空格。当然,你也可以把整个命令(包括参数)当作一个参数来处理(译注:就是加上双引号,作为一个字符串放到某个命令中)。例如,以下几种格式效果相同:

ipfw -q add deny src-ip 10.0.0.0/24,127.0.0.1/8
ipfw -q add deny src-ip 10.0.0.0/24, 127.0.0.1/8 (译注:127前面有个空格)



RULE FORMAT(规则格式)

  ipfw的规则格式如下:

[rule_number] [set set_number] [prob match_probability] action
[log [logamount number]] [altq queue] [{tag | untag} number] body

  规则的 body 部分用来设定包过滤的信息,具体细节如下:

Layer-2 header fields 第二层头段,什么时候可用

IPv4 and IPv6 Protocol TCP, UDP, ICMP, 协议等

Source and dest. addresses and ports  源和目的。地址和端口

Direction 数据包的流向,见“流量整形”一节

Transmit and receive interface 传输和接收界面,用名字或地址表示

Misc. IP header fields 组合IP头字段,包括版本、服务类型、报文长度、唯一标识、分段标志、生存期

IP options         IP选项字段

IPv6 Extension headers IPv6扩展头,包括分片报头、中继选项报头、路由报头、路路由选择报头、IP层安全服务选项、Source routing rthdr0, Mobile IPv6 rthdr2(译注:最后两项不知道怎么翻译)

IPv6 Flow-ID             IPv6的流量标识

Misc. TCP header fields 组合tcp头字段,有TCP标志(syn,fin,ack,rst等)、序列号、回复号,窗口等。

TCP options              TCP的选项

ICMP types ICMP包

ICMP6 types ICMP6包

User/group ID 本地栈所归属的用户和组

Divert status 是不是源自一个divert接口(例如:natd(8))

  需要注意,上面的很多信息中,比如源MAC和IP地址、TCP/UDP端口等,是比较容易伪造的,所以只对这些信息进行过滤不能保证达到预期的效果。


rule_number
  每个规则都有规则号,规则号从1-65535。65535是保留的默认规则。ipfw将按规则号的顺序依次检查这些规则。可以有多个规则用同一个规则号,在这种情况下,将按照它们的添加顺序依次检查或列出。如果一个规则没有指定规则号,内核将自动赋于一个规则号,使它成为默认规则前的最后一个规则(即小于65535)。自动添加的规则号有个步进值,在不大于65535的情况下,每次添加规则时,都自动加上这一步进值。它默认是100,对应于net.inet.ip.fw.autoinc_step这个内核变量。

set set_number

  每个规则都对应于一个规则集编号,规则集编号取值为:0-31。规则集可以单独地被禁止或启用,所以,它对于规则集的原子操作是
至关重要的。它还可以轻松地删除掉一组规则。如果一个规则没有指定规则集编号,它默认的规则集编号就是0。规则集编号31是个特殊的规则集,它不能被禁止,也不能用ipfw的flush命令删除,它是默认规则的规则集。规则集编号31可以用ipfw delete set 31命令删除。(译注:这在远程调试排斥式防火墙时特别有用,防止把自己锁在外面。)


 prob match_probability

  这个语句只用来指定可能性(从0到1之间浮点值)。这在很多随机丢包的应用中,或者(在同dummynet联用的情况下)模拟多路径条件下无序包传递的效果中,是非常有用的。

  注意:在检查时,这个条件比其它所有条件都先被检查,包括会有副作用的keep-state或者check-state。

 log [logamount number]

  当一个包匹配到一个有log关键字的规则时,一条消息会被syslogd记录到一个LOG_SECURITY设备中。记录动作只会在同时满足下面两个条件时才发生:1、内核选项net.inet.ip.fw.verbose等于1(当编译内核时带着IPFIREWALL_VERBOSE参数时,这是默认值);2、所记录的包数量还达不到logamount number所指定的数量。如果没有指定logamuont,则记录的包的上限受内核变量net.inet.ip.fw.verbose_limit的限制。在这两种情况中,logamount取值为零时,则取消记录数量的限制。

  当记录数量达到上限时,可以通过重置记录计数器或包计数器的方式再重新开始记录。详细情况请查看resetlog命令。

注意:记录的时间是在所有的包检测条件都完成之后,并且在采取相应的动作(接受、拒绝等)之前。

tag number

  当一个包和一个带有tag关键字的规则相匹配时,一个指定的数字标签就被附加到这个包上,数字标签的范围是1-65534。这个标签作为一个内部的记号(它不会从线路上发送出去),以便后来可以区分这些数据包。这有时候非常有用,比如:提供接口之间相互信任和开启一个基于安全的过滤。一个包可以同时有多个标签。标签是“顽固的”,意思就是只要标签被应用到某个数据包上,那么它就一直存在,直到被明确地解除为止。这个标签在内核中一直存在,但是一旦数据包离开内核,标签就会消失。例如:在当把数据包发送到网络或者发送到divert栈时,标签就会消失。

  要检查已经存在的标签,可以用tagged规则选项,要删除存在的标签,用untag关键字。

  注意:既然标签是在内核空间内一直存在的,所以它们就可以被内核的网络子系统(使用mbuf_tags设备)设置或者是取消,而不仅仅依靠ipfw的tag和untag关键字。例如:可以存在一个netgraph(4)节点做流量分析,并且给数据包打上标签,以供后面的防火墙进行检查。

untag number
  
  当一个数据包匹配一个带有untag关键字的规则时,将在这个数据包所附加的标签中查找untag number所指定的标签号,如果找到,则将其删除。对于数据包上的其它标签号,则原封不动。

altq queue(译注:交错队列, Alternate Queuing,参见PF文档)

  当一个数据包匹配了一个带有altq关键字的规则时,将被附加上一个指定队列(见altq(4))的ALTQ标识符。注意,ALTQ标签只适用于从ipfw“向外出”的数据包,而不是被防火墙拒绝或者准备到divert界面的数据包。还要注意的是,当处理数据包的时候,如果没有足够内存,那么数据包将不会被打上标签,所以,一个明智的做法,是使你的“默认”ALTQ队列规则记录下这种情况。如果有多个altq规则匹配于同一个数据包,那么只加上第一条规则的ALTQ类别标签。那样做的效果是:在规则集中靠前的altq队列规则能起到流量整形的作用,而靠后的规则只达到过滤的效果。例如:把还有ALTQ标签的、check-state和keep-state规则放到规则集的后部,有提供真正的包过滤的作用。

  在IPFW使用altq的名字来检查队列之前,你必须用pfctl(8)工具来设置队列。一旦重置ALTQ命令,那么包含队列标识符的规则将过期,需要被重新读取才能生效。过期的队列标识符将会产生错误的分类。

  所有的ALTQ系统进程都可以被ipfw的enable altq和disable altq命令启用或关闭。ALTQ流量整形有真实规则动作,永远附加在ALTQ标签之后,和net.inet.ip.fw.one_pass毫无关系。
Tags: ,
我们在umount的时候,有时候会碰到device is busy 的情况,那么怎么办呢?办法很简单。
先使用fuser命令。
如果你的系统命令中没有fuser,可以先安装
cd /usr/ports/sysutils/fuser/
make install

安装结束之后,fuser这个命令被放到/usr/local/bin/中
所以我们使用
cd /usr/local/bin/
fuser -ck 你的挂载路径(参数作用是直接KIll使用该路径的进程)
umount 你的挂载路径

这样我们就把设备忙的mount取消了。本文由ArthurXF倾情奉献。
Tags: ,

DD命令使用大全

2008/10/02 11:47 ArthurXF
dd 是 Linux/UNIX 下的一个非常有用的命令,作用是用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换。

1. 命令简介

dd 的主要选项:

指定数字的地方若以下列字符结尾乘以相应的数字:

b=512, c=1, k=1024, w=2, xm=number m

if=file

输入文件名,缺省为标准输入。

of=file

输出文件名,缺省为标准输出。

ibs=bytes

一次读入 bytes 个字节(即一个块大小为 bytes 个字节)。

obs=bytes

一次写 bytes 个字节(即一个块大小为 bytes 个字节)。

bs=bytes

同时设置读写块的大小为 bytes ,可代替 ibs 和 obs 。

cbs=bytes

一次转换 bytes 个字节,即转换缓冲区大小。

skip=blocks

从输入文件开头跳过 blocks 个块后再开始复制。

seek=blocks

从输出文件开头跳过 blocks 个块后再开始复制。(通常只有当输出文件是磁盘或磁带时才有效)。

count=blocks

仅拷贝 blocks 个块,块大小等于 ibs 指定的字节数。

conv=conversion[,conversion...]

用指定的参数转换文件。

转换参数:

ascii 转换 EBCDIC 为 ASCII。

ebcdic 转换 ASCII 为 EBCDIC。

ibm 转换 ASCII 为 alternate EBCDIC.

block 把每一行转换为长度为 cbs 的记录,不足部分用空格填充。

unblock 使每一行的长度都为 cbs ,不足部分用空格填充。

lcase 把大写字符转换为小写字符。

ucase 把小写字符转换为大写字符。

swab 交换输入的每对字节。

noerror 出错时不停止。

notrunc 不截短输出文件。

sync 把每个输入块填充到ibs个字节,不足部分用空(NUL)字符补齐。


2.实例分析

       2.1.数据备份与恢复

               2.1.1整盘数据备份与恢复

               备份:

[Copy to clipboard] [ - ]
CODE:
dd if=/dev/hdx of=/dev/hdy

将本地的/dev/hdx整盘备份到/dev/hdy

[Copy to clipboard] [ - ]
CODE:
dd if=/dev/hdx of=/path/to/image

将/dev/hdx全盘数据备份到指定路径的image文件

[Copy to clipboard] [ - ]
CODE:
dd if=/dev/hdx | gzip >/path/to/image.gz

备份/dev/hdx全盘数据,并利用gzip工具进行压缩,保存到指定路径
               恢复:

[Copy to clipboard] [ - ]
CODE:
dd if=/path/to/image of=/dev/hdx

将备份文件恢复到指定盘

[Copy to clipboard] [ - ]
CODE:
gzip -dc /path/to/image.gz | dd of=/dev/hdx

将压缩的备份文件恢复到指定盘

               2.1.2.利用netcat远程备份

[Copy to clipboard] [ - ]
CODE:
dd if=/dev/hda bs=16065b | netcat < targethost-IP > 1234

在源主机上执行此命令备份/dev/hda

[Copy to clipboard] [ - ]
CODE:
netcat -l -p 1234 | dd of=/dev/hdc bs=16065b

在目的主机上执行此命令来接收数据并写入/dev/hdc

[Copy to clipboard] [ - ]
CODE:
netcat -l -p 1234 | bzip2 > partition.img
               netcat -l -p 1234 | gzip > partition.img

以上两条指令是目的主机指令的变化分别采用bzip2  gzip对数据进行压缩,并将备份文件保存在当前目录。

               2.1.3.备份MBR

               备份:

[Copy to clipboard] [ - ]
CODE:
dd if=/dev/hdx of=/path/to/image count=1 bs=512

备份磁盘开始的512Byte大小的MBR信息到指定文件
               恢复:

[Copy to clipboard] [ - ]
CODE:
dd if=/path/to/image of=/dev/hdx

将备份的MBR信息写到磁盘开始部分

               2.1.4.备份软盘

[Copy to clipboard] [ - ]
CODE:
dd if=/dev/fd0 of=disk.img count=1 bs=1440k

将软驱数据备份到当前目录的disk.img文件

               2.1.5.拷贝内存资料到硬盘

[Copy to clipboard] [ - ]
CODE:
dd if=/dev/mem of=/root/mem.bin bs=1024

将内存里的数据拷贝到root目录下的mem.bin文件

               2.1.6.从光盘拷贝iso镜像

[Copy to clipboard] [ - ]
CODE:
dd if=/dev/cdrom of=/root/cd.iso

拷贝光盘数据到root文件夹下,并保存为cd.iso文件              

       2.2.增加Swap分区文件大小

[Copy to clipboard] [ - ]
CODE:
dd if=/dev/zero of=/swapfile bs=1024 count=262144

创建一个足够大的文件(此处为256M)

[Copy to clipboard] [ - ]
CODE:
mkswap /swapfile

把这个文件变成swap文件

[Copy to clipboard] [ - ]
CODE:
swapon /swapfile

启用这个swap文件

[Copy to clipboard] [ - ]
CODE:
/swapfile swap swap defaults 0 0

在每次开机的时候自动加载swap文件, 需要在 /etc/fstab 文件中增加一行

       2.3.销毁磁盘数据

[Copy to clipboard] [ - ]
CODE:
dd if=/dev/urandom of=/dev/hda1

利用随机的数据填充硬盘,在某些必要的场合可以用来销毁数据。执行此操作以后,/dev/hda1将无法挂载,创建和拷贝操作无法执行。

       2.4磁盘管理

               2.4.1.得到最恰当的block size

[Copy to clipboard] [ - ]
CODE:
dd if=/dev/zero bs=1024 count=1000000 of=/root/1Gb.file
               dd if=/dev/zero bs=2048 count=500000 of=/root/1Gb.file
               dd if=/dev/zero bs=4096 count=250000 of=/root/1Gb.file      
               dd if=/dev/zero bs=8192 count=125000 of=/root/1Gb.file

通过比较dd指令输出中所显示的命令执行时间,即可确定系统最佳的block size大小

               2.4.2测试硬盘读写速度

[Copy to clipboard] [ - ]
CODE:
dd if=/root/1Gb.file bs=64k | dd of=/dev/null
               dd if=/dev/zero of=/root/1Gb.file bs=1024 count=1000000

通过上两个命令输出的执行时间,可以计算出测试硬盘的读/写速度      

               2.4.3.修复硬盘

[Copy to clipboard] [ - ]
CODE:
dd if=/dev/sda of=/dev/sda

当硬盘较长时间(比如1,2年)放置不使用后,磁盘上会产生magnetic flux point。当磁头读到这些区域时会遇到困难,并可能导致I/O错误。当这种情况影响到硬盘的第一个扇区时,可能导致硬盘报废。上边的命令有可能使这些数据起死回生。且这个过程是安全,高效的。
Tags: ,
文介绍手工为FreeBSD添加新硬盘的一般性方法。假设我们的FreeBSD已经有了一块IDE硬盘,我们需要为它添加一块新的IDE硬盘,并把新添加的硬盘的所有空间作为一个分区加载到/disk1下面。

基础知识

FreeBSD分区描述符为从"a"到"h"的8个字母。根据惯例,分区"c"被保留用作描述整个磁盘,"a"用作标识根分区,"b"用作标识交换分区。对于新添加的硬盘,我们常常只建立一个分区,标识为"e"。

IDE硬盘标记为ad,而SCSI硬盘标记为da,从0开始计数,因此,我们新添加的IDE硬盘将作为ad1出现在系统中。


一般步骤

把新的IDE硬盘接入系统,并确认开机以后系统找到了新添加的硬盘。可以通过检查/var/run/dmesg.boot来确认系统是否找到新添加的硬盘。

准备

vms# dd if=/dev/zero of=/dev/rad1 bs=1k count=1

1+0 records in

1+0 records out

1024 bytes transferred in 0.000822 secs (1245640 bytes/sec)

vms#

初始化磁盘

vms# fdisk -BI ad1

******* Working on device /dev/ad1 *******

fdisk: invalid fdisk partition table found

vms#


建立FreeBSD分区


vms# disklabel -B -w -r ad1s1 auto

vms# Feb 23 14:01:40 /kernel: ad1: cannot find label (no disk label)

Feb 23 14:01:40 /kernel: ad1s1: cannot find label (no disk label)

Feb 23 14:01:40 /kernel: ad1: cannot find label (no disk label)

Feb 23 14:01:40 /kernel: ad1s1: cannot find label (no disk label)

vms#


建立逻辑分区


vms# disklabel -e ad1s1


type: unknown

disk: amnesiac

label:

flags:

bytes/sector: 512

sectors/track: 63

tracks/cylinder: 16

sectors/cylinder: 1008

cylinders: 18931

sectors/unit: 19083393

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: 19083393 0 unused 0 0 # (Cyl. 0 - 18931*)

e: 19083393 0 4.2BSD 4096 8192 16 # (Cyl. 0 - 18931*)


格式化分区,创建文件系统


vms# newfs /dev/ad1s1e

Warning: Block size and bytes per inode restrict cylinders per group to 67.

Warning: 3968 sector(s) in last cylinder unallocated

/dev/ad1s1e: 19083392 sectors in 4660 cylinders of 1 tracks, 4096 sectors

9318.1MB in 70 cyl groups (67 c/g, 134.00MB/g, 8512 i/g)

super-block backups (for fsck -b #) at:

32, 274464, 548896, 823328, 1097760, 1372192, 1646624, 1921056, 2195488, 2469920, 2744352, 3018784, 3293216, 3567648,

3842080, 4116512, 4390944, 4665376, ...


加载分区

vms# mkdir -p /disk1

vms# mount -t ufs /dev/ad1s1e /disk1
分页: 6/14 第一页 上页 1 2 3 4 5 6 7 8 9 10 下页 最后页 [ 显示模式: 摘要 | 列表 ]