Qemu
可以使用 qemu-nbd 掛載 VDI 文件中的原始磁碟映像,但不能使用循環設備?
我在 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
應該直接給你分區。