You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Python在Azure RHEL虚拟机挂载数据盘后自动完成PV/VG/LV创建、格式化与挂载

自动化RHEL虚拟机PV/VG/LV创建与挂载的Python实现

核心思路

通过Python的SSH客户端库(paramiko)远程连接Azure RHEL虚拟机,批量执行LVM配置与挂载的Shell命令,实现全流程自动化。

代码示例

import paramiko

# 虚拟机SSH连接参数
VM_SSH_HOST = "你的虚拟机公网IP或DNS"
VM_SSH_PORT = 22
VM_SSH_USER = "你的SSH用户名"
VM_SSH_PASSWORD = "你的SSH密码"  # 生产环境建议用密钥认证替代

# LVM与挂载配置参数
DATA_DISK = "/dev/sdc"  # Azure数据盘设备名,需根据实际情况调整
VG_NAME = "data_vg"
LV_NAME = "data_lv"
LV_SIZE = "20G"  # LV容量,可按需修改
MOUNT_POINT = "/mnt/data_disk"
FILE_SYSTEM = "xfs"

def execute_ssh_command(client, command):
    """执行SSH命令并返回输出"""
    stdin, stdout, stderr = client.exec_command(f"sudo {command}")
    stdout.channel.recv_exit_status()  # 等待命令执行完成
    output = stdout.read().decode()
    error = stderr.read().decode()
    if error:
        print(f"命令执行错误: {error}")
    return output

def main():
    # 初始化SSH客户端
    ssh_client = paramiko.SSHClient()
    ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    
    try:
        # 连接虚拟机
        ssh_client.connect(VM_SSH_HOST, VM_SSH_PORT, VM_SSH_USER, VM_SSH_PASSWORD)
        print("成功连接到虚拟机")

        # 1. 创建物理卷(PV)
        print("创建物理卷...")
        execute_ssh_command(ssh_client, f"pvcreate {DATA_DISK}")

        # 2. 创建卷组(VG)
        print("创建卷组...")
        execute_ssh_command(ssh_client, f"vgcreate {VG_NAME} {DATA_DISK}")

        # 3. 创建逻辑卷(LV)
        print("创建逻辑卷...")
        execute_ssh_command(ssh_client, f"lvcreate -L {LV_SIZE} -n {LV_NAME} {VG_NAME}")

        # 4. 格式化文件系统
        print("格式化文件系统...")
        execute_ssh_command(ssh_client, f"mkfs.{FILE_SYSTEM} /dev/{VG_NAME}/{LV_NAME}")

        # 5. 创建挂载点
        print("创建挂载点...")
        execute_ssh_command(ssh_client, f"mkdir -p {MOUNT_POINT}")

        # 6. 挂载逻辑卷
        print("挂载逻辑卷...")
        execute_ssh_command(ssh_client, f"mount /dev/{VG_NAME}/{LV_NAME} {MOUNT_POINT}")

        # 7. 写入fstab实现开机自动挂载
        print("配置开机自动挂载...")
        fstab_entry = f"/dev/{VG_NAME}/{LV_NAME} {MOUNT_POINT} {FILE_SYSTEM} defaults 0 0"
        execute_ssh_command(ssh_client, f'echo "{fstab_entry}" >> /etc/fstab')

        # 验证挂载状态
        print("验证挂载状态:")
        output = execute_ssh_command(ssh_client, "df -h")
        print(output)

    except Exception as e:
        print(f"执行异常: {str(e)}")
    finally:
        # 关闭SSH连接
        ssh_client.close()
        print("已断开SSH连接")

if __name__ == "__main__":
    main()

关键注意事项

  • 设备名确认: Azure RHEL虚拟机的数据盘设备名通常是/dev/sdc、/dev/sdd等,可远程执行lsblk命令确认实际路径。
  • 权限配置: 确保SSH用户拥有sudo免密权限,避免执行命令时需要手动输入密码。
  • 密钥认证: 生产环境优先使用SSH密钥认证,修改connect方法时传入key_filename参数指定私钥路径即可。
  • 文件系统选择: RHEL默认推荐XFS,若需使用ext4,修改FILE_SYSTEM参数为ext4即可。
  • 结果校验: 可在代码中增加命令执行结果的校验逻辑,比如检查PV/VG/LV是否成功创建,避免后续步骤失败。

内容的提问来源于stack exchange,提问作者madhuri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 16:50:11