在 XenServer 6.1 上使用 SSHFS

在 XenServer 6.1 上使用 SSHFS

在 Xen Server 6.1 上,为了备份我的虚拟机,我使用基于以下工具的脚本:

  • xe vm-list建立要备份的虚拟机列表
  • xe vm-snapshot拍摄虚拟机快照
  • xe template-param-set is-a-template=false ha-always-run=false将快照转换为虚拟机
  • xe vm-export vm=uuid_of_this_new_vm filename=|ssh ..... "cat > /path/backup.xva"
    --> 将导出内容发送到我的备份服务器,而不是将其存储在本地
  • xe vm-uninstall

我想使用 sshfs 将远程备份服务器挂载到我的 Xen 主机上。但是 Xen 发行版或默认存储库(XenServer 6.1.0 更新)中没有 sshfs。

我有几种在 Xen 主机上安装 sshfs 的方法:

  • 我添加了一个包含 sshfs 的 repo。我认为这以后可能会给我带来麻烦。Xen 不支持它,我更愿意让主机配置基本保持不变
  • 我可以获取 tarball 并将其安装在单独的目录中
  • 或者我拿一个 RPM 并将其拆开安装

或者我找到一种方法来将远程 ssh 命令导入,xe vm-import就像我导出时做的那样。我测试了很多方法,但都不起作用

您认为最好的解决方案是什么?

答案1

虽然这是一个老问题,但我刚刚自己解决了这个问题。

首先..什么不起作用(全部在XenServer 6.5上测试):

xe-import filename=/dev/stdin 根本不起作用。 无论您执行以下操作都没有关系:

# simple local import on xenhost
xe vm-import filename=/dev/stdin < myexport.xva

# try it the other way, with cat, still won't work:    
cat myexport.xva | xe vm-import filename=/dev/stdin

# and no, dd instead of cat in the above does not make it better

# nor can you pull the file from elsewhere via ssh:
ssh user@backupserver "cat myexport.xva" |  xe vm-import filename=/dev/stdin

# nor the other way, pushing from elsewhere to your xenserver
ssh root@xenhost "xe vm-import filename=/dev/stdin" < myexport.xva

# named pipes don't work either, even locally:
mkfifo mypipe
cat myexport.xva > ./mypipe &
xe vm-import filename=./mypipe

因此,我发现没有办法从流中导入,它必须是某种真正的文件系统。显然这曾经有效,但现在不行了。 我的猜测是 xenserver 想要寻求。

(如果有人能发现我的尝试中的缺陷并证明我错了,我将不胜感激)。

所以,是的,我的结论是您必须使用远程文件系统,我们知道 NFS 适用于此,因为我们已经使用过它了……但为了简单起见,决定使用 sshfs。以下是我在 XenServer 6.5 上安装 sshfs 的方法:

# fuse-fs and fuse-libs are in existing repos, so..
yum --enablerepo=base --disablerepo=citrix install fuse-fs
# for some reason yum wanted to install i386 fuse-libs which fails
# because of a dependency on i386 glibc.. nevermind all that, tell it
# directly that we want x86_64 and it will work:
yum --enablerepo=base --disablerepo=citrix install fuse-libs.x86_64

# fuse-sshfs is in the epel repo, which we need to add
yum --disablerepo=citrix --enablerepo=extras install epel-release
# now install fuse-sshfs
yum --disablerepo=citrix --enablerepo=extras install fuse-sshfs

# The above leaves epel-release enabled, which should be no problem but
# nevertheless I disabled it since I don't need it anymore:
#   Use vim to edit /etc/yum.repos.d/epel.repo
#   Where it says `enabled=1` change to `enabled=0`
vim /etc/yum.repos.d/epel.repo

现在可以从另一台机器上的导出内容恢复:

# make mount point
mkdir backups

# mount location of your backups onto mount point
sshfs [email protected]:/path/to/backups backups

# import as usual
xe vm-import filename=backups/myexport.xva

# unmount the remote filesystem, if you don't need it anymore
umount backups

# IT WORKS

哦,我应该补充一下……我尝试在我们的备份服务器上安装 xenxerver 工具……它也不起作用。当然,您可以执行命令,一切看起来都很好。但filename=/dev/stdin仍然不起作用,也不起作用filename=/path/to/myexport.xva。它只是挂起或开始导入,然后以奇怪的方式失败。

这就是导入。。但是导出怎么办?使用远程安装的 xenserver 工具:

xe vm-export uuid=the-vm-uuid 文件名= -s xenhost.my.domain -u root -pwf 密码文件

这确实会导出到 stdout。但不清楚这些导出是否总是会成功导入。我经历了几次失败和一些成功。因此决定根本不使用远程工具..而是通过 ssh 进行:

ssh [email protected] "vm-export uuid=the-vm-uuid filename=" > myexport.xva

有用!

这样做的结果是,使用我们的备份系统 (Bareos),可以通过 ssh 直接备份到备份软件中,而无需先导出到临时文件。但要进行恢复,必须先将 xva 恢复到临时存储,然后使用 sshfs 挂载到 xenhost 上,然后使用 vm-import。我很遗憾我们无法双向传输数据。希望这个问题能在 xe 中得到修复。

希望这对某些人有所帮助..经过大量的反复试验来测试所有可能性:)

答案2

如果您想要将 xva 备份导入 XenServer,只需将 xe 客户端实用程序安装到备份服务器上即可。它们包含在 xentools iso(linux 文件夹)中。然后,您可以使用“xe -s serverip -u root -pw password vm-import...”导入备份(甚至导出备份)。

顺便说一句:连接是通过 SSL 保护的。

答案3

这对我有用:

任务:将虚拟机从旧 XS 移至新 XS 从:XS 6.2 70446c 至:XS 7.0 125380c

在 XS 6.2 主机上,我在控制台中使用此命令:

xe vm-export uuid=<VM_UUID> filename= | ssh root@<XS7_IP_ADDRESS> 'xe vm-import filename=/dev/stdin sr-uuid=<XS7_LOCAL_STORAGE_UUID>'

一切进展顺利!

相关内容