如何通过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
相关产品推荐
相关产品推荐

