VxVM学习笔记-1

第一部分

vxdisksetup 将磁盘变成vm磁盘

因为vxvm需要将数据存储在磁盘表面,因此必须有一种方式将磁盘或者lun(逻辑存储单元)导入到vxvm的逻辑层中,将存储对象由os的控制转移到vxvm的控制下。当然,可以使用vxdisksetup <diskname>来将磁盘纳入vxvm的控制下,由于是虚拟化的控制,所以会有很多方便的功能,必须使用vxdisk online和vxdisk offline将磁盘上线或下线,而在os中,这是很麻烦的。

这些命令并不是让磁盘真的停止运转或者真的对控制器无反应,只是在虚拟层踢出,只要我们没有破坏磁盘的硬件结构,这些操作只是在虚拟层面不能操作磁盘。

vxdisksetup做了什么

首先检查磁盘的物理属性,比如:大小,存储阵列的类型(如果是个lun),以及DMP提供的设备路径。然后可以通过获得信息来定义一个内部数据结构成为访问记录,通过访问记录可以使用DMP来进行磁盘的I/O操作。创建访问记录的是使用vxdisk define命令来实现,这个命令在vxdisksetup脚本中被调用。

访问记录也包含一些个标志位,必须表示磁盘在线还是掉线状态,磁盘各个路径的状态,以及磁盘的位置信息和uuid。请记住,所有这些变量都是软件数据,它们在VxVM内部用于尽可能精确地表示物理磁盘,同时通过保留,软件开/关或软件故障/正常状态等来扩展其功能。至少在大多数情况下,在vxdisksetup需要做的事情清单上,下一步是在磁盘介质上保留一些私有空间,在该空间中可以永久存储与磁盘有关的所有信息。例如,如果VxVM因为某些用户数据上发生了不可恢复的读取错误而为磁盘设置了“失败”标志,则您希望此状态信息在重新引导后保持不变。没有冒犯的意图,只有Windows用户尝试通过重新启动来解决问题。 在UNIX和其他严重的操作系统中,重新启动系统通常不会发生太大变化,除非可以启用内核级补丁或驱动程序配置更改。

切片格式

通过在磁盘上分配(正常)片并将其指定为Solaris VTOC中的保留标记15,VxVM(或更确切地说是vxdisksetup命令)为磁盘保留了私有空间,以将其标记为VxVM的“私有区域”。 该片是一个完全正常的片,可以使用Solaris的format或prtvtoc命令进行检查。标记通常不由OS解释。理论上,任何人都可以将任何标签用于其分区。 但是,有些约定可以使生活更轻松。 例如,如果切片具有标签3的标签将其标记为交换设备,并且Solaris安装程序将在安装过程中将其用作其最小根文件系统的目标。还有“ root”,“ boot”,“ home”和其他几个标签。

“专用区域”曾经是最少数量的圆柱体,可产生至少1MB的磁道,尽管在最近的发行版中已发生了多次更改。 在任何情况下,它的大小都不再重要,因为新的CDS磁盘布局已取代了经典格式,并将在后面进行讨论。

保留专用区域后,vxdisksetup命令将通过分配另一个片并将其标记为“公共区域”(标记14)来保留磁盘的其余部分。 对于管理员和所有处理磁盘的UNIX工具而言,磁盘现在看起来已完全用尽了空间; 运行vxdisksetup后,操作系统上没有多余空间。

如上所述,由vxdisksetup生成的磁盘格式称为“切片”格式,因为私有和公共区域位于磁盘上明显分开的片中。 由于该磁盘依赖于Solaris VTOC,因此只能在与Solaris VTOC兼容的平台(即Solaris和Linux)上使用。 自从出现新的通用兼容格式CDS(跨平台数据共享,在下面讨论)以来,它就不再有用了,此处仅出于概念清晰的目的进行了讨论。

要将磁盘初始化为切片磁盘,请使用以下命令:

# vxdisksetup -i c#t#d# format=sliced

CDS格式

在更现代的VxVM版本中,vxdisksetup将整个磁盘标记为“专用区域”,这导致用户之间有些混淆。造成这种混乱的通常原因是(错误的)假设,即私有区域仅保存元数据,而公共区域仅保存用户数据。尽管原始切片格式确实如此,但整个事实似乎是,受VxVM控制的磁盘需要两件事才能与操作系统共存:首先,一种告诉VxVM对VxVM有效的方法。这可以通过对专用区域使用特殊的VxVM标签编号15来实现,当然也可以通过使用有效数据结构初始化专用区域来实现。其次,一种告诉系统其余部分不要动磁盘的方法,因为它现在受VxVM控制。后者是通过将覆盖整个磁盘的单个片的分配标记为已分配的整个磁盘来实现的。以前,这两个事情是由专用于第一目的的私有区域片和用作第二目的的公共区域片来完成的。仔细观察后发现,可以通过将整个磁盘分配给一个巨大的专用区域来同时为这两个服务器提供服务,从而告诉VxVM该磁盘是发往VxVM的,并告诉其他人该磁盘是在同一时间完全分配的。(专用区域保存了VxVM在磁盘上分配虚拟对象所需的所有元数据; VxVM实际上从未为此目的而需要公用区域片。)这是在当前默认布局(称为跨平台数据共享的CDS)中完成的。 只要CDS格式化的磁盘都运行VxVM 4.0或更高版本,就可以在Solaris,Linux,AIX和HP-UX之间自由移动它们。vxdisksetup所做的最后一步是使用合理的值初始化私有区域。这仅在通过-i命令行开关后才这样做,比如,命令仅仅时vxdisksetup <diskname>,而不是vxdisksetup -i <diskname>,专用区域的初始化是通过vxdisk init命令完成的,该命令再次从vxdisksetup脚本内部调用,因此您无需手动调用它。要将VxVM的磁盘初始化为CDS磁盘,请使用以下命令之一:

# vxdisksetup -i c#d#t# # cds is the default format since 4.0

# vxdisksetup -i c#t#d# format=cds # if default has been changed

也可以通过称为封装的过程来封装已经包含文件系统的磁盘(来自操作系统的寻址方案或来自其他卷管理产品)。 此过程在第319页开始的单独章节中进行了广泛处理。

因此,现在,在初始化磁盘之后,我们就可以将层次结构更进一步:将磁盘分组在一起,以创建用于创建卷的基础。

第二部分

磁盘组:将VM磁盘放入虚拟存储盒子

如果任何实现RAID功能的软件试图做任何有用的事情,都将不得不使用多个物理磁盘。试图将物理磁盘限制为单个磁盘时打破物理磁盘的限制实际上没有任何意义。因此,在创建更高级别的虚拟对象时,VxVM永远无法在单个磁盘上运行。取而代之的是,VxVM最少需要的是一组磁盘,这些磁盘可以作为卷等虚拟对象的容器来寻址。该集合称为磁盘组或DG。 您可能会将磁盘组视为磁盘介质的虚拟盒,可以使用软件命令将其附加到主机或从主机上卸下,从而有效地在服务器之间移动存储。

当然,如果我们实际上需要将磁盘一起收集到DG中以进行处理,这是有争议的。为什么不只使用连接到我们系统的所有磁盘,并从所有磁盘分配磁盘呢?答案与高度可用的系统或群集有关:为了拥有高度可用的服务,我们不仅需要虚拟化大容量存储层,还需要虚拟化服务器本身。例如,我们需要一个服务器的多个物理实例,然后将这些服务器硬件的多个实例映射到一个或多个称为“逻辑主机”或“服务组”的逻辑服务器实例上。这些服务组处理由群集的任何主机本地访问,有时甚至并发更改的数据。为了允许服务组从一个物理主机到另一个物理主机的受控故障转移,将数据封装到单独的磁盘组中。每个服务组包含(通常)一个磁盘组,该磁盘组保存该服务所需的所有存储资源。如果服务组在一个主机上发生故障,则该服务组的资源将在该主机上停止,然后在另一台主机上启动。这意味着在服务失败的主机上禁用了对磁盘组的访问,而在备用主机上启用了对磁盘组的访问。如果未将磁盘组织到磁盘组中,则很难将仅部分存储的控制权传递给另一台主机。因此,使用磁盘组确实很有意义。磁盘组是通过vxdg init命令创建的。 由于磁盘组必须在系统之间移动,因此它们必须完全自我描述,比如,有关磁盘组的所有信息都驻留在磁盘组本身内部。否则,很难将磁盘组从一个系统移动到另一个系统,而不必与它一起传输一些描述文件。因为有关磁盘组的所有信息都包含在磁盘组内部,所以磁盘组必须始终至少包含一个磁盘。 磁盘组不可能没有磁盘,因此在创建磁盘组时必须在命令行上传递至少一个磁盘。下面是一个示例,该示例从三个磁盘c0t2d0,c0t3d0和c0t4d0创建名为mydg的磁盘组:

# vxdg init mydg mydg01=c0t2d0 mydg02=c0t3d0 mydg03=c0t4d0

现在,在创建了包含多个单个虚拟磁盘的磁盘组之后,我们可以通过要求VxVM报告可用区来查看存储中哪些部分未被使用。 通过使用低级命令vxdg free可以完成此操作。 由于我们的系统可能正在使用许多磁盘组,因此VxVM始终要求我们使用命令将磁盘组的名称传递给它。 因此,正确的命令实际上是vxdg -g mydg free(-g显然表示“ group”)。 结果是区段区列表,每个磁盘一个扩展区,可供用户数据使用。

wps1

可用的区段(请记住:偏移量和长度,均以512字节块给出)以黑体字显示。 每个磁盘都有一个从块0开始的单个可用区,并覆盖了VxVM可用的所有可用空间。

从第71页开始,磁盘组将在其各自的章节中介绍。

子磁盘:为持久性存储的区间

为了使vxmake创建正确的对象,我们需要首先将对象类型传递给它。我们想要的对象类型是一个区间,类似就是磁盘的一部分。在VxVM术语中,这称为子磁盘或sd。vxmake命令需要知道要创建的对象类型(sd),要使用的磁盘组(mydg),要创建的子磁盘的名称(mydg01-01),要从中分配存储的磁盘(mydg01),以及 范围信息,例如,偏移和长度分别为4000和2G。

实际运行的低级命令如下所示:

# vxmake -g mydg sd mydg01-01 disk=mydg01 len=2g offset=4000

这将从VxVM的虚拟磁盘mydg分配2GB的长度,从虚拟磁盘的公共区域的起始位置偏移4000个块开始(无论在哪里; VxVM都会对其进行跟踪,因此我们实际上并不在乎),并注意其在 在专用区域中将名称命名为“ mydg01-01”。分配扩展区之后,VxVM确保没有其他扩展区将使用刚刚分配的扩展区中的块; 任何尝试都会失败。 然后,我们可以再次检查vxdg free,看看刚才分配的范围是从空闲存储池中提取的,不再可用。

这将从VxVM的虚拟磁盘mydg分配2GB的长度,从虚拟磁盘的公共区域的起始位置偏移4000个块开始(无论在哪里; VxVM都会对其进行跟踪,因此我们实际上并不在乎),并注意在 在专用区域中将名称命名为“ mydg01-01”。 分配扩展区之后,VxVM确保没有其他扩展区将使用刚刚分配的扩展区中的块; 任何尝试都会失败。 然后,我们可以再次检查vxdg free,看看刚才分配的范围是从空闲存储池中提取的,不再可用。

wps2

如您所见,磁盘mydg01现在列出了两个空闲扩展区:一个从0到4000,另一个从4000后面的2 GB开始,一直扩展到公共区域的末尾。

我们还可以使用打印命令– vxprint –检查并确认对象确实已分配。 用于此的命令是vxprint -g mydg。

wps3

子磁盘的长度(在输出的最后一行)显示为4194304个512字节的块,正好是2 GB,您可以像这样验证:

# echo 4194304/1024/1024/2 | bc -l

丛:将虚拟范围映射到物理范围

虚拟存储层次结构中的下一层是一个数据结构,该数据结构实现了串联,条带化或带奇偶校验的条带化。 为此,它维护一个内部映射表,该表将其地址空间映射到VxVM子磁盘上的适当范围。这样,该虚拟层便能够实现某些RAID。例如,串联是通过将各个子磁盘顺序映射到plex的地址空间中来实现的。实现此行为的虚拟对象称为plex(plex是拉丁语后缀,意为“ -fold”,如双重形式,多重形式)。plex的地址空间与虚拟卷的地址空间相同,即它是块寻址的,从零偏移开始,并连续延伸,并且通常没有孔(尽管可能有“稀疏”丛)到末端。在这方面,它类似于分区,该分区也向其上方的层(通常是文件系统或原始设备层)公开单个线性的块寻址空间。

串联不是plex对象可以实现的唯一映射类型。 它也可以进行条带化和奇偶校验条带化(RAID-5)。 这些布局类型是通过以交错方式将几个子磁盘映射到地址空间中来实现的。 在简单的情况下,它们都从零的plex偏移量开始,一直延伸到plex的末尾。plex的访问方法实现了从一列到另一列的适当跳过,并在RAID-5 plex的情况下生成奇偶校验和。

在更复杂的情况下,必须将多个子磁盘串联在一个或多个列中,以便它们将从plex内各自的偏移量开始,而不是从零偏移量开始。在条带化布局的情况下,plex地址到子磁盘地址的映射是通过plex的内部逻辑完成的。plex方法知道plex的布局以及列数和条带大小。 利用此信息,plex可以针对plex中任何给定的逻辑范围计算子磁盘上的正确物理范围,然后将I / O适当地发布给SCSI驱动程序。

这是使用低级命令创建plex的方式:

# vxmake -g mydg plex myvol-01

wps4

请注意,未指定任何磁盘。 plex现在实际上没有任何后备存储;因此,现在没有任何后备存储。 它就像一个空气球,需要在使用前进行填充。 正如您在上面输出的最后一行中看到的,在其中显示plex的地方,其长度为零。因此,现在我们创建了一个称为plex的虚拟对象,并且在创建子磁盘之前创建了另一个虚拟对象,该子磁盘可用作plex的后备存储。 让我们使用另一个低级命令将两者合并或关联。 这是vxsd assoc命令(sd显然代表子磁盘,assoc代表关联):

# vxsd -g mydg assoc myvol-01 mydg01-01

wps5

现在,plex和子磁盘绑定在一起,并且plex的大小已从零增加到它包含的子磁盘的大小。 通过在vxmake命令行上指定sd = <sd-list>参数,有一种使用子磁盘创建plex的简便方法。

这里提供了另外两个用于创建plex的底层命令:第一个命令将创建一个concat plex,仅包含上面分配的子磁盘,第二个命令将创建一个三列的条带plex,其条带大小为1MB( 我们尚未在此处创建的三个子磁盘中有2048个块)(因此,如果您在没有先创建子磁盘的情况下键入它,则该命令实际上将失败。这是命令语法的示例):

vxmake -g mydg plex myvol-01 sd=mydg01-01

vxmake -g mydg plex myvol-02 sd=mydg02-01,mydg03-01,mydg4-01 \

layout=stripe ncol=3 stripewidth=2048

wps6

丛集(plexs)负责翻译工作。 每个plex将整个卷的内容映射到持久性存储(即子磁盘)上。 因此,一个卷中具有多个plex等效于镜像。 一个卷中最多可以包含31个plex。

卷:可以用作任何目的的虚拟分区

所以现在我们有了虚拟化的磁盘,磁盘组,子磁盘和plex。 现在我们终于可以将文件系统放到某个东西上了吗? 其实我们做不到。 虽然子磁盘对象在本质上与分区非常相同,即磁盘上的块范围,但它在/ dev目录中没有提供设备驱动程序节点,在节点中我们才可以在其中发出mkfs或newfs命令, 更不用说将其挂载到文件系统树中了。即使是plex对象,它具有能够以多种方式(concat,stripe,RAID-5)在多个磁盘上分配I / O的巧妙逻辑,也无法为我们提供设备驱动程序节点。 那么,我们将如何使用原始的普通磁性存储(子磁盘)或巧妙组织的磁性存储(plex)呢? 答案很简单:我们需要在plex之上构建另一个对象类型。为什么VxVM不仅使用plex并提供设备驱动程序,以便我们可以写入plex? 原因是,plex只是用于将虚拟扩展盘区重定向到物理扩展盘区的映射层,仅包含一个单独的地址空间实例,而不包含多个实例。 换句话说,它不提供镜像功能。由于Volume Manager也需要实现镜像,因此必须有一个容器对象,该对象可以容纳许多plex。 为了实现镜像,VxVM将多个plex放入称为卷的单个容器中。该容器对象(卷)在/ dev目录层次结构中实现了设备驱动程序节点,从而使文件系统驱动程序可以寻址该卷。该卷将多路复用写入该卷内所有plex的I / O,并使用每个plex的单独映射功能满足容器中任何一个plex的读取I / O,从而为每个plex寻址正确的后备存储。换句话说,卷对象是虚拟对象的类型,它提供了我们可以写入和读出的设备驱动程序。 周围没有任何空间,plex只是映射得很巧妙,但却无法访问。 卷对象实现了我们需要访问一个或多个plex的UNIX设备节点,这些plex最终提供了该卷的映射后备存储。

卷对象是由例如 以下低级命令:

# vxmake -g mydg vol myvol usetype=fsgen len=2g

现在忽略参数usetype = fsgen; 它用于告诉VxVM新卷的预期用途,并且在语法上是命令所必需的。 让我们看看我们得到了什么:

wps7

同样,新对象尚未连接到任何其他对象。 它是一个独立的空卷对象,其中没有plex。现在让我们将plex放入卷中。 同样,该卷只是一个空的数据结构或虚拟对象,它带有一些标志和其他信息,例如它的大小为2 GB(我们指定len = 2g,就像我们对子磁盘所做的那样)。将plex放入卷中的操作称为附加plex。 plex附加操作的作用是将卷数据复制到plex上,覆盖plex的先前内容。 当然,只有在该卷已保存数据的情况下(即,如果该卷中已经存在至少一个plex),这种情况才会发生,在此情况并非如此。因此,在我们的情况下,发出plex attach命令时不会复制任何内容,但是该卷随后将包含plex块中存储的数据:

# vxplex att myvol myvol-01

好,现在子磁盘位于plex内,以便plex具有后备存储以对其进行I / O。 并将plex连接到一个卷,以便该卷可以从设备驱动程序接口(只有该卷提供)中接收实际的I / O请求。与我们宝贵的手工制作量相对应的设备驱动程序在哪里? 让我们进入/ dev目录!在/ dev目录中,您可以找到用于缓冲(dsk)和取消缓冲(rdsk)磁盘访问的常规子目录。 缓冲的也称为“块I / O”,未缓冲的也称为“原始”或“字符I / O”。

自从我们安装VxVM以来,/ dev目录中的新功能是一个新目录/ dev / vx,其中vx是Veritas的缩写。 在/ dev / vx中,您将找到dsk和rdsk目录,就像在/ dev中看到的一样。区别在于/ dev / * dsk目录包含物理设备的设备驱动程序,因此您会在其中找到常用的c#t#d#s#或类似的设备名称。 与/ dev / * dsk提供的物理视图相反。 / dev / vx / * 目录提供了虚拟存储的视图。因此,在这些目录中,我们显然不需要处理笨拙的控制器名称,但是我们得到了我们为虚拟对象选择的优雅名称,它们按照层次结构很好地排列了。我们看到的是具有VxVM主号码(在本例中为270)和卷的副号码(31000)的设备节点:

wps8

通常,设备路径由前缀/ dev / vx / * dsk生成,后跟一个包含磁盘组名称(mydg)的目录,后跟一个带有卷名称(myvol)的设备驱动程序。

因此,现在我们将尝试在卷上放置文件系统。 这应该像在任何分区上一样工作,因为您应该记住,VxVM必须严格遵循针对更高级别驱动程序模拟分区的行为。如果某个卷的行为与分区有任何不同,则文件系统或数据库或使用该卷的任何其他文件可能会导致意外的结果并使计算机崩溃。 这就是VxVM做出巨大努力以维护分区行为一致性的原因。

但是,当我们现在尝试对手动创建的卷实际执行任何有用的操作时,会出现错误:

wps9

卷的启用:准备起飞

为什么VxVM不让我们访问自己制作的卷? 原因实际上很简单:使用前需要检查该卷的一致性。毕竟,一个分区仅包含一个数据容器:范围对应于切片本身。 但是,一个卷可能保存数据的多个副本,准确地说,最多可以包含32个副本。如果这些不完全相同怎么办? 然后,分区范式就会真正被破坏,因为如果文件系统每次读取相同的扩展区都获得不同的内容,这将导致严重的问题。因此,VxVM需要先检查卷的一致性,然后才能开始使用它。当然,它不会比较整个卷的内容,而是采用一种巧妙的状态和状态转换概念,通过它可以推断出卷的内容是否是正确的或者不是正确的。在后一种情况下,确实需要重新同步卷的内容,而在前一种情况下则无需执行任何操作。如果VxVM永久检查卷的一致性,或者在每个I / O之前检查卷的一致性,那将是一个很愚蠢的主意。 我们希望检查只进行一次; 当我们开始使用该卷时,直到此后我们才将磁盘组逐出,让其他主机使用它来放弃对卷的控制。 那台其他机器不在我们的控制范围之内,因此我们必须在恢复卷时重新检查卷。 检查并因此启用该卷称为“启动”该卷。通过执行简单的命令即可完成:

# vxvol -g mydg start myvol

或者,要启动磁盘组中的所有卷:

# vxvol -g mydg startall

现在,我们真正有了一个虚拟卷,该虚拟卷可用于分区可用于的所有功能:缓冲文件系统I / O,无缓冲或“原始”数据库I / O,文件系统的创建,ufsdump / ufsrestore以及其他所有功能。

wps10

简单方法:vxassist

如果上述内容对您来说听起来很复杂,请记住,这里有一些低级命令供您了解基本数据结构和虚拟对象。 您实际上从未以上述方式创建它们。 创建卷及其包含的所有虚拟对象(plex和子磁盘)的实际方法是使用一个名为vxassist的高级命令。 该命令将为您提供所有明智的思维和辛勤的工作,并为您提供一个随时可以使用的卷,看起来就像您指定的卷一样(除非您不花很多精力,在这种情况下,vxassist会选择合理的默认值) )。 一旦有了其中包含几个磁盘的磁盘组,就可以通过以下非常简单的命令完成上述所有操作:

vxassist -g mydg make myvol 2g

并且通过以下命令可以创建条带化卷(由于缺少子磁盘,我们什至没有完成),包括子磁盘的分配,plex的创建以及卷的启动:

vxassist -g mydg make myvol2 layout=stripe ncol=3 stripewidth=2048

第三部分:将磁盘整合到VxVM

Solaris磁盘处理

成功安装和配置VxVM之后,命令vxdisk list将显示连接到系统且VxVM已知的所有磁盘。 将新磁盘(或LUN,请记住,两者与VxVM相同)连接到Solaris计算机时,不会使该设备对操作系统可见。为了使OS看到新磁盘,需要什么? 首先,操作系统需要一个设备驱动程序,可以使用它来物理“交谈”磁盘所连接的HBA(主机总线适配器)。 现在我们将假定已经安装了HBA驱动程序。 该机器显然还需要在HBA驱动程序之上使用SCSI协议驱动程序,以便它可以与磁盘对话SCSI协议。 始终安装SCSI驱动程序,否则我们将无法从SCSI磁盘启动。 从理论上讲,如果您是从网络或其他非SCSI设备启动的,则实际上可能会缺少SCSI驱动程序,但是除非发生真正奇怪的事情,否则内核会在需要时立即自动加载SCSI驱动程序。 因此,让我们假设我们已经在系统中同时安装了HBA和SCSI协议驱动程序。

现在,我们将新磁盘设备(或新LUN分区)物理连接到系统。 这会使Solaris识别新设备吗? 当然不是。甚至重新引导也不会使磁盘可见,除非我们提供重新配置标志(reboot -- -r)或在引导之前创建一个名为/ reconfigure的文件以使Solaris实际上寻找新设备。但是我们不需要真正重启。 可以这么说,这对操作系统是一种侮辱。 在重新配置模式下引导时,操作系统(Solaris 9; 10跳过第一步)执行的操作是执行命令luxadm -e create_fabric_device以重新获取管理员先前使用cfgadm配置的FC目标以及其WWPN(万维网端口) 名称)存储在/ etc / cfg / fp / fabric_WWN_map中的cfgadm命令。 在这些luxadm命令之后,它最终将调用命令devfsadm。此命令指示设备文件系统配置守护程序进程查询所有控制器上的所有设备,并检查新设备以及丢失的设备。 对于新设备,它将在/ devand / devices中创建设备节点,以便可以通过UNIX文件系统树访问该设备。

这是VxVM第一次有机会看到设备的时候。 除非存在有效的设备文件,否则Volume Manager无法访问磁盘,也无法以某种方式奇迹般地看到OS无法看到的内容或修复OS无法解决的内容。 与任何其他产品一样,VxVM首先要求操作系统能够物理访问设备。

不使用“format”进行格式化

现在,操作系统可以看到磁盘设备了,我们几乎可以完全使用VxVM命令切换到磁盘设备,以便最终摆脱所有物理磁盘遗留物。但是首先,还需要通过操作系统的方式来完成另一件事,那就是格式化磁盘,即在磁盘上放置有效的Solaris标签(或VTOC),以便更高的软件层不能仅仅读取和写入单个块。 磁盘,但实际上可以获取有关它的一些合理的元信息,例如磁盘的大小,分区的数量和位置等。为什么没有有效标签就无法做到这一点? 原因实际上很简单:devfsadm找到一个新磁盘并创建其设备节点时,它不仅会创建一个设备文件,还会创建八个设备文件;每片一个。现在,假设您的新LUN是旧的,是以前笨拙的操作系统中的重复使用的LUN,该操作系统在磁盘的第0块中存储了一些神秘的分区表。 我们将这个新的LUN放入系统中,devfsadm创建了八个设备文件,因此我们可以访问可以在VTOC块中注册的每个Solaris片。 但是,可惜,以前的Windows(或其他)磁盘上没有单个可用分区。我们只能看到格式难以理解的东西。 例如,在字节偏移处,我们期望一个32位的块号指定分区3的偏移量,甚至可能会有一个负值!当我们尝试在这样的分区上创建文件系统时,newfs会做什么? 实际上,它可能会向后跳过并覆盖重要数据,除非程序员特别注意防止这种情况发生。这就是为什么Solaris中要使用的每个磁盘或LUN必须始终携带有效的VTOC的原因。 您使用format命令编写有效的VTOC(在格式化程序中称为“标签”)。 您实际上还可以从Solaris format命令向磁盘发出SCSI“格式化”指令,但是由于所有现代磁盘都已预先格式化,因此几乎从来没有这样做。他们所需要的只是一个有效的Solaris VTOC。 其他操作系统也是如此,因为它们都需要某种进入磁盘或LUN内部数据结构的固定入口点,并且必须在使用介质之前初始化此固定入口点。

在VxVM中查找新磁盘

因此,既然LUN或磁盘正在工作,操作系统就可以看到它,并且LUN甚至都已正确标记,因此操作系统不会绊倒前一个用户的剩余数据。VxVM何时会看到此新磁盘? 我们什至如何知道VxVM是否可以看到磁盘?

好吧,最后一个很简单。 vxdisk列表命令显示VxVM知道的所有磁盘(每行一个),其访问记录在左侧,其状态在右侧。 这是一个例子:

wps11

显然,在这种情况下,VxVM仅看到两个磁盘:它们的访问记录为c0t0d0(恰好是引导磁盘)和c0t10d0。 如果重新启动,它将看到新磁盘吗? 是的,但这将非常类似于Windows,并且对连接到我们当前正在使用的在线银行系统的14,786个用户不是很友好。 我们需要做的就是告诉VxVM去检查新磁盘。 正确的命令是:

# vxdisk scandisks

该命令甚至可以进一步限制为仅查找特定的新磁盘,控制器等,但是给定的形式是最有用的形式,因为很少有人希望使VxVM看到一些新磁盘,但不是全部。 在这些情况下,man vxdisk在解释发出什么命令方面比本书做得更好。

我们的许多读者都会感到惊讶,因为他们可能熟悉使VxVM扫描新磁盘的不同命令。 该命令是:

# vxdctl enable

该命令(vxdctl代表Veritas后台驻留程序控制—它控制Veritas Configuration Daemon vxconfigd)确实可以找到新磁盘(并且在所有最新发行版中都这样做),但是它还能执行更多操作。它实际上对每个磁盘执行物理I / O检查磁盘是否仍可访问。如果磁盘先前未初始化,则它可能会也可能不会尝试重新读取VTOC,以查找有效的专用区域。然后,它可能决定读取或不读取私有区域,以查明其是否有效或是否无效等。它还会重建DMP树并执行许多其他操作。 不幸的是,确切的功能因版本而异,因此我建议您从vxdisk scandisks开始,如果新磁盘没有立即弹出,请仅使用vxdctl enable命令。让我们尝试集成我新连接的磁盘,我们期望它是c0t11d0:

wps12

它不存在,因为操作系统尚未创建设备节点。

wps13

它在那里,但是VxVM的缓存不知道需要刷新。 VxVM对象的所有显示命令均从缓存的数据中读取,因为大容量存储访问可能会减慢计算机或进程的速度。

wps14

在红帽中不重启扫描新设备使用下面方式:

这是操作之前的显示,磁盘从a到e:

wps15

操作如下图:

wps16

显示在操作之后磁盘由a到f,将后面添加的f磁盘显示出来了。

posted @ 2021-01-05 11:07  NewBird001  阅读(2063)  评论(0)    收藏  举报