使用变量创建7G qcow2镜像失败,提示No such file or directory
嘿,我来帮你揪出这个问题的根源!你遇到的错误完全是因为命令里的标点符号用错了类型,导致shell解析路径时出现了混乱。
错误原因分析
看一下错误输出里的路径:
Formatting '“”/home/test/abc”/foo.qcow2”', fmt=raw size=7516192768 qemu-img: “”/home/test/abc”/foo.qcow2”: Could not create file: No such file or directory
你会发现路径里混了一堆中文全角引号“”——shell只认英文半角引号("或者'),中文引号会被当成普通的文件名字符处理。所以shell尝试创建的是一个包含这些引号的奇怪路径,而不是你实际存在的/home/test/abc目录下的文件,自然会报“找不到文件或目录”。
另外你直接执行qemu-img create /home/test/abc/foo.qcow 7G能成功,是因为这条命令里没有用错标点,shell能正确识别路径。
正确的操作步骤
1. 正确赋值变量(这一步你原本是对的)
确保在同一shell会话里执行:
virsh_pool=/home/test/abc
2. 使用英文半角引号执行创建命令
把命令里的中文引号换成英文半角引号,shell就能正确解析变量并拼接路径了:
qemu-img create "${virsh_pool}/foo.qcow2" 7G
如果你的路径里没有空格,甚至可以省略引号,效果一样:
qemu-img create ${virsh_pool}/foo.qcow2 7G
这样执行后,shell会把${virsh_pool}替换成/home/test/abc,最终执行的命令和你直接输入的正确命令完全一致,就能成功创建镜像了。
小提醒
在shell里输入命令时,一定要注意切换到英文输入法,避免不小心输入中文标点——这是很多人刚开始用shell时容易踩的小坑哦!
内容的提问来源于stack exchange,提问作者Rajat Singh

