Qemu
qemu-img:無法打開“/dev/stdin”:無法刷新總扇區數:不允許操作
我想通過網路將塊設備內容直接傳輸到
qcow2
圖像中。我從一個小模擬開始:[root@okvmh1 default]# dd if=/dev/zero bs=1M count=100 | qemu-img convert -p -f raw -O qcow2 /dev/stdin aaa.qcow2 qemu-img: Could not open '/dev/stdin': Could not refresh total sector count: Operation not permitted qemu-img: Could not open '/dev/stdin'
似乎
qemu-img
不知道所需的圖像大小。在VirtualBox
我會做:<net-command> | VBoxManage convertfromraw stdin aaa.vdi $size --format VDI
但
qemu-img convert
不接受size參數。
Standard input is not seekable,這是 qemu-img convert 在這裡嘗試做的。
要解決此問題,請使用輸入圖像,它是文件系統或塊設備上的文件,兩者都是可查找的。
通過 QCOW2 圖像模擬設備
雖然這是一個老問題,但我認為值得展示一個有趣的替代方案。我遇到了同樣的問題,但Michael Hampton提供的答案不適合我,因為我必須傳輸的數據量太大,而且我必須進行操作的時間不夠。所以下面是我做的:
創建一個空的 QCOW2 圖像
在destination中,創建一個空的QCOW2圖像,例如:
$ qemu-img create -f qcow2 myimage.qcow2 500g
使用 NBD 將 QCOW2 映像連接到設備
有一個工具可讓您在 QCOW2 圖像之上模擬設備。這主要用於訪問 QCOW2 內容,但該設備是可讀寫的,因此您可以將其視為標準塊設備:
$ modprobe nbd $ qemu-nbd --connect /dev/nbd0 myimage.qcow2
現在你有一個
/dev/nbd0
設備是塊設備,就像任何塊設備一樣,但是對它進行的任何操作都將在 QCOW2 映像上執行通過仿真設備執行傳輸
ssh
例如,您可以使用任何網路命令dd
來使魔術發揮作用:$ dd if=myoriginalimg bs=100M | pv -tebrap --size 500g | ssh myhost dd of=/dev/nbd0 bs=100M
我添加了一個加號 using
pv
以便您可以監控進度。我進一步建議你在一個screen
或tmux
會話中執行這個命令,如果它可能需要很長時間,這樣你就不會失去你的工作!關閉模擬器
傳輸完成後,您就有了一個準備好並已轉換的 QCOW2 映像
myimage.qcow2
,但請確保斷開仿真器,以免核心對您生氣!$ qemu-nbd --disconnect /dev/nbd0
你完成了!現在你有一個準備好的轉換圖像,從原始格式從網路源直接傳輸到 QCOW2 文件,沒有中間體