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
[--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


评论
发表评论