KVM学习笔记(存储池)

 1、存储池的基本概念

Libvirt以存储池的形式对存储进行统一管理,支持以下存储池:
dir:Filesystem Directory
disk:Physical Disk Device
fs:Pre-Formatted Block Device
iscsi:iSCSI Target
netfs:Network Export Directory
等等
存储池的配置文件目录在/etc/libvirt/storage/目录下,每个存储池的配置文件是一个xml文件,autostart文件夹内是软连接,配置autostart的存储池需要在其中建立软连接。

2、virsh中存储池的相关命令

    find-storage-pool-sources-as   find potential storage pool sources
    find-storage-pool-sources      discover potential storage pool sources
    pool-autostart                 autostart a pool
    pool-build                     build a pool
    pool-create-as                 create a pool from a set of args
    pool-create                    create a pool from an XML file
    pool-define-as                 define a pool from a set of args
    pool-define                    define an inactive persistent storage pool or modify an existing persistent one from an XML file
    pool-delete                    delete a pool
    pool-destroy                   destroy (stop) a pool
    pool-dumpxml                   pool information in XML
    pool-edit                      edit XML configuration for a storage pool
    pool-info                      storage pool information
    pool-list                      list pools
    pool-name                      convert a pool UUID to pool name
    pool-refresh                   refresh a pool
    pool-start                     start a (previously defined) inactive pool
    pool-undefine                  undefine an inactive pool
    pool-uuid                      convert a pool name to pool UUID
    pool-event                     Storage Pool Events
列出池
virsh pool-list 
显示池的信息
virsh pool-info 

3、创建目录类型的存储池

准备目录
命令pool-define-as <name> <type>[--target <string>] 
参数解释
name 存储池名字
type 存储池类型
--target 目标文件夹
如果--target指定的目标文件夹不是已经存在的文件夹,则在启动存储池时会报错。
这时可以通过virsh pool-bulid命令来创建存储池的目标文件夹
之后存储池就可以正常启动了
通过virsh pool-autostart 来让存储池自动启动
virsh pool-destroy 来停止运行中的存储池
virsh pool-delete 来删除存储池,删除的同时目标文件夹也会删除
virsh pool-undefine 来删除存储池配置文件,因为delete后xml配置文件没有被删除

4、创建分区类型的存储池

fs:Pre-Formatted Block Device
此类存储池需要创建磁盘分区,并在分区上创建文件系统,使用整个分区作为存储池。
配置好后,libvirtd守护进程启动时,会自动mount分区。
准备分区,ext4文件系统,/dev/sdc1
命令pool-define-as <name> <type>[--source-dev <string>][--target <string>] 
参数解释
name 存储池名字
type 存储池类型
--target 目标文件夹
--source-dev 源分区文件
如果指定的target目录不存在,则存储池无法start,需要先build,自动生成目录,才能start
先build
之后就可以正常的start存储池了

5、创建磁盘类型的存储池

磁盘类型的存储池相当于直接把裸设备给guest OS用,而不提前进行文件系统的格式化。
尝试使用xml文件来创建

6、创建基于LVM的存储池

基于LVM的存储池要求使用全部的磁盘分区
创建存储池时,有两种方法:
  • 使用现有VG
  • 创建新的VG
virsh pool-define-as guest_image_lvm logical \
[--source-dev <string>][--source-name <string>] \
[--target <string>]
参数解释
name 存储池名字
type 存储池类型
--target 目标文件夹
--source-dev 源块设备文件
--source-name vg的名字
如果没有事先创建VG,则在创建完pool后,需要build一下,会自动创建VG

7、创建iSCSI存储池

iSCSI中分为Target和Initiator两个部分,Target在存储侧,Initiator在服务器侧。
Initiator:
iSCSI会话的发起方,向Target请求LUN,并将数据的读写指令发送给Target。
Target:
接受SCSI会话的一方,接收来自Initiator的指令,为Initiator提供LUN,并实现LUN的读写。
Linux IO的Target架构
整体的逻辑结构为:
底层存储设备->后端存储->LUN<-LUN ACL->TPG(target port group)

7.1 安装linux存储服务器

需要安装targetcli软件包
yum -y install targetcli
targetcli是一个交互式的软件,通过输入ls,可以看到目录树的结构。
分为两层结构backstores和iscsi两个部分:
backstores为后端存储设备,可以是block、fileio、pscsi、ramdisk
iscsi是前端部分,每个target下面可以有多个tgp,tgp中包含acls、luns、portals

配置Target
创建存储对象
块存储
cd backstores/block/
create name dev [readonly] [wwn] 
fileio对象(文件做存储)
cd /backstores/fileio/
create name file_or_dev [size] [write_back] [sparse] [wwn] 
ramdisk对象(内存做存储)
cd /backstores/ramdisk/
create name size [nullio] [wwn] 
创建iSCSI Target
cd /iscsi/
create [wwn] 
配置TPG
在LUN中关联后端存储
create storage_object [lun] [add_mapped_luns] 
Portal,在创建Target时会自动创建
配置ACL
查看initiator的iqn号码,在/etc/iscsi/initiatorname.iscsi文件内查看。
在Target侧配置ACL
create wwn [add_mapped_luns] 
保存配置
saveconfig

7.2 Initiator连接Target

检查是否可以发现
iscsiadm -m discovery --type sendtargets -- portal ip
测试挂载设备
iscsiadm -m node --login
断开连接
iscsiadm -m node --logout

7.3 创建基于iSCSI的存储池

virsh pool-define-as <name>  <type> \
[--source-host <string>] \
[--source-dev <string>] \
[--target <string>]
参数解释
name 存储池名字
type 存储池类型,此时应该是iscsi
--target 目标文件夹
--source-dev  target的iqn
--source-host target的portal IP

8、创建NFS存储池

NFS服务器配置
提供NFS服务需要安装nfs-utils软件
yum -y install nfs-utils
在/etc/exports文件中编辑要共享的文件夹
配置共分为三部分,第一部分就是本地要共享出去的目录,第二部分为允许访问的主机(可以是一个IP也可以是一个IP段)第三部分就是小括号里面的,为一些权限选项。
/nfsshare *(rw)
exports文件中可以设定的参数主要有以下这些:
(1) ro 该主机对该共享目录有只读权限
(2) rw 该主机对该共享目录有读写权限
(3) root_squash 客户机用root用户访问该共享文件夹时,将root用户映射成匿名用户
(4) no_root_squash 客户机用root访问该共享文件夹时,不映射root用户
(5) all_squash 客户机上的任何用户访问该共享目录时都映射成匿名用户
(6) anonuid 将客户机上的用户映射成指定的本地用户ID的用户
(7) anongid 将客户机上的用户映射成属于指定的本地用户组ID
(8) sync 资料同步写入到内存与硬盘中
(9) async 资料会先暂存于内存中,而非直接写入硬盘
(10) insecure 允许从这台机器过来的非授权访问
(11) subtree_check 如果共享/usr/bin之类的子目录时,强制NFS检查父目录的权限(默认)
(12) no_subtree_check 和上面相对,不检查父目录权限
(13) wdelay 如果多个用户要写入NFS目录,则归组写入(默认)
(14 )no_wdelay 如果多个用户要写入NFS目录,则立即写入,当使用async时,无需此设置。
(15) hide 在NFS共享目录中不共享其子目录
(16) no_hide 共享NFS目录的子目录
(17) secure NFS通过1024以下的安全TCP/IP端口发送
(18) insecure NFS通过1024以上的端口发送
配置完成后,因为nfs依托于rpcbind,先启动rpcbind服务,再启动nfs服务
systemctl start rpcbind
systemctl start nfs
之后使用showmount -e IP命令可以查看NFS的共享情况

创建NFS存储池
virsh pool-define-as <name>  <type> \
[--source-host <string>] \
[--source-path <string>] \
[--target <string>]
参数解释
name 存储池名字
type 存储池类型,此时应该是netfs
--target 本机用于挂载共享目录的文件夹
--source-dev  nfs服务器的共享目录路径
--source-host nfs服务器的ip

评论