Solaris管理本地磁盘

Solaris管理本地磁盘 

http://blog.csdn.net/a3z2008/article/details/7220916

源文档 <http://blogold.chinaunix.net/u2/60332/showart_2244499.html>
---------------------Solaris管理本地磁盘-----------------------------------

盘(软盘和硬盘)及光盘(CD和DVD)是当前最常见的数据存储器,它们具有类似的数据存储结构和读取方法。虽然近几年来各种存储技术层出不穷,但最为便利、使用最为广泛的还是硬盘存储。
4.1  磁盘基本知识
几乎每个台式机或服务器都会有一个或多个硬盘驱动器。典型的大型机(mainframe)和超级计算机甚至会和数以百计的硬盘驱动器连接。硬盘尺寸有很多种,现在普遍使用的是3.5英寸硬盘(用于台式机或服务器),2.5英寸的硬盘基本上用于笔记本电脑中。
1.磁盘的物理结构
一个磁盘通常由多个碟片堆叠在一个轴上构成。读写磁头在盘的中心和边缘之间做径向移动,同时轴心进行转动,从而能够快速地读写数据。磁头在盘片的双面进行读写数据。如图4-1所示。
图4-1  硬盘的物理结构
注:请注意区分硬盘(hard disk)和硬盘驱动器(hard disk drive)这两个术语。自1956年IBM推出第一台硬盘驱动器IBM RAMAC 350以来,硬盘的基本结构就几乎没变过。它的存储部分(碟片)和机械电路驱动部分(驱动器)从来都没有分离过,二者合在一起构成一个硬盘盒。严格地说,硬盘实际上仅指硬盘盒体里的存储部分(即碟片),而硬盘驱动器指的则是硬盘盒体里的电路板、电机、磁头等机械电路驱动设备。但使用者通常都习惯用硬盘来统称整个硬盘盒体。
2.磁盘的性能指标
(1)容量
磁盘上信息的存储是以同心圆的形式排列的,每一个圆称为一个磁道。半径方向单位长度内的磁道数目称为道密度Dt,沿圆周单位长度上的信息比特数称为位密度Db,道密度与位密度的乘积叫做面密度Da,即Da = Dt×Db。Da越大表明一个盘片上能存储的信息量就越大。但面密度的提高会使相邻磁道间的数据干扰加大,磁头在磁道上进行数据读写时易发生偏离,差错机率增大。目前最新的垂直级化技术可有效地降低干扰因素。硬盘的容量与碟片数、面密度关系密切,这两项数值越大则容量越大。但是碟片数的增加会使硬盘体积增厚,因此单碟容量的大小直接关系到整个硬盘容量的大小,但随着磁碟密度的提高,磁头就必须随之越来越灵敏。日立公司于2007年6月推出的“Deskstar 7K1000”单碟容量高达200GB,总容量高达1TB。
(2)转速
转速是磁盘所有指标中除了容量之外最引人注目的性能参数,以每分钟多少转(RPM)为单位。转速对于硬盘传输速度和持续传输速度至关重要,转速越快,硬盘取得及传送数据的速度也就越快。目前,硬盘转速大致有4200RPM、5400RPM、7200RPM、10000RPM和15000RPM。
(3)平均寻道时间
平均寻道时间指的是磁头到达目标数据所在磁道的平均时间,它直接影响硬盘的随机数据存取速度。影响平均寻道时间的主要决定因素是磁头读写臂的运行速度,另外也跟单碟容量有关。单碟容量越高说明单碟的磁道数越多,磁道数的增加意味着磁道间距离的缩短,而磁头从一个磁道转移到另一个磁道所需的就位时间就会缩短,这将有助于随机数据传输速度的提高。而磁道内线性磁密度的增加则和硬盘的持续数据传输速度有着直接的联系,磁头技术的发展确保了这个增长不会因为磁头的灵敏度的限制而放慢速度。所以在很多时候,更高单碟容量的5400RPM硬盘会比单碟容量较低的7200RPM硬盘速度更加快。目前硬盘平均寻道时间大约在10ms左右。
(4)缓存
缓存也是磁盘相当重要的一个参数,其大小也会直接影响到磁盘的整体性能。在数据的读取过程中,硬盘里的控制芯片发出指令,将系统指令正在读取的簇的相邻的下一个或几个簇的数据读入硬盘高速缓存。这样,当系统指令开始要读取下一个簇的数据的时候,硬盘便不需要重新开始一个读取动作,只需要将缓存中的数据传送到系统主存中去就行了。因此缓存容量的加大可以容纳更多的预读数据,这样大大缩短系统等待的时间。目前主流硬盘的缓存通常为8MB和16MB。
(5)传输速率
传输速率分为内传输速率与外传输速率。内传输速率是从硬盘到缓存的传输速度,外传输速率是从缓存到通信接口的传输速度。内传输速率更能反映硬盘的实际表现,通常以每秒MB为单位。目前,主流硬盘的传输速度通常为50~100MB/S。
更多信息可参见:http://stor-age.zdnet.com.cn/stor-age/2004/0227/399095.shtml
3.硬盘接口
硬盘接口类型有ST506、IDE、EIDE、ESDI、Ultra-ATA、SCSI、SATA、SAS(串行SCSI)等多种。主流硬盘接口主要是IDE(E-IDE/ATAPI)和SCSI接口,以及最新的SATA、SAS接口。移动硬盘接口有USB等。SCSI、SATA、SAS接口主要是在服务器上使用。
4.磁盘的数据结构
在谈及磁盘的数据存储时,通常会涉及到磁盘的3个概念:sector、track、cylinder,如图4-2所示。

图4-2  硬盘的数据存储结构
l        Sector:扇区(sector)是盘片的最小的可寻址单元,一个扇区可容纳512字节,也叫做磁盘块(disk block)。扇区会被集合成簇(cluster),簇也叫数据块,操作系统通常以数据块为单位对硬盘进行读写。
l        Track:磁道,多个扇区端对端地连成一个圆圈构成一个磁道,容量随半径的增加而增大。
l        Cylinder:磁柱,也叫柱面。构成硬盘的每个碟片都被划分为数目相等的磁道,并从外缘的“0”开始编号,具有相同编号的磁道形成一个圆柱,称之为磁盘的柱面。因此硬盘的柱面数和一个碟片上的磁道数是相同的。
处在外面的磁道比处在里面的磁道拥有更多的扇区,能容纳更多的数据。但是Solaris操作系统却以固定大小的方式使用磁盘,即每个Track的Sector数量是固定的。磁柱、磁道、扇区(块)的比例关系可通过prtvtoc命令查看(以下示例仅显示与此有关的输出,其他输出信息略)

不同大小的硬盘,每个Cylinder中track的数量不同,每个Track中Sector的数量也会不同

# prtvtoc /dev/dsk/c0t0d0s2
*     512 bytes/sector
*     936 sectors/track
*       8 tracks/cylinder
*    7488 sectors/cylinder
*   38345 cylinders
*   38343 accessible cylinders
同时,由于磁盘的结构及磁头的读写方式,决定了最有效的数据操作是对处于同一个Cylinder上的Sector进行数据读写。
在2007年,国际磁盘驱动器设备与材料协会(IDEMA International Disk Drive, Equipment and Materials Association)批准了一项新的标准Long Block Data(LBD)。LBD终于扩大了保持30多年不变的硬盘基本块(Basic Block)的大小,将扇区从512 字节扩大到了4 096字节。目前使用新标准的硬盘还未上市。

4.2  分区的概念
我们在使用磁盘的时候会把磁盘分成几个不同的区域,这些区域在Solaris中通常叫做分片(slice),Solaris OS以柱为单位对磁盘进行分片操作,如图4-3所示。
图4-3  典型的Solaris硬盘分区示意图
图4-3是典型的硬盘分区示意图,一个硬盘被分成6个分片,各分片的传统用途如下。
l        Slice 0:根文件系统。
l        Slice 1:交换分区(Swap)。
l        Slice 3:/var文件系统,各种日志、记录文件都放在这个目录中。
l        Slice 5:/opt文件系统,通常用来存放可选的软件包。
l        Slice 6:/usr文件系统,通常用来存放系统的库文件与二进制文件(windows中叫做可执行文件)。
l        Slice 7:/export/home文件系统,通常是系统中用户家目录所在地(用户登录后的当前工作路径)。
分片的命名惯例
对于每一个磁盘分片,通常都以cxtxdxsx的形式表示,其中c/t/d/s的含义分别解释如下。
l        C代表controller number,控制器标号;表示主机总线适配器HBA(Host Bus Adapter)、控制系统和磁盘单元间的通信,HBA负责传送和接收命令与数据到设备,以连续的数字表示c0,c1,c2……
l        T代表target number,目标编号;分配给每个磁盘、磁带、CDROM等的唯一硬件地址,t0,t1,t2,t3……有些外部磁盘驱动器的背板上有地址切换开关,某些内部磁盘本身有跳线可以用来指定目标编号。
l        D代表disk number,磁盘编号;通常也叫逻辑单元号LUN(logical unit number),这个数字反映的是在目标位置上的磁盘号。
l        S代表slice number,分区编号,通常从0~7。
SCSI架构的本地磁盘命令示意图如图4-4所示。
图4-4  SCSI架构的本地磁盘命名示意图
4.3  设备的名字
在Solaris OS中,设备的名字有3种:逻辑设备名、物理设备名、实例名。
l        逻辑设备名指到/devices目录中的物理设备名的符号链接。
l        物理设备名包含了硬件信息,由一串节点名字组成,用/ 间隔。
l        实例名是以内核为系统的每个设备指定的缩写名字(物理设备名的缩写),由字母和数字组成,比如富士通的SPARC架构的服务器通常以fjgi0代表第1块千兆网卡。
(1)查看逻辑设备名(以逻辑设备名c1t0d0s2为例)。
# ls -l /dev/dsk/c0t0d0s2
lrwxrwxrwx   1 root  root  44 9月 13日 08:28 /dev/dsk/c0t0d0s2 >
../../devices/pci@80,4000/scsi@4/sd@0,0:c
从输出中可以看到c1t0d0s2仅仅是一个指向物理设备名的符号链接而已。
(2)查看物理名字和实例名。
系统把每个设备的物理名字和实例名字记录在/etc/path_to_inst文件中,该文件由内核维护。通常系统管理员没必要也不建议手动修改这个文件,通常sd表示SCSI硬盘,dad表示IDE硬盘,cmdk表示SATA硬盘。
# grep sd /etc/path_to_inst
"/pci@80,4000/scsi@4/sd@0,0" 4 "sd"
"/pci@80,4000/scsi@4/sd@1,0" 0 "sd"
名字示例:
l        c1t0d0:/pci@0,0/pci1000,30@10/sd@0,0
l        c1t1d0:/pci@0,0/pci1000,30@10/sd@1,0
l        c0d1:/pci@0,0/pci-ide@7,1/ide@1/cmdk@1,0
l        c3d0:/pci@0,0/pci-ide@7,1/ide@0/cmdk@0,0
l        c3d1:/pci@0,0/pci-ide@7,1/ide@0/cmdk@1,0
l        c1t0d0s7:/pci@0,0/pci1000,30@10/sd@0,0:h
(3)查看所有可能的设备实例。
prtconf 可以查看系统配置信息、内存总数、周边设备(键盘、鼠标)等,会列举出所有可能的设备实例,不管是否有接在系统上,可用grep –v not 过滤(-v not表示忽略带not字符的行):
# prtconf | grep –v not
sysdef 以列表形式列出当前系统中所有已定义的设备,包括所有的硬件设备、伪设备、系统设备、可调的内核参数、可加载的内核模块:
# sysdef |grep –v not | more
(4)查看可用的硬盘。
用format命令也可以查看当前系统所在的主机中所有可用的硬盘的逻辑设备名与物理设备名:
# format
Searching for disks...done
AVAILABLE DISK SELECTIONS:
        0. c1t0d0 <DEFAULT cyl 4092 alt 2 hd 128 sec 32>
           /pci@0,0/pci1000,30@10/sd@0,0
Specify disk (enter its number):
 
4.4  重新识别与加载设备
必须指定系统在引导时对硬件设备进行重新识别和配置(reconfiguration boot)或运行devfsadm命令,系统会识别到新增的周边设备。
1.通过启动重新识别设备
(1)首先在根目录中创建一个reconfigure文件,然后同步后关闭机器:
# touch /reconfigure; sync; init 5
关闭所有外部设备的电源,安装新设备。然后开启机器,并用prtconf或format命令验证是否找到新的硬件设备。
(2)开机时用STOP-A进入OBP(OpenBoot PROM)模式:
STOP-A
OK boot -r
(3)用reboot命令的“--”选项把-r参数提交给OBP(-r在OBP中表示在启动时重新识别并配置硬件):
# reboot ---r
2.在线识别新设备
很多主机系统以24×7的方式运行重要的用户应用,不可能为了执行重新配置而重启系统,这时可以使用devfsadm命令对新加设备进行在线识别与加载。如果有新设备被识别并加载,这个命令会自动更新/etc/path_to_inst文件和/dev及/devices目录。Devfsadm命令有以下几种常见用法:
# devfsadm
# devfsadm -c disk –c tape –c audio -----对指定类别的设备进行操作,如disk,tape,port,audio,pseudo
# devfsadm -i sd -----------------------------只配置指定驱动器的设备,-i sd即只配置SCSI硬盘
# devfsadm -v --------------------------------详细显示devfsadm对/dev,/devices目录中的设备造成的改变信息
# devfsadm -C--------------------------------清除/dev中被不正常删除的链接


4.5  使用format工具进行磁盘分区
Solaris OS使用format工具以cylinder为基本单位对磁盘进行slice的划分。Solaris for Sparc版一个硬盘最多只有7个slice。Solaris for x86版最多可有9个slice,不过第8个和第9个分片是保留分片,用户不能使用。在划分分片时,经常会出现以下两种错误操作。
l        wasted-disk-space:有一些柱不属于任何一个分片,这些柱就叫做被浪费的空间。
l        overlapping:同一个柱被超过一个分片使用,只有partition的modify命令会提示出现overlapping。
需要注意的是,Solaris x86系统的format工具中有一个x86专用指令fdisk。在x86系统中对硬盘进行分片操作前,必须先用fdisk指令在目标硬盘上创建Solaris分区(fdisk指令默认会创建100%的Solaris分区),然后对Solaris分区进行分片操作。
1.磁盘标签
磁盘标签(Disk Label)是用来存放磁盘的控制器、几何信息、分片等信息的区域,通常也叫VTOC(Volume Table of Contents)。磁盘标签的内容驻留在磁盘的第一个扇区。
磁盘的第一个扇区通常也叫做引导扇区(boot sector),内容依次为MBR(MasterBoot Record,主引导记录)、DPT(Disk Partition Table,磁盘分区表)、Boot Record ID。
MBR存放系统主引导程序,负责从活动分区中装载并运行系统引导程序。Boot Record ID用来判断引导区是否合法。
DPT是磁盘标签中最重要的一个部分,分区表标识了磁盘的分片(slice)、分片的边界(以柱为单位)及分片的大小。可用format工具的partition命令把当前分区表保存在/etc/format.dat文件中。
# format
format>0
FORMAT MENU:
         disk       - select a disk
         type       - select (define) a disk type
         partition  - select (define) a partition table
         current    - describe the current disk
         format     - format and analyze the disk
         fdisk      - run the fdisk program---只有x86版的solaris才有这个指令
         repair     - repair a defective sector
         label      - write label to the disk
         analyze    - surface analysis
         defect     - defect list management
         backup     - search for backup labels
         verify     - read and display labels
         save       - save new disk/partition definitions
         inquiry    - show vendor, product and revision
         volname    - set 8-character volume name
         !<cmd>     - execute <cmd>, then return
         quit
format>partition
partition> name
Enter table name (remember quotes): S10.8G
format> save
Saving new disk and partition definitions
Enter file name["./format.dat"]: /etc/format.dat   --把分区表保存在文件中
partition> se
         0. original
         1. S10.8G
Specify table (enter its number)[1]:1
partition> label               -----------------保存标签
当使用format命令选择一个磁盘进行分区时,它会从该磁盘的标签中把磁盘的分区表读进内存,并作为当前的分区表来显示;当我们调用format命令时,/etc/format.dat文件也会被读取,并和format一起工作。/etc/format.dat存放了一系列可用的磁盘类型和预定义的分区表。
图4-5显示了磁盘中的卷标、当前在内存中的卷标,以及预定义在/etc/format.dat文件中的卷标之间的联系。
图4-5  硬盘分区表可能存在的几个位置
2.磁盘分区的常见术语
磁盘分区常见术语如表4-1所示。
表4-1  与分区有关的常见术语
术    语
描    述
Part
分片编号,从0到7
Tag
用来区分该分片的目的:
0 = unassigned
1 = boot
2 = root
3 = swap
4 = usr
5 = backup
6 = stand
8 = home
Sun StorEdge 卷管理器阵列使用的Tag:
14 = public(region)
15 = private(region)
Flag
00 = wm 该分片可写且可挂接
01 = wu 该分片可写但不可挂接(swap分片默认值)
10 = rm 该分片只读且可挂接
11 = ru  该分片只读但不可挂接
(续表)
术    语
描    述
Cylinders
定义了分片的起始柱面和结束柱面
Sizes
分片的大小,单位为MB /GB /b块/c柱
Blocks
显示每个分片的柱总数量及扇区的总数量
3.分片操作示例
使用format工具的partition命令对磁盘进行分片操作:
partition> p
Current partition table (unnamed):
Total disk cylinders available: 4092 + 2 (reserved cylinders)
Part Tag         Flag       Cylinders         Size             Blocks
  0  swap           wm     3 -  202         400.00MB     (200/0/0)      819200
  1  usr              wm     200 - 2199      3.91GB         (2000/0/0)    8192000
  2  backup        wu      0 - 4091         7.99GB         (4092/0/0)    16760832
  3  unassigned   wm     2200 - 3199    1.95GB         (1000/0/0)    4096000
  4  unassigned   wm     3200 - 3399    400.00MB     (200/0/0)      819200
  5 unassigned    wm     3400 - 3499    200.00MB     (100/0/0)      409600
  6  unassigned   wm     0                    0                  (0/0/0)         0
  7  unassigned   wm     0                    0                  (0/0/0)         0
  8  boot            wu      0 - 0               2.00MB        (1/0/0)         4096
  9  alternates     wm     1 – 2              4.00MB        (2/0/0)         8192
partition> 6
Part Tag             Flag    Cylinders        Size              Blocks
  6  unassigned   wm     0                    0                  (0/0/0)         0
Enter partition id tag[unassigned]: ?
Expecting one of the following: (abbreviations ok):
        unassigned    boot          root          swap
        usr           backup        stand         var
        home          alternates    reserved
Enter partition id tag[unassigned]: usr
Enter partition permission flags[wm]: ?
Expecting one of the following: (abbreviations ok):
        wm    - read-write, mountable
        wu    - read-write, unmountable
        rm    - read-only, mountable
        ru    - read-only, unmountable
Enter partition permission flags[wm]: wm
Enter new starting cyl[3]: 3500
Enter partition size[0b, 0c, 3500e, 0.00mb, 0.00gb]: $    ------把剩余的cylinder全部分配
Partition>label
4.磁盘标签管理
(1)查看磁盘标签(disk label or VTOC):
# format>verify
# prtvtoc –h /dev/rdsk/c1t0d0s2
(2)把标签备份到文件:
# prtvtoc /dev/rdsk/c1t0d0s2 > /vtoc/c1t0d0.vtoc
(3)复制磁盘标签:
l        先摧毁c1t0d0的磁盘标签,然后恢复:
# dd if=/dev/zero of=/dev/rdsk/c1t0d0s2 bs=512 count=10
l        恢复方法1:从另外一个硬盘复制磁盘标签(要求两个硬盘的分区信息必须完全一致):
# prtvtoc /dev/rdsk/c1t0d0s2 | fmthard –s - /dev/rdsk/c1t1d0s2
l        恢复方法2:从文件复制磁盘标签:
# fmthard –s /vtoc/c1t0d0.vtoc /dev/rdsk/c1t0d0s2
5.调整分区的大小
使用format工具中的modify可调整分区大小,极为方便。指令顺序为:format→disk→partition→modify
partition> modify
Select partitioning base:
         0. Current partition table (original)
         1. All Free Hog
Choose base (enter number) [0]? 0
Warning: Overlapping partition (1) in table.
Warning: Fix, or select a different partition table.
partition> mod
Select partitioning base:
0. Current partition table (original)
1. All Free Hog  ---自由划分空间,系统自动计算起始cylinder
Choose base (enter number) [0]? 1
Part Tag             Flag    Cylinders        Size              Blocks
  0  root             wm     0                    0                  (0/0/0)              0
  1  swap           wu      0                    0                  (0/0/0)              0
  2  backup        wu      0 – 4091         7.99GB         (4092/0/0)         16760832
  3  unassigned   wm     0                    0                  (0/0/0)              0
  4  unassigned   wm     0                    0                  (0/0/0)              0
  5  unassigned   wm     0                    0                  (0/0/0)              0
  6  usr              wm     0                    0                  (0/0/0)              0
  7  unassigned   wm     0                    0                  (0/0/0)              0
  8  boot            wu      0 -  0            2.00MB        (1/0/0)              4096
  9  alternates     wm     0                    0                  (0/0/0)              0
Do you wish to continue creating a new partition
table based on above table[yes]?
Free Hog partition[6]? -------------这行的意思是最后的剩余空间都给第6个slice,即slice 5
Enter size of partition '0' [0b, 0c, 0.00mb, 0.00gb]: 400m
Enter size of partition '1' [0b, 0c, 0.00mb, 0.00gb]: 3g
Enter size of partition '3' [0b, 0c, 0.00mb, 0.00gb]: 2g
Enter size of partition '4' [0b, 0c, 0.00mb, 0.00gb]: 1.5g
Enter size of partition '5' [0b, 0c, 0.00mb, 0.00gb]: $
Warning: no space available for '7' from Free Hog partition
Part Tag             Flag    Cylinders        Size              Blocks
  0  root             wm     1 -  200         400.00MB     (200/0/0)          819200
  1  swap           wu      201 - 1736      3.00GB         (1536/0/0)         6291456
  2  backup        wu      0 - 4091         7.99GB         (4092/0/0)         16760832
  3  unassigned   wm     1737 - 2760    2.00GB         (1024/0/0)         4194304
  4  unassigned   wm     2761 - 3528    1.50GB         (768/0/0)          3145728
  5  unassigned   wm     3529 - 4091    1.10GB         (563/0/0)          2306048
  6  usr              wm     0                    0                  (0/0/0)              0
  7  unassigned   wm     0                    0                  (0/0/0)              0
  8  boot            wu      0 -    0         2.00MB        (1/0/0)              4096
  9  alternates     wm     0                    0                  (0/0/0)              0
Okay to make this the current partition table[yes]?
Enter table name (remember quotes): s10.d3
Ready to label disk, continue? y
partition> q
小窍门:克隆硬盘
dd命令可以完全克隆硬盘,包括卷标信息,if指定源盘,of指定目标盘:
# dd if=/dev/rdsk/c1t0d0s2 of=/dev/dsk/c1t1d0s2 bs=128k
如果源盘包含根文件系统,需要先从光驱启动,再执行dd命令,假设原来的硬盘挂接在/a目录下,那么命令应为:
# dd if=/a/dev/rdsk/c1t0d0s2 of=/a/dev/dsk/c1t1d0s2 bs=128k
复制完毕后要检测启动分区的文件系统(一般为分区0):
# fsck -Y of=/dev/dsk/c1t1d0s0
然后可以把c1t0d0s2盘移走,把c1t1d0s2这块盘插在c1t0d0s2盘原来所处的地方,接着启动系统。

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值