linux 如何使用虚拟机共享磁盘

Linux系统中,使用虚拟机共享磁盘是常见的操作,主要用于多虚拟机间数据共享、数据迁移或构建集群环境,本文将详细介绍两种主流的共享磁盘实现方式:本地文件系统共享和网络iSCSI共享,涵盖环境准备、配置步骤、注意事项等内容,帮助读者快速上手实践。

linux 如何使用虚拟机共享磁盘

环境准备

在开始配置前,需确保宿主机和虚拟机满足基本要求:

  • 宿主机:推荐使用Ubuntu 22.04 LTS或CentOS 7及以上版本,开启CPU虚拟化支持(通过egrep -c '(vmx|svm)' /proc/cpuinfo检查,返回值大于0表示支持)。
  • 虚拟化软件:本文以KVM(Kernel-based Virtual Machine)为例,需安装qemu-kvmlibvirtvirt-manager等工具(Ubuntu通过sudo apt install qemu-kvm libvirt-daemon-system virt-manager安装,CentOS通过sudo yum install qemu-kvm libvirt virt-manager安装)。
  • 虚拟机:至少两台Linux虚拟机(如CentOS 7),已通过virsh list确认运行状态,且与宿主机网络互通(若使用iSCSI共享)。

方式一:本地文件系统共享磁盘

本地共享磁盘是指将宿主机的一个物理目录或文件作为虚拟机的磁盘,通过virt-managervirsh命令配置,适合单宿主机多虚拟机场景,配置简单且访问速度快。

创建共享磁盘文件

在宿主机上创建一个raw格式的磁盘文件(raw格式性能优于qcow2,适合共享场景),大小假设为10G:

sudo qemu-img create -f raw /var/lib/libvirt/images/shared_disk.img 10G

设置磁盘文件权限,确保虚拟机进程(qemu用户)可读写:

sudo chown -R qemu:qemu /var/lib/libvirt/images/shared_disk.img
sudo chmod 666 /var/lib/libvirt/images/shared_disk.img

配置虚拟机添加共享磁盘

virt-manager图形化工具为例(也可通过virsh edit修改XML配置):

  • 打开virt-manager,选择目标虚拟机(如vm1),点击“详情”→“添加硬件”→“存储”。
  • “选择或创建卷”中选择“选择现有卷”,浏览并选择刚创建的shared_disk.img
  • 在“高级选项”中勾选“共享磁盘”(Shareable),确保多虚拟机可同时访问(注意:普通文件系统同时写会损坏数据,需结合集群文件系统或只读模式使用)。
  • 完成添加后,启动虚拟机,在系统中可通过lsblk查看新磁盘(通常为/dev/vdb)。

虚拟机内磁盘分区与挂载

进入虚拟机(如vm1),对共享磁盘进行分区和格式化(以/dev/vdb为例):

sudo fdisk /dev/vdb  # 输入'n'新建分区,'p'选择主分区,回车使用默认起始和结束扇区,输入'w'保存
sudo mkfs.xfs /dev/vdb1  # 格式化为XFS文件系统(也可选择ext4)
sudo mkdir /mnt/shared
sudo mount /dev/vdb1 /mnt/shared  # 挂载到/mnt/shared

为避免重启后挂载失效,需配置/etc/fstab

linux 如何使用虚拟机共享磁盘

echo '/dev/vdb1 /mnt/shared xfs defaults 0 0' | sudo tee -a /etc/fstab

多虚拟机访问验证

在另一台虚拟机(vm2)中重复步骤2-3添加并挂载同一共享磁盘,然后在vm1/mnt/shared目录创建测试文件:

echo "test data from vm1" | sudo tee /mnt/shared/test.txt

vm2中检查文件是否存在:

cat /mnt/shared/test.txt  # 应输出"test data from vm1"

方式二:网络iSCSI共享磁盘

iSCSI(Internet Small Computer System Interface)是一种基于TCP/IP的存储网络协议,适合跨宿主机或多机房的虚拟机共享磁盘场景,支持远距离访问和数据冗余。

宿主机配置iSCSI Target

以Ubuntu为例,安装targetcli工具(iSCSI目标端管理工具):

sudo apt install targetcli

启动targetcli并配置target:

sudo targetcli

进入命令行后,执行以下命令(假设创建名为iqn.2023-06.com.example:shared.disk的target,后端存储为/var/lib/libvirt/images/iscsi_disk.img):

/backstores/fileio create iscsi_store /var/lib/libvirt/images/iscsi_disk.img 10G  # 创建后端存储
/iscsi create iqn.2023-06.com.example:shared.disk  # 创建target
/iscsi/iqn.2023-06.com.example:shared.disk/tpg1/luns create /backstores/fileio/iscsi_store  # 将存储关联到target
/iscsi/iqn.2023-06.com.example:shared.disk/tpg1/acls create iqn.2023-06.com.example:vm1  # 为虚拟机vm1创建ACL( Initiator名称需与虚拟机配置一致)
/iscsi/iqn.2023-06.com.example:shared.disk/tpg1/portals create 0.0.0.0:3260  # 监听所有IP的3260端口
saveconfig  # 保存配置
exit

虚拟机配置iSCSI Initiator

在虚拟机(如vm1)中安装iSCSI客户端工具:

linux 如何使用虚拟机共享磁盘

sudo apt install open-iscsi  # Ubuntu
# sudo yum install iscsi-initiator-utils  # CentOS

配置Initiator名称(需与Target端ACL一致):

sudo iscsiadm -m node -o new -T iqn.2023-06.com.example:shared.disk -p 192.168.1.100:3260  # 192.168.1.100为宿主机IP
sudo iscsiadm -m node -o update -T iqn.2023-06.com.example:shared.disk -p 192.168.1.100:3260 -n node.session.auth.authmethod -v CHAP  # 若启用CHAP认证
sudo iscsiadm -m node -T iqn.2023-06.com.example:shared.disk -p 192.168.1.100:3260 -l  # 登录target

查看是否发现磁盘:

lsblk  # 应显示/dev/sdb(iSCSI磁盘)

磁盘分区与挂载

与本地共享磁盘类似,对/dev/sdb进行分区、格式化并挂载:

sudo fdisk /dev/sdb
sudo mkfs.xfs /dev/sdb1
sudo mkdir /mnt/iscsi_shared
sudo mount /dev/sdb1 /mnt/iscsi_shared

配置/etc/fstab实现自动挂载:

echo '/dev/sdb1 /mnt/iscsi_shared xfs _netdev 0 0' | sudo tee -a /etc/fstab  # 添加_netdev表示网络设备

两种共享方式对比

对比项 本地文件系统共享 网络iSCSI共享
适用场景 单宿主机多虚拟机,低延迟需求 跨宿主机、远距离访问,集群环境
配置复杂度 简单(图形化+少量命令) 较复杂(需配置Target/Initiator和网络)
访问速度 快(本地磁盘I/O) 较慢(依赖网络带宽和延迟)
数据安全性 需自行处理文件系统锁(如集群文件系统) 支持CHAP认证、Target端权限控制
扩展性 受限于宿主机本地存储 支持网络存储扩展(如SAN、分布式存储)

注意事项

  1. 文件系统选择:共享磁盘需使用支持集群的文件系统(如GFS2、OCFS2)或确保同一时间仅一台虚拟机读写,否则普通文件系统(如ext4)会损坏数据。
  2. 权限管理:本地共享需确保宿主机和虚拟机的磁盘文件权限一致(如qemu:qemu);iSCSI需正确配置ACL和CHAP认证,避免未授权访问。
  3. 性能优化:本地共享可调整I/O调度器(如echo noop | sudo tee /sys/block/vdb/queue/scheduler);iSCSI可启用多路径(multipath)提升可靠性。
  4. 数据备份:共享磁盘数据易受多虚拟机并发操作影响,需定期备份或使用快照功能。

相关问答FAQs

Q1: 共享磁盘是否支持多台虚拟机同时读写?
A: 默认情况下,普通文件系统(如ext4、XFS)不支持多虚拟机同时读写,会导致文件系统损坏,若需同时读写,需使用集群文件系统(如GFS2、OCFS2)或分布式存储(如Ceph),并在虚拟机中安装对应的集群管理工具(如cmanocfs2-tools),仅读场景下,多虚拟机同时读取是安全的。

Q2: 如何解决共享磁盘挂载时“权限拒绝”的问题?
A: 权限拒绝通常由以下原因导致:

  • 本地共享:宿主机磁盘文件权限未正确设置,需执行sudo chown qemu:qemu /path/to/disk.img并确保虚拟机用户与宿主机qemu用户组一致(如虚拟机中创建qemu用户并加入disk组)。
  • iSCSI共享:Target端ACL未配置或Initiator名称错误,需检查iscsiadm -m node显示的target名称是否与Target端ACL一致,或通过sudo iscsiadm -m session -P 3查看连接详情排查认证问题。
    若挂载时使用uid/gid参数(如mount -o uid=1000,gid=1000 /dev/sdb1 /mnt/shared),需确保虚拟机内对应用户存在。

原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/31398.html

(0)
酷番叔酷番叔
上一篇 2025年9月27日 20:43
下一篇 2025年9月27日 21:01

相关推荐

  • Linux系统如何生成SSH密钥对?详细步骤方法与操作指南解析

    在Linux系统中,密钥是保障信息安全的核心工具,广泛应用于SSH远程登录、数据加密传输、数字签名等场景,相较于传统密码认证,密钥认证基于非对称加密算法,具有安全性高(私钥本地存储,公钥传输验证)、防暴力破解能力强(无需传输密码)及支持自动化操作(如免密登录)等优势,本文将详细介绍Linux系统中常见密钥的生成……

    2025年9月30日
    1900
  • Linux服务器如何分配IP地址?

    Linux服务器作为网络中的核心节点,IP地址的正确分配是其实现网络通信、提供服务的基础,IP地址分配方式主要分为静态分配和动态分配(DHCP)两种,不同场景下需选择合适的方式,并通过配置文件或命令行工具进行设置,静态IP地址分配静态IP指手动为服务器指定固定IP地址,适用于需要长期稳定访问的场景(如Web服务……

    2025年9月19日
    2300
  • 如何安装Telnet服务?

    在Linux系统中打开23端口(通常用于Telnet服务)需要安装、配置Telnet服务并调整防火墙设置,以下是详细步骤,但请注意:Telnet协议以明文传输数据(包括密码),存在严重安全风险,仅建议在测试环境使用,生产环境强烈推荐使用SSH(22端口)替代,更新系统包缓存sudo apt update # D……

    2025年7月10日
    4400
  • Linux如何实现开机自启动?

    在Linux系统中,实现开机自启动是常见需求,无论是服务、脚本还是应用程序,都需要在系统启动时自动运行,无需手动干预,本文将详细介绍几种主流的开机自启动方法,涵盖不同Linux发行版和场景需求,Systemd服务管理(现代Linux发行版主流方法)Systemd是目前大多数Linux发行版(如Ubuntu 16……

    2025年9月16日
    3300
  • Linux系统如何查询当前系统版本信息?

    在Linux系统中,查询系统版本信息是日常运维和开发中常见的操作,无论是软件安装、依赖兼容性检查,还是问题排查,准确获取版本信息都至关重要,Linux发行版众多,不同系统查询版本的方法略有差异,本文将详细介绍通用及各主流发行版的查询方式,并辅以示例说明,通用查询方法(适用于大多数发行版)使用lsb_releas……

    2025年8月31日
    3200

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信