存储划卷
① 云存储的核心技术:虚拟化存储,究竟虚拟是怎样实现的
虚拟化改变了计算机使用存储的方式。就像物理机器抽象成虚拟机(VM:Virtual Machine)一样,物理存储设备也被抽象成虚拟磁盘(Virtual Disk)。今天我们就来聊聊虚拟化存储(Storage Virtualization)技术,究竟虚拟磁盘是怎样实现的?
虚拟磁盘的实现
我们知道,服务器扩展存储的手段主要有直连存储(DAS)、存储区域网络(SAN)和网络附加存储(NAS)这三种类型。那么哪种存储类型可以用来实现虚拟磁盘呢?
在虚拟化环境中,类似VMWare这样的虚拟机管理程序hypervisor,要同时给很多VM分配存储空间。这个过程中,我们需要先把物理存储资源重新划分成虚拟磁盘,然后再分配给VM。
显然我们不能用DAS方式把物理磁盘直连到VM上,如果这样,需要的物理磁盘就太多了。SAN是以逻辑单元(LUN:Logic Unit)的形式提供存储资源,但是虚拟环境中VM的数量是很大的,而且伦的数量不足以支持这么多虚拟磁盘。
更重要的是,虚拟磁盘是为大量VM共享的,由于VM需要随时创建、删除或迁移,所以需要在迁移VM时共享存储空间,只有原始数据不会丢失。DAS还是SAN,都不适合共享存储。
考虑到资源分配以及共享的问题,虚拟机管理程序以NAS的方式实现虚拟磁盘。VMware通常使用VMFS(虚拟机文件系统)或NFS协议实现虚拟磁盘,VMFS文件系统是专门针对虚拟机环境协议。
每一个虚拟机的数据实际上是一堆文件,及最重要的文件的虚拟磁盘文件(VMDK文件),也有交换分区文件(VSWP文件,等价交换),非易失性存储器(NVRAM的文件相当于BIOS),等等。每个VM对虚拟磁盘的IO操作实际上是对虚拟磁盘文件的读写操作。
设计、施工、和虚拟服务器环境和优化,允许多个虚拟机访问集成的集群存储池,从而大大提高了资源的利用率。使用和实现资源共享,管理员可以直接从更高的效率和存储利用率中获益。
那么我们如何在云计算中使用虚拟磁盘呢?
实例存储
最主要的一种使用虚拟磁盘的方式就是实例存储,每个VM都是虚拟机的一个实例,虚拟机管理程序在每个实例中提供一个仿真硬件环境,它包括CPU、内存和磁盘。这样,虚拟磁盘就是虚拟机实例的一部分,就像物质世界。删除VM后,虚拟磁盘也将被删除。
在这个实例存储模型中,虚拟磁盘与虚拟机之间的存储关系,事实上,它是DAS存储。但是虚拟磁盘的底层实现,我们说,它是以NAS的方式实现的。虚拟机管理程序的作用是存储VM层的存储模型,这是从实施协议分离(VMFS或NFS)的虚拟机的低层。
VMFS协议实现了存储资源的虚拟化,再分配各VMs
卷存储
实例存储有它的限制,开发人员通常希望分离实例数据,例如OS和安装的一些服务器应用程序和用户数据,这样重建VM的时候可以保留用户的数据。
这个需求衍生出另外一种存储模型:卷存储。卷是存储的主要单元,相当于虚拟磁盘分区。它不是虚拟机实例的一部分,它可以被认为是虚拟机的外部存储设备。
该卷可以从一个VM卸载,然后附加到另一个VM。通过这种方式,我们实现了实例数据与用户数据的分离。OpenStack的煤渣是一个体积存储的实现。
除了实例存储和卷存储之外,最后我们还提到另一种特殊的虚拟存储:对象存储。
对象存储
很多云应用需要在不同的VM之间共享数据,它常常需要跨越多个数据中心,而对象存储可以解决这个问题。在前一篇文章中的云计算IaaS管理平台的基本功能是什么?》中曾经提到过对象存储。
在对象存储模型中,数据存储在存储段(bucket)中,桶也可以被称为“水桶”,因为它字面意思。我们可以用硬盘来类推,对象像一个文件,而存储段就像一个文件夹(或目录)。可以通过统一资源标识符(URI:统一资源标识符)找到对象和存储段。
对象存储的核心设计思想实际上是虚拟化,它是文件的物理存储位置,如卷、目录、磁盘等,虚拟化是木桶,它将文件虚拟化为对象。对于应用层,简化了对数据访问的访问,屏蔽了底层存储技术的异构性和复杂性。
对象存储模型
NAS与对象存储各有所长
当然你也许会问,NAS存储技术也是一个可以解决数据共享的问题吗?由于对象存储的大小和成本优势,许多云环境使用对象存储而不是NAS。
因为对象存储将跨多个节点传播,最新数据并不总是可用的 因此,对象存储的数据一致性不强。如果有强一致性的要求,然后你可以使用NAS。目前,在云计算环境中,NAS和对象存储是共存的。
和NAS一样,对象存储也是软件体系结构,而不是硬件体系结构。应用程序通过REST API直接访问对象存储。公共对象存储包括:Amazon S3和OpenStack的Swift。
结语
在实际的云平台应用中,我们需要根据自己的实际情况来合理运用不同的虚拟化存储技术。
对于非结构化的静态数据文件,如音视频、图片等,我们一般使用对象存储。
对于系统镜像以及应用程序,我们需要使用云主机实例存储或者卷存储。
对于应用产生的动态数据,我们一般还需要利用云数据库来对数据进行管理。
② DELL的3200存储划分一个卷,两个WINDOWS服务器同时挂载读写可以么
MD3200是Dell新出的直连存储,6GB的SAS接口。
二台服务器各配一块SAS HBA卡,同时连接共享存储。
双机热备有很多实现方法,比如微软、Pluswell、Rose HA等等,至于具体步骤无法提供。可以找供应商帮助实施。
先用Dell的存储管理工具,将柜子分配给主机,然后配置Windows Cluster
Windows Cluster 配置相对比较简单,请参考以下文章
http://technet.microsoft.com/zh-cn/library/cc758783(WS.10).aspx
③ 文件存储空间管理
上篇文章介绍了文件的物理结构并介绍了文件分配的三种方式——连续分配、链接分配和索引分配。
本文介绍操作系统对文件存储空间的管理。
本文内容
存储空间的划分: 将物理磁盘划分为一个个文件卷(逻辑卷、逻辑盘) 。
在存储空间初始化时,需要将各个文件卷划分为目录区、文件区。
有些系统支持超大型文件,可支持由多个物理磁盘组成一个文件卷。
空闲表法:即用一张表记录磁盘中空闲的盘块。空闲表的表项由 空闲盘的起始块号 和 空闲盘块数 组成。如下图所示
如何分配磁盘块:与内存管理中的动态分区分配类似,为一个文件分配连续的存储空间。同样可以采用 首次适应算法、最佳适应算法、最坏适应算法,临近适应算法 来决定要为文件分配哪些区间。
空闲表法适用于连续分配方式。
例如,如果新创建的文件请求3个块,按照首次适用算法,从10号块开始有5个连续的块可以满足需求,所以把10、11、12三个块分配给文件,分配后的空闲盘块表如下
这里以回收区前后都是空闲区为例,磁盘是第一幅图的状态,如果回收21、22号磁盘块,那么回收后的空闲盘块表如下图所示。
空闲链表法分为两种: 空闲盘块链和空闲盘区链
下图分别表示空闲盘块链和空闲盘区链。
操作系统保存着 链头、链尾指针。
如何分配:如过某文件申请K个盘块,则从链头开始依次摘下K个盘块分配,并修改空闲链的链头指针。
如何回收:回收的盘块依次挂到链尾,并修改空闲链的链尾指针。
下图表示分配了3个盘块
从上面可以看出,空闲盘块法适用于 离散分配 的物理结构。为文件分配多个盘块时可能要重复多次操作。
操作系统保存着 链头、链尾指针 。
如何分配:若某文件申请K个盘块,由于空闲盘区链将连续的盘块组成一个盘区,所以若某个盘区大小满足可以实现一次分配,同样可以采用首次适用、最佳适用等算法,从链头开始检索,按照一定的规则找到一个大小符合要求的空闲盘区分配给文件。若没有合适的连续空闲块,也可以将不同的盘区的盘同时分配给一个文件,同样分配后也需要修改相应的指针链和盘区大小等数据。
如何回收:若回收区和某个空闲盘区相邻,则需要将回收区合并到空闲盘区中。若回收区没有和任何空闲区相邻,将回收区作为一个单独的一个空闲盘区挂到链尾。同样也需要修改链表指针和盘区大小等信息。
下图表示按照首次适用算法分配3个盘区
从上面可以看出,空闲盘区链对 离散分配、连续分配 都适用。为一个文件分配多个盘块时 效率更高 。
位示图:磁盘内存被划分为一个个磁盘块,可以用二进制位对应一个盘块。“0”代表盘块空闲,“1”代表盘块已分配。位示图一般用连续的“字”来表示,下图中一个字的字长是16位,字中的每一位对应一个盘块。因此可以用(字号,位号)对应一个盘块号。
如何分配:若文件需要K个块,①顺序扫描位示图,找到K个相邻或不相邻的“0”;②根据字号、位号算出对应的盘块号,将相应的盘块分配给文件;③将相应的位设置为“1”。
如何回收:①根据回收的盘块号计算出对应的字号、位号;②将相应的二进制位设置为“0”。
从上面可以看出:位示图法对 连续分配和离散分配 都适用。
空闲表法、空闲链表法不适用大型文件系统,因为空闲表或空闲联保可能过大。UNIX系统中采用了 成组链接法 对磁盘空闲块进行管理。这是将上述两种方法相结合的而形成的一种空闲管理方法。
文件卷的目录区中专门用一个磁盘块作为 超级块 ,当系统启动时需要将 超级块读入内存 。并且要保证与外存中的“超过块”的数据一致。
内存的分配过程:分配过程是从栈顶取出一空闲盘块号,将与之对应的盘块分配给用户,然后将栈顶指针下移一格,若该盘块号已是栈底(即第一个盘块),这是当前栈中最后一个可分配的盘块号。由于在该盘块号所对应的盘块中记有下一组可用的盘块号,因此,不能直接将它分配掉,需要将它记录的下一组信息保存下来,所以比须调用磁盘读过程,将栈底盘块号所对应盘块的内容读入栈中,作为新的盘块号栈的内容,并把原栈底对应的盘块分配出去(其中的有用数据已读入栈中)。然后,再分配一相应的缓冲区(作为该盘块的缓冲区)。最后,把栈中的空闲盘块数减1 并返回。
下面举例说明
如果此时新建一个文件需要一个磁盘块,那么此时第一组有100个空闲块,所以是足够分配的,将栈顶的盘块号即201号盘块对应的盘块分配出去,如下图
如果此时又创建一个新的文件,需要99个磁盘块,就需要将剩下的99个盘块全部分配出去,但是此时300号盘块记录了下一组信息,如果分配出去,信息就是丢失,所以需要将300号盘块从外存(磁盘)读入内存,将300号盘块记录的信息,写入空闲盘块号栈,然后才能将这99块空闲块分配出去。具体过程如下图所示
内存的回收过程:在系统回收空闲盘块时,须调用盘块回收过程进行回收。它是将回收盘块的盘块号记入空闲盘块号栈的顶部,并执行空闲盘块数加 1 操作。当栈中空闲盘块号数目已达 100 时,表示栈已满,便将现有栈中的100 个盘块号记入新回收的盘块中,再将其盘块号作为新栈底。
以分配的第一个图为例,201盘块被分配出去了,如果此刻有个文件被删除了,其占用的盘块是199号,系统需要回收这个盘块,发现此时空闲盘块号栈中记录空闲块数为99,直接将盘块号记录栈顶,将空闲盘块数加1即可。
如果此时又有一个文件被删除了,其占用的盘块是190,此时空闲盘块号数已经达到100了,就需要将现在空闲盘块栈中信息记入新回收的块中。
④ U盘可以分成启动盘和存储盘两个不同格式的分区吗
可以(但有条件)
需要对U盘进行重新量产,而量产时,可对U盘进行分区(盘),第一个,就是引导盘,什么格式无所谓,剩余的空间做为第二个区(盘),是普通的,什么格式也无所谓
也可以这样量产,第一个区为光盘。第二个为普通盘。注意:光盘为只读,里面的东西是不被感染病毒和删除的。
前面说的这些,要看你的量产工具,并不是所有U盘的量产工具都可以。你先查看一下你U盘的主控芯片,再找你芯片相关的量产工具,如果你的量产工具支持,那就可以,如果不支持,就不可以。
注意:量产有风险,搞不好,你的U盘就坏了。
为什么说是盘,因为量产过后,你的U盘接入电脑后,会出现两个U盘。当然其实还是它自己。
听说有的还有量产成多个盘,但我没见过。
=========================
另:你可以在WIN下分区
因为U盘也是一个独立的磁盘。WIN可以给它分区,分区后,虽是一个盘,但在电脑中却可以看到两个盘符。当然你也可以给它做不同的分区格式。
这样分区后,你的引导盘,可能就不可用了。不过,你可以自己修改分区参数达到目的。用diskgen就可以修改分区参数。只是我不懂分区参数这一块。需要你自己参悟了。
因为在做U盘引导时,工具一般都会把U盘分区成为一个区。而当你手动分成2个区时,可能就破坏了前面做的引导参数,所以才需要你自己修改