提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
什么是数据?
数据是对所有事物的数字表示。
数据的种类
①结构化数据
②半结构化数据
③非结构化数据
数据的处理周期
数据处理是人或机器对数据进行的重组或重新排序,以增加其特定的价值。数据处理包括以下基本步骤:

什么是信息?
信息是已经被处理、具有逻辑关系的数据,是对数据的解释。
信息是经过处理的数据,其中包括具有上下文,相关性和目的的数据。

数据与信息的关系
数据经过加工处理之后,能够成为信息;而信息需要经过数字化转变成数据才能存储和传输。

信息生命周期管理
ILM(Information life cycle managment,信息生命周期管理)是指从信息产生和初始储存阶段到最后过时被删除时的一套综合管理方法。

什么是数据存储?

数据存储系统

存储的物理结构

数据存储分类

数据管理技术的演变

数据存储的应用

存储架构历程

从硬盘到磁盘阵列

从分离到融合

分布式存储
通过软件将物理资源组织起来构成高性能逻辑存储池,在保证可靠性的同时提供多种存储服务。
一般而言,分布式存储是将数据分散存储在多台独立的设备上,采用可扩展的系统结构、利用多台存储服务器分担存储负荷、利用位置服务器定位存储信息。

存储虚拟化
存储虚拟化可以将存储设备进行抽象,以逻辑资源的方式呈现,统一提供全面的存储服务。
可以在不同的存储形态或设备类型之间提供统一的功能。

云存储
云存储系统是一个多存储设备、多应用、多服务协同工作的集合体,它使用高度虚拟化的多租户基础设施为企业提供可扩展的存储资源,可以根据组织的要求动态配置。

机械硬盘发展简史
容量越来越大,体积越开越小

固态硬盘发展简史

闪存介质发展

接口协议
接口协议指的是需要进行信息交换的接口间需要遵从的通信方式和要求。
硬盘接口是硬盘与主机系统间的连接部件。

接口协议发展简史

NVMe与NVMe-oF
NVMe,Non-Volatile Memory Express
提升性能
降低时延
NVMe-oF,NVMe over Fabrics
潜力:低延迟,高带宽
目的:加速服务器主机和目标存储设备之间的数据传输

存储产品发展历程

智能时代来临
蒸汽时代——>电气时代——>信息时代——>智能时代

智能时代对数据存储的新要求

智能时代数据存储的特征

数据存储发展趋势

存储介质发展趋势

DNA存储
DNA作为存储介质的优势:
体积小;
密度大;
稳定性强。
现阶段的瓶颈与局限:
DNA分子合成成本高;
读取和搜索数据的效率不高。
原子存储
因原子足够小,原子存储器的单位体积容量也会比现有介质更大。
随着科技的发展,有序排列原子成为了现实。
现阶段的瓶颈与局限:
原子存储器对运行环境要求严苛
量子存储
量子存储器难以同时满足的条件:
高存储效率;
低噪音;
长寿命;
室温下使用。
存储网络发展趋势

华为存储产品发展历程

智能数据存储架构

智能存储组件分为控制框、硬盘框、级联模块、硬盘、接口模块等五个组件。
控制框采用部件模块化设计,主要由系统插框、控制器(内含风扇模块)、BBU模块、电源模块、管理模块和接口模块等组成。
控制框正视图详解

是全新一代中端混合闪存存储系统,为企业提供稳定可靠,融合高效的数据服务。

用于连接应用服务器的前端端口接口模块,根据每个接口模块能够访问的控制器的数目的不同,分为共享接口模块与非共享接口模块。

控制器,Ctrl :存储系统中承载业务处理的核心模块
BBU模块,能够在系统外部供电失效的情况下,提供后备电源支持,以保证存储阵列中业务数据的安全性
电源模块,PSU(Power supply Unit)电源模块为交流电源模块,支持控制框在最大功耗模式下正常运行
笔记本电源模式 接入电源后 最大功率模式
管理模块:主要提供管理接口,包括管理网口、串口、维护网口
接口模块:IM ,承载业务或管理接口的现场科更换模块
控制器是设备中的核心部件,主要负责处理存储业务、接收用户的配置管理命令、_保存配置信息、接入硬盘和保存关键信息到保险箱硬盘。

BBU模块和风扇模块

硬盘框采用部件模块化设计,主要由系统插框、级联模块、电源模块和硬盘模块等组成。
系统插框:通过背板为各种接口模块提供可靠的连接,实现各个模块之间的信号互连与电源互连。
级联模块:通过级联端口来级联控制框和其他硬盘框,实现与控制框和其他硬盘框的通信,是控制框与硬盘框之间、硬盘框与硬盘框之间进行数据传输的连接点。
电源模块:可以支持硬盘框在最大功耗模式下正常运行。
硬盘模块:为存储系统提供存储容量,可作为系统保险箱,并且可以实现业务数据、系统数据和缓存数据的存储作用。

硬盘框正视图


每个级联模块提供1个级联端口“P0”和1个级联端口“P1”。级联模块通过级联端口来级联控制框或硬盘框,实现与控制框或硬盘框的通信,是控制框与硬盘框之间进行数据传输的连接点。

华为CloudEngine 系列盒式交换机是面向数据中心推出的新一代高性能、高密度、低时延以太网交换机,采用灵活的前后/后前风道设计,可以应用于IP SAN组网,分布式存储组网场景。

光纤交换机是一种高速的网络传输中继设备,它较普通交换机而言采用了光纤电缆作为传输介质。光纤传输的优点是速度快、抗干扰能力强,可应用于FC SAN组网场景。

串口线缆用来连接设备的系统串口到维护终端。

硬盘分为机械硬盘和固态硬盘。
机械硬盘的结构大致包括:盘片、磁头臂、读/写磁头、主轴、硬盘接口和控制电路等。

工作原理
硬盘容量和缓存
硬盘容量
硬盘容量=柱面数磁头数扇区数*扇区大小,单位为MB或GB,影响硬盘容量的因素有单
碟容量和碟片数量。 缓存(Cache) 由于CPU和硬盘之间存在巨大的速度差异,为解决硬盘在读写数据时CPU的等待问题,在硬盘上设置适当的高速缓存,以解决二者之间速度不匹配的问题,硬盘缓存与CPU上的高速缓存作用一样,是为了提高硬盘的读写速度。
影响硬盘性能的因素
单碟容量是影响硬盘连续IO时吞吐量性能的首要因素。
转速是影响硬盘随机IO性能的首要因素。
寻道速度是影响硬盘性能的一个间接因素。
接口速度是影响硬盘性能的一个最不重要的因素。
固态硬盘概述
相对于HDD而言,固态硬盘SSD在性能、可靠性、能耗、轻便性方面有着绝对的优势,目前已经在各领域得到广泛应用。
SSD特点:
使用flash技术存储信息,数据传输速度比HDD快
内部没有机械结构因此耗电量更小、散热小、噪音小
SSD盘使用寿命受擦写次数影响
CPU的虚拟化技术是一种硬件方案,支持虚拟技术的CPU带有特别优化过的指令集来控制虚拟过程,通过这些指令集,VMM会很容易提高性能。
服务器虚拟化能够通过区分资源的优先次序,并随时随地将服务器资源分配给最需要它们的工作负载来简化管理和提高效率,从而减少为单个工作负载峰值而储备的资源。
虚拟存储设备需要通过大规模的raid子系统和多个I/O通道连接到服务器上,智能控制器提供LUN访问控制、缓存和其他如数据复制等管理功能。
网络虚拟化整合后的设备组成了一个逻辑单元,在网络中表现为一个网元节点,管理简单化、配置简单化、可跨设备链路聚合,极大简化网络架构,同时进一步增强冗余可靠性。
应用虚拟化通常包括两层含义,一是应用软件的虚拟化,一是桌面的虚拟化。
内存管理
KVM 从 LinuX继承了强大的内存管理功能。一个虚拟机的内存与任何其他 Linux 进程的内存一样进行存储,可以以大页面的形式进行交换以实现更高的性能,也可以以硬盘文件的形式进行共享。Numa支持(非一致性内存访问,针对多处理器的内存设计)允许虚拟机有效地访问大量内存。
存储
KVM 能够使用 Linux 支持的任何存储方式来存储虚拟机镜像,包括具有 IDE、SCSI和 SATA的本地硬盘,网络附加存储(NAS )(包括 NFS 和 SAMBA/CIFS),或者支持 ISCSI和光纤通道的 SAN。多路径 VO 可用于改进存储吞吐量和提供冗余。由于KVM 是 Linux 内核的一部分,它可以利用所有领先存储供应商都支持的一种成熟且可靠的存储基础架构,它的存储堆栈在生产部署方面具有良好的记录。
设备驱动程序
KVM 支持混合虚拟化,其中准虚拟化的驱动程序安装在客户机操作系统中,允许虚拟机使用优化的I/O 接口而不使用模拟的设备,从而为网络和块设备提供高性能的 VO。KVM 准虚拟化的驱动程序使用 IBM和 Red Hat 联合 Linux 社区开发的 Virtio 标准,它是一个与虚拟机管理程序独立的、构建设备驱动程序的接口,允许为多个虚拟机管理程序使用一组相同的设备驱动程序,能够实现更出色的虚拟机交互。
Linux 的性能和可伸缩性
KVM 也继承了 Linux 的性能和可伸缩性。KVM 虚拟化性能在很多方面(如计算能力、网络带宽等)已经可以达到非虚拟化原生环境 95%以上的性能。KVM 的扩展性也非常好,客户机和宿主机都可以支持非常多的 CPU 数量和非常大的内存。例如,Red Hat 官方文档就介绍过,RHEL 6.×系统中的一个KVM 客户机可以支持 160 个虚拟 CPU 和高达 2Tb的内存,KVM 宿主机支持4096 个CPU 核心和高达 64Tb 的内存。
KVM可以运行在不支持虚拟化的CPU硬件上,但是在这样的话,效率会很低;KVM也可能会和虚拟机virtualbox冲突; KVM只是提供命令行接口,用户可以写脚本来管理KVM,并没有一个友好的GUI。
1.在线迁移;
2.高可用;
3.系统计划调度;
4.电源管理;
5.模板管理;
6.快照。
1.性能和可扩展性:为实现企业级的虚拟化应用程序,如Oracle、SAP和MicrosoftExchange,为其提供领先的性能和可扩展性。
2.安全性:业界领先的安全性,在安全增强型红帽企业Linux内核基础上构建。
3.企业功能:业虚拟化管理功能,包括实时迁移、高可用性、负载均衡、节能等。
4.灵活性:通过消除桌面操作系统和基础硬件之间的依赖性,实现业务灵活性和连续性。
5.成本优势:与其他解决方案相比较,凭借红帽软件订阅模式的强大功能,能够以更低的购置和总拥有成本获得相同或更好的功能集,从而获得收益。
1.技术不成熟:KVM的出现不过三四年时间,在可用资源、平台支持、管理工具、实施经验方面当然不能与出现8年之久的Xen相比。
2.需要Windows支持;KVM3.0之前的RHEV-M管理程序需要Windows支持,这是KVM在部署过程中最大的障碍,RedHat公司已经意识到这个问题的严重性,从KVM3.0开始,开发出基于Linux的RHEV-M,取消了其只能运行于Windows服务器上的尴尬,这一改动得到大量Linux用户的支持。
3.管理的物理服务器数量少,每台M端只能管理500台以内的H端服务器。
VMware Workstation VMware Workstation是VMware公司销售的运行于台式机和工作站上的虚拟化软件,也是VMware公司第一个面市的产品(1999年5月)。该产品最早采用了VMware在业界知名的二进制翻译技术,在x86CPU硬件虚拟化技术还未出现之前,为客户提供了纯粹的基于软件的全虚拟化解决方案。
VMware ESX Server ESX服务器(一种能直接在硬件上运行的企业级的虚拟平台),虚拟的SMP,它能让一个虚拟机同时使用四个物理处理器,和VMFS一样,它能使多个ESX服务器分享块存储器。
Virtual Box Oracle VirtualBox是由德国InnoTek软件公司出品的虚拟机软件,现在由甲骨文公司进行开发,是甲骨文公司xVM虚拟化平台技术的一部分。它提供使用者在32位或64位的Windows、Solaris及Linux操作系统上虚拟其他X86的操作系统。使用者可以在VirtualBox上安装并执行Solaris、Windows、DOS、Linux、OS/2Warp、OpenBSD及FreeBSD等操作系统作为客户端操作系统。最新的VirtualBox还支持运行Android4.0系统。
Hyper-V Hyper-V是微软提出的一种系统管理程序虚拟化技术。Hyper-V设计的目的是为广泛的用户提供更为熟悉及成本效益更高的虚拟化基础设施软件,这样可以降低运作成本、提高硬件利用率、优化基础设施并提高服务器的可用性。
用户模式的Qemu利用LibKVM 通过loctl进入内核模式,KVM 模块为虚拟机创建虚拟内存,虚拟CPU后执行VmLaunch指令进入客户模式。加载GbuestOS并执行。如果GuestOS 发生外部中断或者影子页表缺页等情况,则GuestOS的执行会被暂停,并退出客户模式,执行异常处理,之后重新进入客户模式,执行客户代码。如果发生//O事件或者者信号队列中有信号到达,就会进入用户模式处理。
KVM 切换器的主要目的是让同一组KVM操作台司可以连接到多台设备,这可以让使用者从操作台访问及控制许多台计算机或服务器。能够选择性地从自己已的KVM操作台控制一个或另一个设备。大多数企业都需要服务器来执行幕后的工作以协助企业顺畅运运作。

从虚拟机的基本架构上来分析,虚拟机一般分为两种,分别称为类型一和类型二。
其中,类型一虚拟机是在系统上电之后首先加载运行虚拟机监控程序,而传统的操作系统则是运行在其创建的虚拟机中。类型一的虚拟机监控程序,从某种意义上说,可以视为一个特别为虚拟机而优化裁剪的操作系统内核。因为,虚拟机监控程序作为运行在底层的软件层,必须实现诸如系统的初始化。物理资源的管理等操作系统的职能;它对虚拟机的创建、调度和管理,与操作系统对进程的创建、调度和管理有共通之处。这一类的虚拟机监控程序一般会提供一个具有一定特权的特殊虚拟机,由这个特殊虚拟机来运行需要提供给用户日常操作和管理使用的操作系统 环境。著名的开源虚拟化软件Xen、商业软件VMware ESX/ESXI和微软的Hyper-V就是类型一虚 拟机的代表与类型一虚拟机的方式不同,类型二虚拟机监控程序在系统上电之后仍然运行一般意义上的操作系统(也就是俗称的宿主机操作系统)虚拟机监控程序作为特殊的应用程序,可以视作操作系统功能的扩展,类型二虚拟机最大的优势在于可以充分利用现有的操作系统。因为虚拟机监控程序通常不必自己实现视理资源的管理和调度算法,所以实现起来比较简洁。但是,这一类型的虚拟机监控程序既然依赖操作系统来实现管理和调度。就同样也会受到宿主操作系统的一些限制。例如,通常无法仅仅为了虚拟化的优化而对操作系统做出修改。本书介绍的KVM就属于类型二的虚拟机,另外,VMware Workstation. nuaBox 也属于类型二虚拟机。

KVM 模块是KVM 虚拟机的核心部分。其主要功能是初始化CPU硬件,打开虚拟化模式,然后将虚拟客户机运行在虚拟机模式下,并对虚拟客户机的运行提供一定的支持。
为了软件的简洁性并保证其性能,KVM 仅支持硬件虚拟化。打开并初始化系统硬件以支持虚拟机的运行,是KVM模块的职责所在。以KVM在Intel公司CPU上的运行为例,在被内核加载的时候, KVM模块会先初始化内部的数据结构;做好准备之后,KVM模块检测系统当前的CPU,然后打开 CPU控制寄存器CR4中的虚拟化模式开关,并通过执行vmxon指令将宿主操作系统(包括KVM模块本身)置于虚拟化模式中的根模式;最后,KVM模块创建特殊设备文件/dev/kvm并等待来自用户空间的命令。接下来,虚拟机的创建和运行将是一个用户空间的应用程序(Qemu)和KVM 模块相互配合的过程。

Qemu是纯软件实现的虚拟化模拟器,几乎可以模拟任何硬件设备,是一个完整的可以运行的软件,非常灵活可移植,我们最熟悉的就是能够模拟一台能够独立运行操作系统的虚拟机,虚拟机认为自己和硬件打交道,但其实是和Qemu模拟出来的硬件打交道,Qemu将这些指令转译给真正的硬件。
QEMU本身并不是KVM的一部分,其自身就是一个著名的开源虚拟机软件。与KVM不同,QEMU虚拟机是一个纯软件的实现,所以性能地下。但是,其优点是在支持QEMU本身编译运行的平台上就可以实现虚拟机的功能,甚至虚拟机可以与宿主机并不是同一个架构。作为一个存在已久的虚拟机,QEMU的代码中有整套的虚拟机实现,包括处理器虚拟化、内存虚拟化,以及KVM使用到的虚拟设备模拟(比如网卡、显卡、存储控制器和硬盘等)。
从QEMU和KVM模块之间的关系可以看出,这是典型的开源社区在代码共用和开发项目共用上面的合作。诚然,QEMU可以选择其他的虚拟机或技术来加速,比如Xen或者KQEMU;KVM也可以选择其他的用户空间程序作为虚拟机实现,只要它按照KVM提供的API来设计。但是在现实中,QEMU与KVM两者的结合是最成熟的选择,这对一个新开发和后起的项目(KVM)来说,无疑多了一份未来成功的保障。

第一种模式是通过kqemu模块实现内核态的加速。
第二种模式是在用户态直接运行QEMU,由QEMU对目标机的 所有 指令进行翻译后执行,相当于全虚拟化。
第三种模式则是KVM官方提供的kvm-qemu加速模式。
①QEMU可以在没有主机内核驱动程序的情况下运行。
②它适用于多种操作系统(GNU / Linux,* BSD,Mac OS X,Windows)和体系结构。
③它执行FPU的精确软件仿真。
QEMU的两种操作模式:完整的系统仿真和用户模式仿真。
QEMU用户模式仿真具有以下功能:
①通用Linux系统调用转换器,包括大部分ioctls。
②使用本机CPU clone的仿真为线程使用Linux调度程序。
③通过将主机信号重新映射到目标信号来实现精确信号处理。
QEMU全系统仿真具有以下特点:
QEMU使用完整的软件MMU来实现最大的便携性。
①QEMU可以选择使用内核加速器,如kvm。加速器本地执行大部分客户代码,同时继续模拟机器的其余部分。
②可以仿真各种硬件设备,并且在某些情况下,客户机操作系统可以透明地使用主机设备(例如串行和并行端口,USB,驱动器)。主机设备传递可用于与外部物理外围设备(例如网络摄像头,调制解调器或磁带驱动器)交谈。
③对称多处理(SMP)支持。目前,内核加速器需要使用多个主机CPU进行仿真。
Qemu是一个独立的虚拟化解决方案,通过intel-VT 或AMD SVM实现全虚拟化,安装qemu的系统,可以直接模拟出另一个完全不同的系统环境。QEMU本身可以不依赖于KVM,但是如果有KVM的存在并且硬件(处理器)支持比如Intel VT功能,那么QEMU在对处理器虚拟化这一块可以利用KVM提供的功能来提升性能。
KVM是集成到Linux内核的Hypervisor,是X86架构且硬件支持虚拟化技术(Intel-VT或AMD-V)的Linux的全虚拟化解决方案。它是Linux的一个很小的模块,利用Linux做大量的事,如任务调度、内存管理与硬件设备交互等。准确来说,KVM是Linux kernel的一个模块。

qemu-img是QEMU的磁盘管理工具,在qemu-kvm源码编译后就会默认编译好qemu-img这个二进制文件。qemu-img也是QEMU/KVM使用过程中一个比较重要的工具。
①check [-f fmt] filename
对磁盘镜像文件进行一致性检查,查找镜像文件中的错误,目前仅支持对“qcow2”、“qed”、“vdi”格式文件的检查。
②create [-f fmt] [-o options] filename [size]
创建一个格式为fmt大小为size文件名为filename的镜像文件。
③commit [-f fmt] [-t cache] filename
提交filename文件中的更改到后端支持镜像文(创建时通过backing_file指定的)中去。
④convert [-c] [-p] [-f fmt] [-t cache] [-O output_fmt] [-o options] [-s snapshot_name] [-S sparse_size] filename [filename2 […]] output_filename
将fmt格式的filename镜像文件根据options选项转换为格式为output_fmt的名为output_filename的镜像文件。
⑤info [-f fmt] filename
展示filename镜像文件的信息。
⑥snapshot [-l | -a snapshot | -c snapshot | -d snapshot] filename
“-l” 选项是查询并列出镜像文件中的所有快照,
“-a snapshot”是让镜像文件使用某个快照,
“-c snapshot”是创建一个快照,“-d”是删除一个快照。
⑦rebase [-f fmt] [-t cache] [-p] [-u] -b backing_file [-F backing_fmt] filename
改变镜像文件的后端镜像文件,只有qcow2和qed格式支持rebase命令。
⑧resize filename [+ | -]size
改变镜像文件的大小,使其不同于创建之时的大小。
此命令用于创建虚拟机,其使用格式为“qemu-kvm [options] [disk_image]”,其选项非常多,大致可分为如下几类:
标准选项;
USB选项;
显示选项;
i386平台专用选项;
网络选项;
字符设备选项;
蓝牙相关选项;
Linux系统引导专用选项;
调试/专家模式选项;
PowerPC专用选项;
Sparc32专用选项。
qemu-kvm的标准选项
该选项主要涉及指定主机类型、CPU模式、NUMA、软驱设备、光驱设备及硬件设备等。
qemu-kvm的显示选项
该选项主要用来配置虚拟机的显示状态。
网络属性相关选项:
该选项用来配置虚拟机的网络信息。
qga是一个运行在虚拟机内部的普通应用程序(可执行文件名称默认为qemu-ga,服务名称默认为qemu-guest-agent),其目的是实现一种宿主机和虚拟机进行交互的方式,这种方式不依赖于网络,而是依赖于virtio-serial(默认首选方式)或者isa-serial,而QEMU则提供了串口设备的模拟及数据交换的通道,最终呈现出来的是一个串口设备(虚拟机内部)和一个unix socket文件(宿主机上)。
qga通过读写串口设备与宿主机上的socket通道进行交互,宿主机上可以使用普通的unix socket读写方式对socket文件进行读写,最终实现与qga的交互,交互的协议与qmp(QEMU Monitor Protocol)相同(简单来说就是使用JSON格式进行数据交换),串口设备的速率通常都较低,所以比较适合小数据量的交换。
这是一个执行 Qemu I/O 操作的命令行工具,可以对qemu-img创建的镜像进行I/O测试,其帮助文档为,使用格式为qemu-io [-h] [-V] [-rsnm] [-c cmd] … [file],下面是常用的选项:
(1)-c, --cmd:执行指令;
(2)-r, --read-only:设置出口为只读模式;
(3)-s, --snapshot:使用快照文件进行测试;
(4)-n, --nocache:禁用主机缓存;
(5)-k, --native-aio:使用内核AIO实现(仅在Linux上);
(6)-t, --cache=MODE:对image使用指定的缓存模式。
qemu-nbd在有的系统上叫kvm-nbd,qemu-nbd-xen等。基本上都一样。用qemu-nbd实现mount虚拟硬盘到Host上的功能。
网络块设备: Network Block Device。
可以将一个远程主机的磁盘空间,当作一个块设备来使用,就像一块硬盘一样。使用它,可以很方便的将另一台服务器的硬盘空间增加到本地服务器上。
NBD与NFS有所不同,NFS只是提供一个挂载点供客户端使用,客户端无法改变这个挂载点的分区格式。而NBD提供的是一个块设备,客户端可以把这个块设备格式化成各种类型的分区,更便于用户的使用。
qemu-img支持非常多种的文件格式,我们可以通过“qemu-img --help”查看帮助文档得到,它支持二十多种格式:vvfat、vpc、vmdk、vhdx、vdi、ssh、sheepdog、rbd、raw、host_cdrom、host_floppy、host_device、file qed、qcow2、qcow、parallels、nbd、iscsi、gluster、 dmg、tftp、ftps、ftp、https、http、cloop、bochs、blkverify、blkdebug。
①raw
raw格式是简单的二进制镜像文件,一次性会把分配的磁盘空间占用。
②host_device
在需要将镜像转化到不支持空洞的磁盘设备时需要用这种格式来代替raw格式。
③qcow2
qcow2是QEMU目前推荐的镜像格式,它是功能最多的格式。
④qcow
较旧的QEMU镜像格式,现在已经很少使用了,一般用于兼容比较老版本的QEMU。它支持backing_file(后端镜像)和encryption(加密)两个选项。
⑤cow
copy-on-write format,写时复制格式。曾经qemu的写时拷贝的镜像格式,目前由于历史遗留原因不支持窗口模式,后来被qcow格式所取代。
⑥vdi
兼容Oracle(Sun)VirtualBox1.1的镜像文件格式(Virtual Disk Image)。
⑦vmdk
VMDK(VMWare Virtual Machine Disk Format)是虚拟机VMware创建的虚拟硬盘格式,文件存在于VMware文件系统中,被称为VMFS(虚拟机文件系统)。
⑧vpc
兼容Microsoft的Virtual PC的镜像文件格式(Virtual Hard Disk format)。
⑨sheepdog
Sheepdog项目是由日本的NTT实验室发起的,为QEMU/KVM做的一个开源的分布式存储系统,为KVM虚拟化提供块存储。
⑩cloop
压缩的loop格式,主要用于可直接引导优盘或者光盘的一种镜像格式。
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
我想在Ruby中创建一个用于开发目的的极其简单的Web服务器(不,不想使用现成的解决方案)。代码如下:#!/usr/bin/rubyrequire'socket'server=TCPServer.new('127.0.0.1',8080)whileconnection=server.acceptheaders=[]length=0whileline=connection.getsheaders想法是从命令行运行这个脚本,提供另一个脚本,它将在其标准输入上获取请求,并在其标准输出上返回完整的响应。到目前为止一切顺利,但事实证明这真的很脆弱,因为它在第二个请求上中断并出现错误:/usr/b
我正在编写一个简单的静态Rack应用程序。查看下面的config.ru代码:useRack::Static,:urls=>["/elements","/img","/pages","/users","/css","/js"],:root=>"archive"map'/'dorunProc.new{|env|[200,{'Content-Type'=>'text/html','Cache-Control'=>'public,max-age=6400'},File.open('archive/splash.html',File::RDONLY)]}endmap'/pages/search.
?博客主页:https://xiaoy.blog.csdn.net?本文由呆呆敲代码的小Y原创,首发于CSDN??学习专栏推荐:Unity系统学习专栏?游戏制作专栏推荐:游戏制作?Unity实战100例专栏推荐:Unity实战100例教程?欢迎点赞?收藏⭐留言?如有错误敬请指正!?未来很长,值得我们全力奔赴更美好的生活✨------------------❤️分割线❤️-------------------------
网络编程套接字网络编程基础知识理解源`IP`地址和目的`IP`地址理解源MAC地址和目的MAC地址认识端口号理解端口号和进程ID理解源端口号和目的端口号认识`TCP`协议认识`UDP`协议网络字节序socket编程接口`sockaddr``UDP`网络程序服务器端代码逻辑:需要用到的接口服务器端代码`udp`客户端代码逻辑`udp`客户端代码`TCP`网络程序服务器代码逻辑多个版本服务器单进程版本多进程版本多线程版本线程池版本服务器端代码客户端代码逻辑客户端代码TCP协议通讯流程TCP协议的客户端/服务器程序流程三次握手(建立连接)数据传输四次挥手(断开连接)TCP和UDP对比网络编程基础知识
MIMO技术的优缺点优点通过下面三个增益来总体概括:阵列增益。阵列增益是指由于接收机通过对接收信号的相干合并而活得的平均SNR的提高。在发射机不知道信道信息的情况下,MIMO系统可以获得的阵列增益与接收天线数成正比复用增益。在采用空间复用方案的MIMO系统中,可以获得复用增益,即信道容量成倍增加。信道容量的增加与min(Nt,Nr)成正比分集增益。在采用空间分集方案的MIMO系统中,可以获得分集增益,即可靠性性能的改善。分集增益用独立衰落支路数来描述,即分集指数。在使用了空时编码的MIMO系统中,由于接收天线或发射天线之间的间距较远,可认为它们各自的大尺度衰落是相互独立的,因此分布式MIMO
我去了这个website查看Rails5.0.0和Rails5.1.1之间的区别为什么5.1.1不再包含:config/initializers/session_store.rb?谢谢 最佳答案 这是删除它的提交:Setupdefaultsessionstoreinternally,nolongerthroughanapplicationinitializer总而言之,新应用没有该初始化器,session存储默认设置为cookie存储。即与在该初始值设定项的生成版本中指定的值相同。 关于
我正在关注Hartl的railstutorial.org并已到达11.4.4:Imageuploadinproduction.我做了什么:注册亚马逊网络服务在AmazonIdentityandAccessManagement中,我创建了一个用户。用户创建成功。在AmazonS3中,我创建了一个新存储桶。设置新存储桶的权限:权限:本教程指示“授予上一步创建的用户读写权限”。但是,在存储桶的“权限”下,未提及新用户名。我只能在每个人、经过身份验证的用户、日志传送、我和亚马逊似乎根据我的名字+数字创建的用户名之间进行选择。我已经通过选择经过身份验证的用户并选中了上传/删除和查看权限的框(而不
我正在使用mechanize登录网站,然后检索页面。我遇到了一些问题,我怀疑这是由于cookie中的某些值造成的。当Mechanize登录网站时,我假设它存储了cookie。如何通过Mechanize打印出存储在cookie中的所有数据? 最佳答案 代理有一个cookie方法。agent=Mechanize.newpage=agent.get("http://www.google.com/")agent.cookiesagent.cookies.to_scookie返回一个Mechanize::Cookiesobject
我以为它们存储在cookie中-但不,检查cookie没有任何结果。session也不存储它们。那么,我在哪里可以找到它们?我需要这个来直接设置它们(而不是通过flashhash)。 最佳答案 它们存储在inyoursessionstore.自rails2.0以来的默认设置是cookie存储,但请检查config/initializers/session_store.rb以检查您是否使用默认设置以外的东西。 关于ruby-on-rails-闪存消息存储在哪里?,我们在StackOverf