Qemu

可以使用 qemu-nbd 掛載 VDI 文件中的原始磁碟映像,但不能使用循環設備?

  • February 9, 2020

我在 VirtualBox 上安裝了一個非常舊的 Slack 版本(3.2),然後將其轉換為 RAW 格式(ext2)。但是,由於某種原因,我無法使用 losttup 安裝它,但 qemu-nbd 工作正常。為什麼?

我試過, losetup -P -f --show slack-3.2.img

但它不會創建分區。我修改了 /etc/default/grub 以便 GRUB_CMDLINE_LINUX=“loop.max_part=63” 和 grub-mkconfig 等,但它仍然不會從映像創建分區。

我試過了,kpartx -av slack-3.2.img我得到了

read error, sector 0
read error, sector 1
read error, sector 29

我什至試過dd if=slack-3.2.img of=slack.part bs=512 skip=63 count=409185

sudo losetup -P -f --show slack.part它仍然失敗。為什麼它不起作用?

sudo fdisk -l slack-3.2.img

Disk slack-3.2.img: 200 MiB, 209715200 bytes, 409600 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x00000000

Device         Boot Start    End Sectors   Size Id Type
slack-3.2.img1         63 409247  409185 199.8M 83 Linux

讀取錯誤,扇區 0

這表明核心無法訪問您的文件,我強烈懷疑是 vboxfs 造成的。我有一個關於它不支持符號連結和硬連結的長期開放錯誤,我認為他們只修復了前者。

qemu-nbd OTOH 只會讀取文件,所以沒問題,但核心使用 mmap 和其他低級訪問。

一種解決方案是將映像複製到(虛擬)分區上的 ext2/4 上。

這是因為 VirtualBox 通常不使用原始文件,而是使用具有特殊內部格式的圖像。

要將其轉換為原始數據,請使用

qemu-img convert -O raw INPUT OUTPUT 

另一種解釋可能是您對文件進行操作,但您嘗試的許多操作都需要一個塊設備 - 您可以從 ndb 或 losttup 獲得。

losetup -o $((63 * 512)) /dev/loop7 FILE

應該直接給你分區。

引用自:https://unix.stackexchange.com/questions/558726