[华山论剑][ Solaris 经典问题之 Disk Partition #1]

发表于:2007-06-08来源:作者:点击数: 标签:
[color=blue:e158a92918]本来想发我的第二帖[华山论剑][Solaris经典问题之Disksuite#2][难度指数:4] 却看到最近坛子里有关DiskPartition的话题比较热,洒家也来凑凑热闹。[/color:e158a92918] [color=darkred:e158a92918][size=18:e158a92918][华山论剑][Sol

[color=blue:e158a92918]本来想发我的第二帖 [华山论剑][ Solaris 经典问题之 Disksuite #2] [难度指数:4]
却看到最近坛子里有关 Disk Partition 的话题比较热, 洒家也来凑凑热闹。[/color:e158a92918]


[color=darkred:e158a92918][size=18:e158a92918][华山论剑][ Solaris 经典问题之 Disk Partition #1][难度指数:1][/size:e158a92918][/color:e158a92918]

难度指数: 1(MIN)- 5(MAX)

[b:e158a92918][Qestion][/b:e158a92918] 你是 Sun 的 SSE。刚刚接到一个客户的电话, 说是安装 Oracle 时出了问题。
症状如下: Oracle 使用 Raw Devices /dev/rdsk/c1t0d0s0 作为 datafile.
c1t0d0 已分好区, 全部空间分给 0 分区。

Oracle 启动前 c1t0d0 的分区表如下:

# prtvtoc /dev/rdsk/c1t0d0s2 
* /dev/rdsk/c1t0d0s2 partition map 
* Dimensions: 
*  512 bytes/sector 
*  80 sectors/track 
*  9 tracks/cylinder 
*  720 sectors/cylinder 
*  2500 cylinders 
*  1151 aclearcase/" target="_blank" >ccessible cylinders 
* Flags: 
*  1: unmountable 
*  10: read-only 
*  First Sector Last 
* Partition Tag Flags Sector Count Sector Mount Directory 
0 2 00 0 828720 828719  
2 5 00 0 828720 828719 

但 Oracle 一启动, console 报如下错误,

May 11 09:28:12 gzb scsi: [ID 104925 kern.warning] WARNING: /pci@8,700000/scsi@1/sd@0,0 (sd20):
May 11 09:28:12 gzb corrupt label - wrong magic number

运行 format 查看, c1t0d0 分区表变回 default, 又需要重新分区及 label, 反复数次皆如此.


看到以上信息, 你微微一笑。 你知道这是个把 disk 作为 Raw Devices 使用的普遍的问题, 对于 Sybase 及 
Informix 亦存在。于是你告诉了客户解决方案。半小时后, 客户打来电话说已经搞定了。



[color=green:e158a92918][u:e158a92918][size=18:e158a92918]本坛类似问题[/size:e158a92918][/u:e158a92918][/color:e158a92918]

Cluster3.1安装Oracle RAC后,裸设备分区变没啦。
[url]http://bbs.chinaunix.net/forum/6/20040723/372513.html[/url]

help:Sun平台上安装 informix,有问题求助
[url]http://bbs.chinaunix.net/forum/6/20040723/372615.html[/url]



[color=green:e158a92918][u:e158a92918][size=18:e158a92918]其他问题[/size:e158a92918][/u:e158a92918][/color:e158a92918]

[华山论剑][ Solaris 经典问题之 Disksuite #1] [难度指数:2]
[url]http://bbs.chinaunix.net/forum/viewtopic.php?t=370242&start=0[/url]

 nimysun 回复于:2004-07-26 13:12:34
比较关心这个问题的解决方案。
我会:
1、找到问题的原因
3、先尝试修复
2、找备份恢复

 Ryker 回复于:2004-07-26 14:49:38
出现在新的LUN没有被labele前

 南非蜘蛛 回复于:2004-07-26 16:01:49
建议贴出来format,p,p的内容,我看到slice2好像有问题

 sunmarmot 回复于:2004-07-26 17:58:29
fsck -y -o b=32 /dev/rdsk/cXdXtXsX咯

 zcjzcx 回复于:2004-07-26 21:39:26
我想知道答案!!

 lightspeed 回复于:2004-07-26 22:26:31
[quote:a2d0a10e82]nimysun  写道:  

我会:
1、找到问题的原因
3、先尝试
2、找备份恢复[/quote:a2d0a10e82]

还没到恢复阶段, 因为安装时就不能用。


[quote:a2d0a10e82]Ryker  写道:

出现在新的LUN没有被labele前[/quote:a2d0a10e82]

所有的 disk / lun 在使用前都已经分好区,并 lable 成功。


[quote:a2d0a10e82]南非蜘蛛   写道:

建议贴出来format,p,p的内容,我看到slice2好像有问题[/quote:a2d0a10e82]

当时没有存下 format 结果,所以没法贴出来。但 slice 2 绝对没问题。 

再重申一遍: 

1.  全部空间分给 slice 0, 因此 用 prtvtoc / format 看 slice 0  和 2 相同
2.  其他分区 size 为 0

[quote:a2d0a10e82]sunmarmot   写道:

fsck -y -o b=32 /dev/rdsk/cXdXtXsX咯[/quote:a2d0a10e82]

此处使用的是 Raw deivces, 不是文件系统。


[quote:a2d0a10e82]zcjzcx 写道:

我想知道答案!![/quote:a2d0a10e82]

我只是抛了一块砖, 必将引出许多玉来, 你就等着拣吧。

 mmmmn 回复于:2004-07-26 22:37:46
没做过RAC,惭愧

猜一个答案吧
是不是在oracle中建库的时候没有选择是创建在RAW设备上?

 lightspeed 回复于:2004-07-26 22:52:56
和 RAC 无关.  

建库的时候的确是选择创建在RAW设备上.  这一点没有疑问.

 mmmmn 回复于:2004-07-26 23:00:22
那是不是slice的属主问题呢?
要把该设备的属主改为oracle:dba

 南非蜘蛛 回复于:2004-07-26 23:15:25
[quote:63c56410bf="lightspeed"]

我只是抛了一块砖, 必将引出许多玉来, 你就等着拣吧。[/quote:63c56410bf]

slice0难道最前面没有预留一点空间吗?从0开始?

虽然这篇文章说不用预留,但我习惯预留一些空间给slice0,而不是从0开始


http://www.dbonline.cn/source/oracle/20040229/BACKUP_transfer%20Oracle%20between%20bare%20device%20and%20file%20system.html


如果不是上面的原因,也可能是以下原因,明天来看答案,睡觉拉

都不要做newfs,在create_database.sql的脚本中,则把原先写数据文件的相应部分,改成裸设备分区名。

 lightspeed 回复于:2004-07-26 23:25:00
此处与本坛另两个问题一样, 没有预留。

有点接近问题的实质了。斑竹就是不同啊。 请继续讨论。

 寒江獨釣 回复于:2004-07-26 23:27:29
我想這是因爲目標0原本是solaris機器爲它的內部硬盤裝置留的。所以,影射target=0 lun=0 已經在本地盤中存在了。再拿它來影射oracle, 每次重啓就會出現這個問題。

 lightspeed 回复于:2004-07-26 23:30:11
非也。  系统盘是 c0t0d0.  二者没有冲突。

 南非蜘蛛 回复于:2004-07-26 23:31:52
[quote:cd46fe8f79="lightspeed"]此处与本坛另两个问题一样, 没有预留。

有点接近问题的实质了。斑竹就是不同啊。 请继续讨论。[/quote:cd46fe8f79]

[size=24:cd46fe8f79][color=red:cd46fe8f79]还要讨论,你不想让我睡觉了,哈哈[/color:cd46fe8f79][/size:cd46fe8f79]

1.2 裸设备的可用空间 

不同的UNIX对裸设备的管理不完全相同,特别要注意的是某些UNIX在每个裸设备的头部要保留一定的空间,应用程序在使用裸设备时不可以覆盖这一部分,否则会对裸设备造成损坏。所以一个裸设备的实际可用空间是分配给裸设备的空间再减去这部分操作系统保留空间。下面是常用UNIX的OS Reserved Size列表: 

UNIX?????OS Reserved Size 

------------?---------------- 

SUN Solaris???????0 

HP-UX??????????0 

IBM AIX?????????4k 

Tru64 UNIX???????64k 

Linux??????????0 

这个表写的是0,但是我想应该还是留一些空间的,可能是oracle认到的空间,和真实空间有出入

 lightspeed 回复于:2004-07-26 23:36:55
想法是好的, 不过对于本题, 还有不确之处。

 寒江獨釣 回复于:2004-07-26 23:37:51
There is the similar problem with a database  Sybase, 
Informix, or Oracle since we were trying all three). The first cylinder must NOT be written to by the database or it corrupts the partition table (and label). It is fairly simple to reserve the 0 cylinder by assigning it to a partition which is not used for anything. File system software will avoid trashing this information, but a database package will probably not.

 lightspeed 回复于:2004-07-26 23:41:00
This's it !!

 mmmmn 回复于:2004-07-26 23:47:33
受教,这个记住了

 sunmarmot 回复于:2004-07-27 00:52:56
问题是你怎么修复呢??

 iricyan 回复于:2004-07-27 00:57:22
牛,like这个帖子。

 hehehe 回复于:2004-07-27 08:45:57
装informix数据库遇到过,折腾了半天,最后informix加了偏移量才解决

 南非蜘蛛 回复于:2004-07-27 09:51:01
我觉得这个问题,首先给人一个错觉
总是会想到会和oracle有关系,其实和oracle没有关系,只是oracle这个应用表现出来了这个问题

oracle怎么会改变硬盘的分区表那?肯定不会,这就说明肯定是分区的问题

怎么测试那??楼主开始说是一起动oracle,然后查看硬盘,又恢复的default,要是从起机器,不起oracle,那现在硬盘的状态是什么那?肯定也是恢复到default?

9 alternates wm 1 - 2 0.98MB (2/0/0) 
系统把0-3的Cylinders给系统用,以后的分区才真正的被使用
我想不管是做文件系统,还是做裸设备,都需要这个空间的

可能做文件系统,从0开始用,有时候不会出现问题,但我从来分区都是预留出来0-3这个cyl

但是作为裸设备,有的应用可能默认就需要这个空间,可能有时候就会出现问题

请楼主指正

 lightspeed 回复于:2004-07-27 10:16:19
oracle 只要启动一次就会破坏 vtoc ,  硬盘就会恢复到 defualt 状态。
如果 oracle 从来就没运行过的话, 硬盘分区不会变。

VTOC 实际是存在于第一个 cylinder 的第一个 block 中, 对于 Raw device 一般预留第一个
 cylinder (cylinder 0) 以方便分区.

作文件系统不需要预留, 因为任何文件系统自动跳过这个 blcok.

在以后系列中, 将会有一道与此有些关系的 volome manager 题目.

 nimysun 回复于:2004-07-27 10:25:27
靠,问题是怎么解决这个问题。咱们还是继续讨论吧。难道只是通过简单的备份恢复?

 x3y4z5 回复于:2004-07-27 11:16:07
好帖子,好问题。

 andrewleading_he 回复于:2004-07-29 16:47:16
好,我记录下来了。收藏...

 blackwolfdog 回复于:2004-07-29 18:55:46
由于solaris的裸设备没有预留空间,所以整个裸设备可以供oracle
使用,oracle把数据文件的最初几个block分配用来,保存数据文件
大小等相关信息,所以就把solaris操作系统的0 block内容给覆盖了
重启动后,系统使用默认的分区表。

sun的使用真是麻烦啊,用lvm多好啊,solaris9中带有自己的lvm
谁用过,介绍一下经验

 iricyan 回复于:2004-07-29 20:13:25
从蜘蛛那里下载的装好的X86 solaris 9,看了一下 /  预留出来了前面几个cylinder

 chim 回复于:2004-07-30 09:13:38
[quote:d10578cc6a="iricyan"]从蜘蛛那里下载的装好的X86 solaris 9,看了一下 /  预留出来了前面几个cylinder[/quote:d10578cc6a]

X86 可是自动会留出来了前面几个cylinder给boot manager 用的。

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