kvm客户机存储方式
前面介绍了存储的配置和qemu-img工具来管理镜像,在QEMU/KVM中,客户机镜像文件可以由很多种方式来构建,其中几种如下:
1) 本地存储的客户机镜像文件。
2) 物理磁盘或磁盘分区。
3) LVM(Logical Volume Management ), 逻辑分区。
4 ) NFS(Network File System), 网络文件系统。
5) iSCSI(Internet Small Computer System Interface ), 基于Internet的小型计算机系统接口。
6) 本地或光纤通道连接的LUN(Logical Unit Number)。
7) GFS2(Global File System 2)。
本地存储的客户机镜像文件是最常用的一种方式:
它有预分配空间的raw文件、稀疏文件类型的raw文件、qcow2等多种格式。
预分配空间的raw文件不随镜像的使用而增长,而是在创建之初即完全占用磁盘空间,其消耗较多磁盘空间,不过运行效率较高。
稀疏文件(包括raw和qcow2格式)在一开始时并不占用多的磁盘空间,而是随实际写入数据才占用物理磁盘,比较灵活且节省磁盘空间,不过其在第一次写入数据时需要额外在宿主机中分配空间,因此其效率较低一些。
而qcow2具有加密的安全性,所以在对磁盘IO性能要求不是很高时建议选择qcow2类型的镜像文件。
不仅一个文件可以分配给客户机作为镜像文件系统,且一个完整的磁盘或LVM分区也可以作为镜像分配给客户机使用。不过,磁盘分区、LVM分区由于没有磁盘的MBR引导记录,不能作为客户机的启动镜像,只能作为客户机附属的非启动块设备。
一般来说,磁盘或LVM分区会有较好的性能,读写的延迟较低、吞吐量较高。
不过为了防止客户机破坏物理磁盘分区,一般不将整个磁盘作为镜像由客户机使用。使用磁盘或LVM分区的劣势在于管理和移动性方面都不如镜像文件方便,而且不方便通过网络远程使用。
NFS作为使用非常广泛的分布式文件系统,可以使客户端挂载远程NFS服务器中的共享目录,然后像使用本地文件系统一样使用NFS远程文件系统。
如果NFS服务器端向客户端开放了读写的权限,那么可以直接挂载NFS,然后使用其中的镜像文件作为客户启动磁盘。
如果NFS服务器端没有向客户端开放写权限,也可以在NFS客户端系统将远程NFS系统上的镜像文件作为后端镜像(backing file),以建立qcow2格式Copy-On-Write的本地镜像文件供客户机使用。这样做还有一个好处是保持NFS服务器上的镜像一致性、完整性,从而可以供给多个客户端同时使用。而且由于NFS的共享特性,因此NFS方式为客户机的动态迁移提供了非常方便的共享存储系统。
下面的命令行演示了NFS作为后端镜像的应用,在本地用qcow2格式镜像文件启动一个客户机。
在宿主机中,挂载NFS文件系统、建立qcow2镜像,然后启动客户机,如下所示:

在客户机中,查看磁盘文件系统,指令如下:
fdisk -1
iSCSl是一套基于IP协议的网络存储标准,真正的物理存储放在初始端(initiator),而使用iSCSI磁盘的是目标端(target),它们之间实现了SCSI标准的命令,让目标端使用起来就和使用本地的SCSI硬盘一样,只是数据是在网络上进行读写操作的。
光纤通道(Fibre Channel)也可以实现与iSCSI类似的存储区域网络(storage area network,SAN),不过它需要光纤作为特殊的网络媒介。
GFS2是由Redhat公司主导开发的主要给Linux计算机集群使用的共享磁盘文件系统,一般在Redhat的RHEL系列系统中有较多使用,它也可被用做QEMU/KVM的磁盘存储系统。
如果需要获得更高性能的磁盘IO,可以使用半虚拟化的virtio作为磁盘驱动程序
kvm客户机存储方式的更多相关文章
- kvm 客户机系统的代码是如何运行的
一个普通的 Linux 内核有两种执行模式:内核模式(Kenerl)和用户模式 (User).为了支持带有虚拟化功能的 CPU,KVM 向 Linux 内核增加了第三种模式即客户机模式(Guest), ...
- KVM客户机使用主机USB设备
有些时候KVM客户机还是要使用USB设备,比如USB密钥等 KVM命令行参数 -usb 打开usb驱动程序,启动客户机usb支持 -usbdevice devname 为客户机增加usb设备,devn ...
- kvm 客户机加载移动硬盘
1,宿主机安装usbutils yum install usbutils -y 2,插入U盘或者移动硬盘并查看 [root@localhost ~]# lsusb Bus Device : ID 10 ...
- 解决KVM中宿主机通过console无法连接客户机
转自https://www.linuxidc.com/Linux/2014-10/107891.htm 一.问题描述: KVM中宿主机通过console无法连接客户机,卡在这里不动了. # virsh ...
- 基于RDP瘦客户机协议的简要说明
**************************************************************************************************** ...
- kvm虚拟机配置被克隆rhel6客户机的网卡
例子:配置被克隆rhel6客户机的网卡 rhel6的网卡是通过udev规则来进行命名每个网卡都有不一样的macudev规则是根据网卡的mac来进行识别克隆出来的客户机,为了遵守每个网卡的mac都是全球 ...
- KVM 介绍(8):使用 libvirt 迁移 QEMU/KVM 虚机和 Nova 虚机 [Nova Libvirt QEMU/KVM Live Migration]
学习 KVM 的系列文章: (1)介绍和安装 (2)CPU 和 内存虚拟化 (3)I/O QEMU 全虚拟化和准虚拟化(Para-virtulizaiton) (4)I/O PCI/PCIe设备直接分 ...
- Docker存储方式选型建议
转自:https://segmentfault.com/a/1190000007168476 第一部分 问题诊断 事情从一次实施项目说起,我们需要帮助客户将他们的应用容器化并在数人云平台上发布此应用. ...
- KVM(八)使用 libvirt 迁移 QEMU/KVM 虚机和 Nova 虚机
1. QEMU/KVM 迁移的概念 迁移(migration)包括系统整体的迁移和某个工作负载的迁移.系统整理迁移,是将系统上所有软件包括操作系统完全复制到另一个物理机硬件机器上.虚拟化环境中的迁移, ...
随机推荐
- python __builtins__ slice类 (62)
62.'slice', 对序列化类型数据切片,返回一个新的对象. class slice(object) | slice(stop) | slice(start, stop[, step]) | | ...
- python 之 random 模块、 shutil 模块、shelve模块、 xml模块
6.12 random 模块 print(random.random()) (0,1)----float 大于0且小于1之间的小数 print(random.randint(1,3)) [1,3] 大 ...
- MapperException: 无法获取实体类xxxxx对应的表名! 三种解决方法,总有一款适合你。
先把自动重启关一下 devtools: restart: #热部署生效 enabled: false 把devtools给删除了,说是这个jar包导致 ApplyApplication里面的@Mapp ...
- c++计算程序时间
#include<iostream.h> #include<time.h> void main() { clock_t start,finish; double totalti ...
- IDEA远程调试hadoop程序
远程调试Hadoop各组件 Hadoop学习之配置Eclipse远程调试Hadoop IDEA远程调试hadoop Hadoop 研发之远程调试详细剖析--WordCount V2.0 eclipse ...
- codeforces 629C Famil Door and Brackets (dp + 枚举)
题目链接: codeforces 629C Famil Door and Brackets 题目描述: 给出完整的括号序列长度n,现在给出一个序列s长度为m.枚举串p,q,使得p+s+q是合法的括号串 ...
- PowerShell~执行策略的介绍
首先看一下无法加载ps1脚本的解决方法 事实上也是由于策略导致的 解决方法主是开启对应的策略 set-ExecutionPolicy RemoteSigned 执行策略更改 执行策略可以防止您执行不 ...
- 【学习笔记】深入理解js原型和闭包(4)——隐式原型
注意:本文不是javascript基础教程,如果你没有接触过原型的基本知识,应该先去了解一下,推荐看<javascript高级程序设计(第三版)>第6章:面向对象的程序设计. 上节已经提到 ...
- 在docker容器中运行hello world!
在docker容器中运行hello world! docker容器可以理解为在沙盒中运行的进程.这个沙盒包含了该进程运行所必须的资源,包括文件系统.系统类库.shell 环境等等.但这个沙盒默认是不会 ...
- 工作中Git使用笔记
git相关说明. //git 安装$ git config --global user.name "xxx"代码提交时的用户名,与GITLAB注册用户名建议保持一致$ git co ...