北京人在SUN北京
Tape Self ID
很久没有更新blog了,愧对广大读者,如果有读者的话。其实主要的原因是因为我忘了我的用户名和密码。我一般只维护两组用户名和密码,一组是公司的,一组是个人的,在公司内部用公司的,在公司外部用个人的,可是用这两组都无法登录。我曾想,我的blog算是就这样夭折了。今天突然很想再试一下,没想到,用个人的用户名,公司的密码,居然登录成功了。仔细回想近一年前,创建blog的时候,可能是为了迎合北京人在SUN北京的主题吧,我选择了个人和公司的用户密码组合,一点小小的心思,尽然让自己的blog沉睡了一年,嘿嘿。
其实我想blog的原因是因为最近我很开心,因为一件麻烦,费时,费力,又没有什么技术成就感,没有知名度的,但却相当重要,不得不做还必须丝毫无错的做好的工作,我以后终于不用再做了。因为有了Tape Self ID(identification),即磁带自识别。
从前,Solaris 要提供对某一种磁带的支持,需要在st_conf.c文件里加一组静态的数据,规定磁带的名称,PID, VID, 类型(DAT, LTO,等等),支持的选项(倒带,进带,等等),支持的密度,一些命令的超时时限。乍听这些都很简单,其实不然,这些数据不是罗列好了放在那里,而是渗透在磁带的使用手册的字里行间。我是一个写软件的,我要从动辄几百页的硬件手册里去找到我要的其实也就几行的信息,而且一定要准确,真是有点赶鸭子上架的味道;而且,一旦决定支持某种新磁带,时间就会非常紧张,天天都有各级别的老板在屁股后面追着问,毕竟这是关系到SUN的MONEY和声誉的大事啊。
现在好了,我们有了Tape Self ID。Tape Self ID 不是给每个磁带分配一个ID,而是让Solaris自动去识别磁带,因为这些配置信息不仅藏在浩瀚的用户手册里,而且磁带本身就有。这样就不用我费劲吧啦的去查手册了,让Soaris自己问问磁带好了。在磁带设备向系统绑定的时候,Solaris会发一系列SCSI命令去询问磁带的参数,这些命令包括,INQUIRY, MODE SENSE, READ BLOCK LIMITS, REPORT DENSITY SUPPORT, REPORT SUPPORTED OPERATION CODES。通过这些命令返回的参数,这个磁带就自动被Solaris识别了。
有了Tape Self ID,不光我开心了,SUN开心了,连磁带设备厂商也开心了。因为他们的新产品可以随意的卖给安装Soalris的用户,而不需要等待漫长的Solaris漫长的发布周期去支持他们的新磁带了。
好了,先写这么多,如果你有进一步的兴趣,欢迎访问
http://developers.sun.com/solaris/articles/tapedriveselfid/index.html
http://cvs.opensolaris.org/source/
浏览技术文档和程序实现。主要实现在st.c里。
Posted at 05:58下午 五月 08, 2008 by Yu Larry Liu in Sun | 评论[0]
Disk label in Solaris
在SUN工作的头一年,我做了很多关于disk label的bug。可能是由于我的名字被列在了很多和label相关的bug的RE(resposible engineer)里,经常我能接到一些工程师或者客户支持的同事打电话来询问有关一些label的问题,所以我决定把我知道的一些label相关的基础知识blog在这里。这样,也许下回电话那端的你,可以和我讨论如何改进solaris对label的支持了。Disk Lable 总是在磁盘的开头,记录了磁盘信息和数据存储格式,包括Label的类型,磁盘的大小,磁盘分区信息,VTOC Label中还有磁盘的geometry信息。下面我们就Solaris支持的两种Label, VTOC和EFI,在SPARC和x86平台,进行分别介绍。
1. VTOC Label 在SPARC平台
VTOC label disk 在SPARC平台上的layout
其中S代表slice,也就是我们说的分区。VTOC Label在SPARC上支持8个分区,所以也叫VTOC8。其中S2代表全盘,它的Tag永远是backup。在/dev/rdsk/目录下,我们可以看到这些设备文件,c*t*d*s0~c*t*d*s7。vtoc的分区表就放在磁盘的第一个sector里,一共512个字节。
2. VTOC Label 在X86平台
VTOC label disk 在X86平台上的layout
和SPARC平台不同,X86平台上有了FDISK分区的概念,FDISK分区表在磁盘的第一个扇区里(MBR)。Solaris支持4个逻辑分区,不支持扩展分区。Solaris可以安装在任意一个逻辑分区里,也可以在不同的逻辑分区里安装不同版本的solaris,但是只能有一个分区里的Solaris是active的。在/dev/rdsk/里我们可以看到c*t*d*p0~c*t*d*p4. 其中p0表示全盘,p1到p4分别表示4个分区。图中的例子里,活动solairs分区被安装在第一个分区里。
活动solaris分区的的disk label在该solaris分区的第一个扇区,512个字节。VTOC Lable在x86上支持16个分区,所以也叫VTOC16。S2代表全Solaris FDISK分区,tag是backup。在/dev/rdsk目录下,我们可以看到这些设备文件,c*t*d*s0~c*t*d*s15。不过,用format工具我们只能看到10个分区,s0到s9。
3. EFI Label 在SPARC和X86平台
可扩展固件接口(英文名Extensible Firmware Interface 或EFI)是由英特尔公司推出的一种在未来的类PC的电脑系统中替代BIOS的升级方案。在EFI规范中,一种突破传统MBR磁盘分区结构限制的GUID磁盘分区系统(GPT)被引入,新结构中,磁盘的分区数不再受限制(在MBR结构下,只能存在4个主分区),并且分区类型将由GUID来表示。
无论是SPARC还是X86,EFI Label都有着相同的layout。所以,拥有EFI Label的磁盘可以在SPARC和X86平台上自由的切换,目前VTOC Label还做不到这一点。
LBA0是PMBR,这个在EFI Label里基本没什么用,只是一个MBR的遗留产物,不过它里边标识了该磁盘使用EFI Label。
LBA1是GPT(Global Partition Table) Header,也就是EFI Label的头,里边记录了EFI Label的位置和用户区域的位置以及backup label的位置。
LBA2到LBA33是具体的GPT Entries,每个LBA可以有4个entries。Solaris只用了9个entries,其它的都是0。
LBA34到LBAn-33是9个分区。
LBAn-32到LBAn-1是备份的GPT Entries。(n是磁盘的LBA数,容量-1)
LBAn是备份的GPT Header。
尽管EFI Label不再对分区的数量有所规定,但是目前Solaris创建的EFI Label还是有一定的限制。Solaris创建的EFI Label支持9个分区,S0到S8。S2不再代表全盘,而是一个普通的分区;S7被用来表示全盘,这一点对用户是不可见的,用户只能看到c*t*d*的设备文件被用来表示全盘;S8被用作保留分区,不创建设备文件,用户不能使用。所以用户能够使用的分区就是S0到S6。
不过,在别的操作系统上创建的EFI Label,Solaris也是可以识别的,也没有分区数目的限制,使用format(1M)或prtvtoc(1M)可以看到具体的分区表。但是只有S0到S6是可读写的,其它分区没有设备节点,不能进行读写操作。
Posted at 05:25下午 八月 06, 2007 by Yu Larry Liu in Sun | 评论[6]
星期四 五月 08, 2008