Форум русскоязычного сообщества Ubuntu


Следите за новостями русскоязычного сообщества Ubuntu в Twitter-ленте @ubuntu_ru_loco

Автор Тема: Работа с RAW дисками в VirtualBox  (Прочитано 24010 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Sly_tom_cat

  • Автор темы
  • Don't worry, be happy!
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 12130
  • Xubuntu 22.04
    • Просмотр профиля
    • Github
Работа с RAW дисками в VirtualBox
« : 04 Октября 2010, 16:49:15 »
Поэкспериментировал с VirtualBox и убедился еще раз, что разумной производительности от виртуалки можно добиться только используя как диск виртуальной системы раздел живого винчестера, а не файл в ФС хост системы.  А так как экспериментируя я открыл много нового для себя, то решил поделится своими наработками.

Некоторые рассуждения на тему raw дисков:
(Нажмите, чтобы показать/скрыть)

Так вот, в GUI VirtualBox нет инструмента для создания диска виртуальной машины на разделе живого HDD, что некоторых приводит к мысли, что сделать этого вовсе нельзя. Но это - не так.

Заглянув в Help мы увидим, что в командной строке создать raw disk можно. И там расписаны несколько вариантов - весь диск, отдельные разделы на диске. И даже упоминается некоторая опция касающаяся доступа к диску... А вот тут нас поджидает еще одна сложность.

Вы же правильный линуксоид и работаете не под рутом, а кроме как у рута права на доступ к дисковым девайсам есть у группы disk. Но опасность в том, что что этой группе доступно слишком уж много:
(Нажмите, чтобы показать/скрыть)

И присвоив себе группу disk можно совершенно просто случайно форматнуть из под виртуалки любой раздел на вашем винчестере, напрмер.
И помогает этому тот метод, что первым описан в Help - создание виртуального диска дающего доступ к диску целиком:

$ VBoxManage internalcommands createrawvmdk -filename /path/to/file.vmdk -rawdisk /dev/sda

Но попробовав выполнить эту команду из под обычного пользователя вы быстро убедитесь, что вам не хватает прав. А выполнив успешно эту команду под sudo вы не сможете открыть этот диск в VirtualBox. Причем, если вы сможете открыть файлы описания устройства, поменяв на них права (ведь создавались то они под рутом) то вы все равно не сможете открыть устройство, на которое ссылается этот файл.

Тут слабые духом сдаются и запускают VirtualBox под root или дают себе группу disk. Чем открывают гостевой системе доступ к всему диску хостовой системы. >:( :o

Решение (на мой взгляд - самое верное) лежит не на поверхности и мне стоило некоторого времени в интернете для того что бы найти его. Нужно всего лишь прописать правила для udev, которые на отдельные разделы дадут права доступа конкретному пользователю (или как вариант группе vboxusers).

Как это делается:

Создаем файлик /lib/udev/rules.d/99-vbox-disk-rights.rules

пишем в него что то типа:

KERNEL=="sda6", OWNER="stc"
или

KERNEL=="sda6", GROUP="vboxusers"
и так для всех разделов вашего винчестера которые вы хотите отдать в VirtualBox.

перегружаемся и видим примерно такую картику:

stc@stc-work:~$ ls -al /dev/sd*
brw-rw---- 1 root disk 8, 0 2010-10-01 15:13 /dev/sda
brw-rw---- 1 root disk 8, 1 2010-10-01 15:13 /dev/sda1
brw-rw---- 1 root disk 8, 2 2010-10-01 15:13 /dev/sda2
brw-rw---- 1 root disk 8, 3 2010-10-01 15:13 /dev/sda3
brw-rw---- 1 root disk 8, 4 2010-10-01 15:13 /dev/sda4
brw-rw---- 1 root disk 8, 5 2010-10-01 15:13 /dev/sda5
brw-rw---- 1 stc  disk 8, 6 2010-10-01 15:13 /dev/sda6
При этом я советую менять либо владельца, либо группу, но не то и другое одновременно.

После этих манипуляций вы легко создадите....  :o а-н нет - пока у вас нет прав на весь диск - создать raw disk указанной выше командой без sudo вам не удастся. Для таких случаев help VBox советует пользоватся командой:
VBoxManage internalcommands createrawvmdk -filename /path/to/file.vmdk -rawdisk /dev/sda -partitions 1,5 -relative

И вроде победа близка, но в виртуалке вы опять видите весь диск хоста, за той лишь разницей, что прописать в раделы, отличные от указанных в команде, вы ничего не сможете.

Но, а куда же прописаться MBR-у гостевой системы? А для этого VirtualBox help советует ручками прописать MBR командой:
 
$ VBoxManage internalcommands createrawvmdk -filename /path/to/file.vmdk -rawdisk /dev/sda -partitions 1,5 -mbr winxp.mbr
 

При этом MBR пропишется не на диск а в файл образа, который ссылается на диск (на самом деле в соседний с ним файл). Ну и как с этим всем разбираться? Где взять правильный MBR если мы еще не поставили гостевую систему? Оказывается MBR прописывать самому вовсе не обязательно VBox отлавливает запись в область MBR и направляет ее в файлик, который лежит рядом с файлом описания raw диска.

Однако есть способ получше ИМХО: Если ссылаясь на /dev/sda можно создать образ диска с доступом ко всему диску, то почему не сделать диск из раздела?
Допустим я хочу восполдьзоваться 6-м и 7-м разделами с первого диска (на хост-машине я создаю эти разделы, но оставляю их неформатированными). Тогда я создаю два образа дисков VBox:
VBoxManage internalcommands createrawvmdk -filename /home/stc/.VirtualBox/HardDisks/sda.vmdk -rawdisk /dev/sda6
VBoxManage internalcommands createrawvmdk -filename /home/stc/.VirtualBox/HardDisks/sdb.vmdk -rawdisk /dev/sda7

Внутри виртуалки образы этих двух разделов будут видны как два индивидуальных диска. И инсталлируя ОС в виртуалке вы сможете разбить эти диски как вам захочется - ведь инсталлятор не найдет на них MBR и создаст свои, а в них вы уже пропишете такие и столько разделов, сколько вам нужно в виртуалке. Т.е. внутри каждого из разделов переданных виртуалке, будет создана разметка соответствующая целому диску. Ну а раз на диске есть место под MBR, то не будет никаких манипуляций VirtualBox с MBR.

Еще один бенефит от такого решения заключается в том, что переносить raw диски созданные по технологии предложенной в help затруднительно - ведь на другой машине вы вряд-ли сможете создать точно такую же конфигурацию разделов на диске. А вот диск созданный в разделе - переносится легко - ведь он создан как как целый диск и ему все равно - на каком по счету разделе или дорожке он будет на новой машине.

Важно, что на хост-машине - разделы, с которыми работает VBox будут неопознаными и с хост-машины их лучше никак не трогать.  

Пользователь решил продолжить мысль [time]Mon Oct  4 21:33:29 2010[/time]:
Кстати, если кому интересен перенос raw девайсов:
(Нажмите, чтобы показать/скрыть)
« Последнее редактирование: 05 Октября 2010, 08:00:26 от Sly_tom_cat »
Индикатор для Yandex-Disk: https://forum.ubuntu.ru/index.php?topic=241992
UEFI-Boot - грузимся без загрузчика: https://help.ubuntu.ru/wiki/uefiboot

Оффлайн victor00000

  • Старожил
  • *
  • Сообщений: 15568
  • Глухонемой (Deaf)
    • Просмотр профиля
Re: Работа с RAW дисками в VirtualBox
« Ответ #1 : 21 Ноября 2010, 20:08:46 »
vbox - windows
vbox - встав live cd ubuntu
vbox - лайв грузить на рабстол Ubuntu
vbox - ubuntu открывать терминал пиши fdisk -l  посмотреть где Windows нужен собирать /dev/sda2 как отправить на компа просто сервер и клиент, начало vbox - (sudo dd if=/dev/sda2 | nc -l 12345) сервер, а компа (nc 192.168.0.100 12345 > w7-sda2.raw) клиент грузить и готов, потом компа моунт (sudo mount w7-sda2.raw /media/w7) готов ))))

Пользователь решил продолжить мысль 22 Ноября 2010, 19:21:51:
Ищо как raw на /dev/sdaX
Надо посмотреть fdisk -l w7-sda.raw
victor0000@victor0000:~$ sudo kpartx -av w7-sda.raw
[sudo] password for victor0000:
add map loop1p1 (252:0): 0 204800 linear /dev/loop1 2048
add map loop1p2 (252:1): 0 20762624 linear /dev/loop1 206848
victor0000@victor0000:~$ sudo fdisk -lu /dev/loop1

Диск /dev/loop1: 10.7 ГБ, 10737418240 байт
255 heads, 63 sectors/track, 1305 cylinders, всего 20971520 секторов
Units = секторы of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x90049004

Устр-во Загр     Начало       Конец       Блоки   Id  Система
/dev/loop1p1   *        2048      206847      102400    7  HPFS/NTFS
Раздел 1 не заканчивается на границе цилиндра.
/dev/loop1p2          206848    20969471    10381312    7  HPFS/NTFS
victor0000@victor0000:~$
/dev/loop1p1   *        начало 2048      конец 206847 Это БООТ папка вин7
victor0000@victor0000:~$ sudo mount /dev/mapper/loop1p1 /media/w7
victor0000@victor0000:~$ ls /media/w7
Boot  bootmgr  BOOTSECT.BAK  System Volume Information  w7ldr
victor0000@victor0000:~$ sudo umount /media/w7
victor0000@victor0000:~$ sudo mount /dev/mapper/loop1p2 /media/w7
victor0000@victor0000:~$ ls /media/w7
autoexec.bat            pagefile.sys  Program Files  System Volume Information
config.sys              PerfLogs      Recovery       Users
Documents and Settings  ProgramData   $Recycle.Bin   Windows
victor0000@victor0000:~$ sudo umount /media/w7
victor0000@victor0000:~$
а где mbr? прсто пример это /dev/loop1p1   *        начало 2048      конец 206847
будет равно mbr начало 0    конец 2047 и вот.
Похоже
/dev/loop1 - /dev/sda
/dev/mapper/loop1p1 - /dev/sda1
/dev/mapper/loop1p2 - /dev/sda2
Хочется на sda или sdb далеко.
dd if=/dev/loop1 of=/dev/sda
или
fdisk /dev/sda # чтобы разрезать и разсер как вот sudo fdisk -lu /dev/loop1
dd if=/dev/loop1 of=/dev/sda bs=2047 count=1 #это mbr
dd if=/dev/mapper/loop1p1 of=/dev/sda1 #это боот папка
dd if=/dev/mapper/loop1p2 of=/dev/sda2 #это windows папка
Будет update-grub готов.
Будет работает Windows7 ОК!
Я писал Глухонемой.  8)
« Последнее редактирование: 22 Ноября 2010, 19:45:52 от victor00000 »
Wars ~.o

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: Работа с RAW дисками в VirtualBox
« Ответ #2 : 23 Ноября 2010, 09:13:21 »
victor00000, у Вас очень много классных идей увидел.
Но до всего надо додумываться.
Отредактируйте что написали, но четко и понятно.
Например, звучит как-то непонятно.
/*
начало vbox - (sudo dd if=/dev/sda2 | nc -l 12345) сервер, а компа (nc 192.168.0.100 12345 > w7-sda2.raw) клиент грузить и готов, потом компа моунт (sudo mount w7-sda2.raw /media/w7) готов ))))
*/
Я написал бы так.
Как снять образ и перенести на другой хост.
Сделаем сервер, снимающий образ
sudo dd if=/dev/sda2 | nc -l 12345
На хосте создаем клиента, который будет писать образ в файл
nc 192.168.0.100 12345 > w7-sda2.raw


После монтирования образа уже будем иметь готовую винду на клиентовском хосте.
sudo mount w7-sda2.raw /media/w7

и т.д.
« Последнее редактирование: 23 Ноября 2010, 09:27:32 от alexander.pronin »

Оффлайн victor00000

  • Старожил
  • *
  • Сообщений: 15568
  • Глухонемой (Deaf)
    • Просмотр профиля
Re: Работа с RAW дисками в VirtualBox
« Ответ #3 : 24 Ноября 2010, 06:15:04 »
У меня образ iso win7, без дисковод диск. Можно установка вин7 iso))
Wars ~.o

Оффлайн Pavel798

  • Активист
  • *
  • Сообщений: 396
    • Просмотр профиля
Re: Работа с RAW дисками в VirtualBox
« Ответ #4 : 24 Ноября 2010, 06:47:59 »
ТС, спасибо за отличную статью, мне она очень полезна.
Пошёл экспериментировать.

Оффлайн victor00000

  • Старожил
  • *
  • Сообщений: 15568
  • Глухонемой (Deaf)
    • Просмотр профиля
Re: Работа с RAW дисками в VirtualBox
« Ответ #5 : 26 Ноября 2010, 15:05:52 »
vbox - установил WINDOWS XP
vdi на переводить raw
VBoxManage internalcommands converttoraw ~/.VirtualBox/HardDisks/victor0000.vdi wxp-sda.raw
---------------------------------------
~$ fdisk -lu wxp-sda.raw
Вы должны установить цилиндры.
Вы можете сделать это из меню дополнительных функций.

Диск wxp-sda.raw: 0 МБ, 0 байт
255 heads, 63 sectors/track, 0 cylinders, всего 0 секторов
Units = секторы of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x6ce56ce5

Устр-во Загр     Начало       Конец       Блоки   Id  Система
wxp-sda.raw1   *          [b]63[/b]    25270244    12635091    7  HPFS/NTFS
Раздел 1 имеет различные физические/логические окончания:
     физ=(1023, 254, 63) логич=(1572, 254, 63)
----------------------------------------------
sudo mount wxp-sda.raw /media/wxp -o offset=$[[b]63[/b]*512]
ls /media/wxp
-----------------------------------------------
vbox - установил WINDOWS 7
тоже на переводить.
~$ fdisk -lu w7-sda.raw
Вы должны установить цилиндры.
Вы можете сделать это из меню дополнительных функций.

Диск w7-sda.raw: 0 МБ, 0 байт
255 heads, 63 sectors/track, 0 cylinders, всего 0 секторов
Units = секторы of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x90049004

Устр-во Загр     Начало       Конец       Блоки   Id  Система
w7-sda.raw1   *        [b]2048[/b]      206847      102400    7  HPFS/NTFS
Раздел 1 не заканчивается на границе цилиндра.
w7-sda.raw2          [b]206848[/b]    20969471    10381312    7  HPFS/NTFS
Раздел 2 имеет различные физические/логические окончания:
     физ=(1023, 254, 63) логич=(1305, 73, 48)
-------------------------------------------------
sudo mount w7-sda.raw /media/w7 -o offset=$[[b]2048[/b]*512]
ls /media/w7
sudo umount /media/w7
sudo mount w7-sda.raw /media/w7 -o offset=$[[b]206848[/b]*512]
ls /media/w7

Пользователь решил продолжить мысль 26 Ноября 2010, 17:03:37:
копирую на /dev/sdaX
victor0000@victor0000:~$ sudo update-grub
Generating grub.cfg ...
Found linux image: /boot/vmlinuz-2.6.32-21-generic
Found initrd image: /boot/initrd.img-2.6.32-21-generic
Found linux image: /boot/vmlinuz-2.6.31-10-rt
Found initrd image: /boot/initrd.img-2.6.31-10-rt
Adding Live CD UBUNTU 10.10
Adding TinyCore
Found memtest86+ image: /boot/memtest86+.bin
Found Windows 7 (loader) on /dev/sda1
Found Microsoft Windows XP Professional RU on /dev/sda3
done

Готов, не ручную.
« Последнее редактирование: 26 Ноября 2010, 17:03:37 от victor00000 »
Wars ~.o

Оффлайн JohnDoe

  • Активист
  • *
  • Сообщений: 562
    • Просмотр профиля
Re: Работа с RAW дисками в VirtualBox
« Ответ #6 : 13 Января 2011, 14:32:02 »
значит если у меня winxp стоит на разделе sda2 мне нужен файл

#/lib/udev/rules.d/99-vbox-disk-rights.rules
KERNEL=="sda2", GROUP="vboxusers"

затем
VBoxManage internalcommands createrawvmdk -filename /path/to/file.vmdk -rawdisk /dev/sda2

подключить это диск к виртуалке и получу доступ к параллельной xp установленной на ноуте?

Оффлайн Красноглазый

  • Активист
  • *
  • Сообщений: 702
    • Просмотр профиля
Re: Работа с RAW дисками в VirtualBox
« Ответ #7 : 20 Января 2011, 11:49:29 »
Цитировать
Внутри виртуалки образы этих двух разделов будут видны как два индивидуальных диска. И инсталлируя ОС в виртуалке вы сможете разбить эти диски как вам захочется - ведь инсталлятор не найдет на них MBR и создаст свои, а в них вы уже пропишете такие и столько разделов, сколько вам нужно в виртуалке. Т.е. внутри каждого из разделов переданных виртуалке, будет создана разметка соответствующая целому диску. Ну а раз на диске есть место под MBR, то не будет никаких манипуляций VirtualBox с MBR.
Если я правильно помню, расширенный раздел - это фактически структура разделов, аналогичная MBR, только без кода загрузчика. Соответственно, можно было бы попробовать на пустом месте создать расширенный раздел и тогда основная система сможет увидеть гостевые разделы как свои. Единственное сомнение, не попытается ли основная система протереть код загрузчика из MBR гостевого диска?

Пользователь решил продолжить мысль 20 Января 2011, 11:52:33:
значит если у меня winxp стоит на разделе sda2 мне нужен файл

#/lib/udev/rules.d/99-vbox-disk-rights.rules
KERNEL=="sda2", GROUP="vboxusers"

затем
VBoxManage internalcommands createrawvmdk -filename /path/to/file.vmdk -rawdisk /dev/sda2

подключить это диск к виртуалке и получу доступ к параллельной xp установленной на ноуте?
Нет. На разделе с виндой в начале раздела будет не MBR, а виндовый BOOT сектор.
« Последнее редактирование: 20 Января 2011, 11:57:50 от Красноглазый »

Оффлайн JohnDoe

  • Активист
  • *
  • Сообщений: 562
    • Просмотр профиля
Re: Работа с RAW дисками в VirtualBox
« Ответ #8 : 20 Января 2011, 15:16:46 »
Как тогда правильно подключить раздел с реальной виндой?


Оффлайн Красноглазый

  • Активист
  • *
  • Сообщений: 702
    • Просмотр профиля
Re: Работа с RAW дисками в VirtualBox
« Ответ #9 : 20 Января 2011, 16:15:12 »
А зачем его подключать? Установите ему точку монтирования типа /mnt/disk_d и будет вам щастье! :)
Или проблемы с чтением ntfs раздела?

Оффлайн JohnDoe

  • Активист
  • *
  • Сообщений: 562
    • Просмотр профиля
Re: Работа с RAW дисками в VirtualBox
« Ответ #10 : 20 Января 2011, 20:23:11 »
Интерес экспериментатора. Хочется сделать подобие Parallels Desktop. Вариант когда грузится система, либо она же но через виртуальную машину. Уверен еще будет заморочка с драйверами в XP.

Оффлайн Karpo

  • Новичок
  • *
  • Сообщений: 26
    • Просмотр профиля
Re: Работа с RAW дисками в VirtualBox
« Ответ #11 : 05 Апреля 2012, 21:13:04 »
VBoxManage internalcommands createrawvmdk -filename /home/stc/.VirtualBox/HardDisks/sda.vmdk -rawdisk /dev/sda6
Диск созданный с такой командой виртуаль бокс воспринимает с ошибкой. Потому прошу ещё раз объяснить в чём её выгода перед
VBoxManage internalcommands createrawvmdk -filename /path/to/file.vmdk -rawdisk /dev/sda -partitions 1,5 -relative
Тем более что первой команды в официальном мануале кажется нет(не уверен)

Пользователь решил продолжить мысль 05 Апреля 2012, 21:23:06:
Извиняюсь, был не прав. Всё в порядке :)
« Последнее редактирование: 05 Апреля 2012, 21:23:06 от Karpo »

Оффлайн KonstantinD

  • Новичок
  • *
  • Сообщений: 3
    • Просмотр профиля
Re: Работа с RAW дисками в VirtualBox
« Ответ #12 : 03 Октября 2012, 15:17:51 »
Хочу создать RAW диск. Поскажите что делаю не так.
konstantin@konstantin-PC:~$ ls -al /dev/sd*
brw-rw---- 1 root       disk 8,  0 сент. 30 21:10 /dev/sda
brw-rw---- 1 root       disk 8,  1 сент. 30 21:10 /dev/sda1
brw-rw---- 1 root       disk 8,  2 сент. 30 21:10 /dev/sda2
brw-rw---- 1 root       disk 8,  3 сент. 30 21:10 /dev/sda3
brw-rw---- 1 root       disk 8,  4 сент. 30 21:10 /dev/sda4
brw-rw---- 1 root       disk 8,  5 сент. 30 21:10 /dev/sda5
brw-rw---- 1 root       disk 8,  6 сент. 30 21:10 /dev/sda6
brw-rw---- 1 konstantin disk 8,  7 сент. 30 21:10 /dev/sda7
brw-rw---- 1 konstantin disk 8,  8 сент. 30 21:10 /dev/sda8
brw-rw---- 1 root       disk 8, 16 сент. 30 21:10 /dev/sdb
brw-rw---- 1 root       disk 8, 17 сент. 30 21:10 /dev/sdb1
brw-rw---- 1 root       disk 8, 18 сент. 30 21:10 /dev/sdb2
brw-rw---- 1 root       disk 8, 21 сент. 30 21:10 /dev/sdb5
brw-rw---- 1 root       disk 8, 22 сент. 30 21:10 /dev/sdb6
brw-rw---- 1 root       disk 8, 23 сент. 30 21:10 /dev/sdb7
brw-rw---- 1 root       disk 8, 32 сент. 30 21:10 /dev/sdc
brw-rw---- 1 root       disk 8, 33 сент. 30 21:10 /dev/sdc1
brw-rw---- 1 root       disk 8, 48 сент. 30 21:10 /dev/sdd
brw-rw---- 1 root       disk 8, 49 сент. 30 21:10 /dev/sdd1
brw-rw---- 1 root       disk 8, 64 сент. 30 21:10 /dev/sde
brw-rw---- 1 root       disk 8, 65 сент. 30 21:10 /dev/sde1
konstantin@konstantin-PC:~$ VBoxManage internalcommands createrawvmdk -filename /home/konstantin/.VirtualBox/HardDisks/sda.vmdk -rawdisk /dev/sda7
VBoxManage: error: VMDK: could not create new file '/home/konstantin/.VirtualBox/HardDisks/sda.vmdk'
VBoxManage: error: Error code VERR_FILE_NOT_FOUND at /home/vbox/vbox-4.2.0/src/VBox/Storage/VMDK.cpp(3488) in function int vmdkCreateRawImage(PVMDKIMAGE, PVBOXHDDRAW, uint64_t)
VBoxManage: error: Cannot create the raw disk VMDK: VERR_FILE_NOT_FOUND
VBoxManage: error: The raw disk vmdk file was not created
konstantin@konstantin-PC:~$

Оффлайн Красноглазый

  • Активист
  • *
  • Сообщений: 702
    • Просмотр профиля
Re: Работа с RAW дисками в VirtualBox
« Ответ #13 : 06 Октября 2012, 11:53:06 »
Вариантов скорее всего два:
- убедись что существует каталог /home/konstantin/.VirtualBox/HardDisks. Если нет - создай или в команде укажи другой путь (существующий)

- если выполнял обновление с VB 4.0 до 4.2, посмотри, что обновил и плагин extention до соответствующей версии (Меню:Файл/Настройки/Плагины).

Ну и не забываем добавлять своего пользователя в группу vboxusers
sudo usermod -a -Gvboxusers konstantin

 

Страница сгенерирована за 0.047 секунд. Запросов: 25.