¿Máquina de arranque dual o virtual para programador de Linux que realiza algún desarrollo de Visual Studio?

26

El escenario:

  • Soy un desarrollador de software independiente que se desarrolla principalmente en Linux (Python, MySQL, MongoDB, etc.)
  • Mi computadora de trabajo es una laptop Lenovo con un procesador i7 y 8GB de RAM. Big HD + SSD de 128 GB. El sistema operativo es Ubuntu Linux

Podría obtener algunos proyectos .NET / C # en el futuro cercano, por lo tanto, estoy buscando orientación sobre lo siguiente:

  • ¿Debo optar por una solución de arranque dual o usar máquinas virtuales para Windows?
  • Si hago un arranque dual: ¿Cuál es la secuencia de instalación recomendada? ¿Windows primero o Linux primero? (Estoy buscando una reinstalación completa de Ubuntu para obtener el último LTS de todos modos, así puedo comenzar a instalar todo nuevo)
  • Si voy a VM: ¿Cómo se compara VMWare Workstation y VirtualBox en cuanto al rendimiento?
  • La configuración de mi sueño probablemente sería la siguiente:
    • Arranque dual
    • Pero si inicio en Linux, puedo iniciar la partición de Windows como una máquina virtual. es posible?
    • Y / o: si inicio en Windows, puedo iniciar la partición de Linux como una máquina virtual. es posible?
codeape
fuente
55
Siempre debe hacer Windows primero y luego Ubuntu, ya que desea que Grub reemplace el arranque en cadena del cargador de arranque de Windows. Hay varias docenas de preguntas sobre cómo hacer eso. Las decisiones de rendimiento deben tomarse usted mismo
Ramhound
Visual Studio es una aplicación intensa y puede o no funcionar suficientemente bien en su entorno virtual.
Frank Thomas

Respuestas:

12

Otros han cubierto el resto de su pregunta, pero veo que han dejado esta parte sin abordar:

Pero si inicio en Linux, puedo iniciar la partición de Windows como una máquina virtual. es posible? Y / o: si inicio en Windows, puedo iniciar la partición de Linux como una máquina virtual. es posible?

La respuesta corta es sí.

La respuesta larga es sí, pero con varias advertencias e implicaciones.

Hasta este enero (cuando obtuvimos nuevas máquinas), tenía mi computadora de trabajo configurada para arranque dual o para usar Linux como host para una VM con Windows 7 que accedía directamente a la partición de Windows. Nunca me molesté en tratar de usar Windows como host para una máquina virtual Linux de disco directo, pero también es posible. Mi computadora usaba BIOS / MBR heredado, no estoy seguro de cómo hacerlo si usa UEFI / GPT.

Elegí VirtualBox para hacerlo, pero por lo que entiendo, también debería ser posible con VMWare.

El rendimiento fue perfectamente aceptable para mis propósitos; Le di a Windows 1 CPU core, 2GB de memoria, 1 monitor, y no recuerdo cuánta memoria de video. La VM era capaz de reproducir videos y trabajar con mi aplicación Java GUI y muchos sitios web de contenido enriquecido.

Discutiré la rareza antes de entrar en detalles:

  • Al cambiar entre Windows 7 de arranque nativo y modo VM, se activó la advertencia de Windows de que mi copia de Windows no era genuina. Dependiendo de su licencia, MS puede considerar esto como una violación de la licencia al instalar en dos piezas de hardware. También necesitaba "reparar" mi instalación porque muchos de los controladores de bajo nivel son diferentes para el hardware real y el "hardware" de VM.

  • Cada vez que se ejecuta Windows Update (o cualquier otra operación de E / S de disco grande), mi disco duro se aplastó bajo carga y todo en ambas máquinas se volvió lento. Mover cada sistema operativo a su propio disco duro dedicado solucionó este problema muy bien; El uso de una unidad de estado sólido también habría resuelto el problema.

  • Por alguna razón, a Ubuntu no le gustaba despertarse ocasionalmente después de suspenderlo (tal vez el 20% del tiempo), que era el equivalente a un apagado total para mi VM de Windows. Como resultado, apagaba la máquina virtual todas las noches antes de suspender el host.

  • Tenía que tener mucho cuidado de nunca intentar montar la partición de Windows en Linux para evitar posibles daños / pérdidas de datos. Rápidamente agregué una regla de udev para evitar esto.

Bien, si eso no suena tan mal, aquí están los detalles: La referencia más útil que encontré para hacer esto es este blog: http://www.rajatarya.com/website/taming-windows-virtualbox-vm . Aquí están los pasos resumidos:

  • RTFM. De Verdad. Utilizará comandos que podrían dañar su sistema de archivos si se hace mal.

  • Encuentra las particiones.

  • Cambie los permisos para sus particiones (alternativamente, puede iniciar su VM usando sudo, pero cualquier archivo creado en la unidad compartida host / invitado será propiedad de root).

  • Cree un MBR para que el invitado no intente usar el gestor de arranque normal.

  • Use un comando interno de VirtualBox para crear la imagen vmdk para usar para la VM.

  • Crea la VM. Haga que use el vmdk que acaba de crear.

  • Arranca y repara tu instalación.

Esperaría encontrar muchos de los mismos problemas usando un host de Windows, pero Linux probablemente manejaría los diferentes hardware de manera más elegante. Sin embargo, podría ser más fácil usar una (s) partición (es) compartida / doméstica (y tal vez / opcional) y solo tener diferentes particiones raíz para las máquinas nativas frente a las invitadas.

KJP
fuente
He adoptado el enfoque de VM en Mac durante años y encuentro que incluso un SSD no lo corta por sí solo. Debe separar su host e invitado en unidades totalmente diferentes para evitar que cualquiera de los sistemas se vincule a E / S. Aunque un SSD mejora las cosas, no es nada en comparación con el uso de un segundo disco (¡y si ambos son SSD, estás volando!)
Keith Jackson,
12

En general, hago lo contrario, es decir, mi sistema doméstico es una máquina con Windows 7 y ejecuto varios sabores de Linux como máquinas virtuales. Siendo que Linux puede funcionar bastante bien con recursos limitados, esto funciona para mí, aunque solo tengo 4 GB de RAM (ten en cuenta que esto significa que ejecuto una sola VM a la vez y, por lo general, le doy 1024 MB de RAM como máximo para mantener un montón para ventanas).

Sus 8 GB de RAM deberían permitirle ejecutar una VM de Windows con bastante facilidad. Creo que la única gran pregunta aquí es el tipo de resultados que querrás medir para tu desarrollo. Dudaría en confiar en las métricas de rendimiento / rendimiento para los elementos que desarrolle en una VM (a menos que se implemente en un entorno de VM similar con las mismas especificaciones en todos los ámbitos). De lo contrario, deberías estar listo.

Y para tocar los comentarios en otro hilo, naturalmente si entras sabiendo que desarrollarás aplicaciones que requieren una gran cantidad de recursos, entonces la optimización para ese fin sería el camino a seguir (por lo tanto, en esos casos, el arranque dual ciertamente ser preferible a usar máquinas virtuales).

He usado VMWare y VirtualBox, y tampoco he visto ningún éxito real en el rendimiento. No he llegado al punto de comparar los VM dentro, simplemente no he notado ningún impacto negativo de ninguna de las plataformas (todavía uso VirtualBox en casa y VMware en el trabajo).

usuario123
fuente
Si su Linux maneja la ejecución de 1 GB de RAM en una VM, eso significa que puede ejecutar fácilmente Windows en una VM y asignar 3GB de VRAM también. En el caso de la pregunta, sigue la misma teoría. Mantenga 1 GB para su sistema operativo Linux base y asigne 7 GB a Windows. Realmente no importa cuál sea el sistema operativo base y la VM. Mientras esté ejecutando ambos, está compartiendo los mismos recursos. Para mí, realmente no importa, ambos sistemas operativos están felices de ejecutar en una VM y si tiene los recursos para ejecutar ambos, siempre es bueno poder cambiar entre ellos sin tener que reiniciar.
Jakke
Prefiero VirtualBox para ejecutar mis máquinas virtuales, porque he visto graves pérdidas de memoria en VMware Player AND Workstation (versión 10). Sin embargo, estoy hablando de> 4 máquinas virtuales que se ejecutan al mismo tiempo, en un sistema con 32 GB de RAM. Ambos productos VW comienzan a usar todo el ram hasta que se bloquea, mientras que VB funciona felizmente durante semanas sin ningún problema.
Jakke
8

Depende de cómo trabajes y cómo quieras que se sienta el sistema operativo .

El arranque dual significa reiniciar y arrancar si desea cambiar el sistema operativo, esto lleva tiempo . A medida que trabaja independientemente, ¿trabaja 8 horas seguidas con un proyecto sin hacer "sus" cosas ("sus cosas" sería usted en su arranque de Linux).

Si trabaja 8 horas seguidas en Windows y luego pasa el resto del día en Linux, use el arranque dual. Si trabaja 30 minutos y luego quiere hacer algo en Linux, cambie a trabajar nuevamente durante 3 horas, luego a linux nuevamente, etc. Luego elegiría VM.

Si no está seguro, haga ambas cosas. Arranque dual y cuando en Windows ejecuta una VM. Verá una clara diferencia entre ambos y preferirá uno sobre el otro.

Personalmente, solo utilizo una máquina virtual para probar nuevos discos de Linux y, a veces, un servidor falso cuando lo desarrollo (poder fastidiar una máquina virtual no tiene precio y es mucho menos complicado que hacerlo en su disco duro real). VM también se retrasa y se siente menos receptiva, necesito mi sistema operativo para sentirme receptivo y suave, la VM carece de esta área. Entonces prefiero el arranque dual.

También hay un problema cuando se trata de compartir archivos. Es más trabajo compartir en un arranque dual (imagina editar un archivo en el arranque de Windows y luego arrancar en Linux solo para darte cuenta de que perdiste una línea y tienes que reiniciar en Windows, ¡la pesadilla!) Donde en una máquina virtual puedes usar NFS o samba para compartir archivos entre el sistema operativo en tiempo real, sin problemas.

También sobre la falta de carnero como dijo Aboba, basura, digo. Ejecuto 4gb y una VM en Windows8. Sin embargo, recuerde qué recursos necesita su proyecto.

Karl Morrison
fuente
Acerca de compartir archivos: Realmente, realmente, realmente espero que tenga todo lo que trabaja bajo control de fuente, en cuyo caso el punto se vuelve discutible. Las cosas que aún desea compartir entre Windows y Linux (porque ... no lo sé) simplemente van a una partición NTFS, que ambos sistemas operativos pueden leer y escribir.
Voo
GIT 4 vida ofc! Hago mucha programación privada, así que no necesito git para eso (sé que sé que es una buena práctica, pero soy flojo). Sobre el NFTS, ¡eso era exactamente lo que estaba diciendo! Sin embargo, el arranque entre los sistemas operativos lleva tiempo. ¡Y en una vm ambos archivos están disponibles en tiempo real!
Karl Morrison
Mi Ubuntu Partition monta automáticamente todas las particiones de Windows, por lo que al menos el sistema de archivos de acceso / archivos de Windows no debería ser un problema. También hay software de terceros para montar particiones EXT3 / 4 en Windows.
kuldeep.kamboj
Otra consideración es si desea hacer el desarrollo de Windows Phone. Si ese es el caso, no puede ejecutar Visual Studio en un entorno virtual, ya que los emuladores de WP son ellos mismos máquinas virtuales Hyper-V. Podría ejecutar Windows 8 con el cliente Hyper-V habilitado, Linux en una VM debajo de eso y aún tener acceso a los emuladores para el desarrollo de WP.
rjrapson
5

¿O qué tal esto? Estás interesado en .net / C #, entonces ¿por qué no usar Mono en linux? Su plataforma muy cruzada en el sentido de Java es.

hanetzer
fuente
Exactamente mis pensamientos: jugué haciendo un simple juego de C # Othello de una sola ventana en Visual Studio, y funcionó bien al importar el proyecto y ejecutarlo en MonoDevelop.
NoBugs
3
Como advertencia, Mono no es compatible con proyectos WPF. Entonces, si el OP está buscando desarrollar aplicaciones WPF, eso no funcionará. Además, era un gran admirador de Mono, pero desde el abandono del proyecto por parte de Novell y la elección de Xamarin de manejar el nuevo estado de cosas, soy un poco cauteloso al invertir más esfuerzo en él.
Boluc Papuccuoglu
1
He considerado usar mono, y definitivamente lo probaré. ¿Pero podría haber problemas cuando otros miembros del equipo usan Visual Studio?
codeape
Realmente te perderías la diversión .NET si no estás usando Visual Studio.
demonkoryu
3
@codeape Hay muchas funciones y bibliotecas no compatibles en Mono; probablemente esta no sea una opción seria si su cliente no está específicamente interesado en apuntar a Mono.
Casey
4

Personalmente, he tenido muchas experiencias positivas tomando la casa de la mitad del camino, use un hipervisor como Xen , entonces puede hacer que Linux y Windows se ejecuten bajo un hipervisor de micro kernel liviano, ni recibir un impacto significativo en el rendimiento y esta configuración es mucho más flexible , lo que le permite reasignar fácilmente recursos entre los dos en cualquier momento.

Esto casi coincide con la configuración de sus sueños mencionada, ya que puede iniciar o apagar los dos sistemas operativos de forma independiente en cualquier momento para reasignar recursos al otro y no podrá notar ningún impacto en el rendimiento (en realidad, puede ser una fracción de un% más lento en algunos casos, pero no lo notará a menos que esté haciendo una evaluación comparativa específica para probar esto).

El único inconveniente es que ciertas características requieren que su CPU admita la visualización; sin embargo, cada i7 lo hace (afaik), por lo que esto no debería ser un problema para usted.

EDITAR:

Xen contiene su propio microkernel, no se necesita Debian para ejecutarlo, la única razón por la que uno necesitaría un sistema Linux es reconfigurar Xen ya que el programa de configuración es un programa Linux que se ejecuta en uno de los invitados (invitado es el término que Xen usa para significar una VM). Puede tener solo Linux, solo Windows o ambos ejecutándose en cualquier momento, pero necesitará Linux ejecutándose para configurar los ajustes de Xen, por lo que es aconsejable dejar un pequeño Linux ejecutándose en segundo plano para hacer esto cuando sea necesario.

El hardware se puede manejar de varias maneras, Xen proporciona un conjunto de dispositivos virtuales que permiten que varios invitados usen una pieza de hardware a la vez, como tarjetas de red y tarjetas de sonido, etc.

Para el hardware que no puede funcionar de esta manera o que solo lo necesita un invitado a la vez, xen tiene dispositivos de paso, esto significa que puede seleccionar y elegir en cualquier momento qué invitado tiene acceso directo a la pieza de hardware y puede cambiar esto en cualquier momento hora. Esto se puede hacer para dar a un invitado específico un verdadero acceso a la tarjeta gráfica si necesita un procesamiento acelerado de alta velocidad sin sobrecarga de virtualización .

También es posible tener un invitado directamente usando la tarjeta gráfica en modo de paso como se explicó anteriormente, pero aún así ver a otros usando un protocolo similar a VNC local que hace que las pantallas de otros invitados aparezcan en ventanas (piense en una caja virtual o un escritorio remoto) mientras que uno tiene control directo de la tarjeta gráfica; o, por supuesto, solo puede cambiar entre las pantallas de invitados para tener un acceso directo a la vez.

Al contrario de lo que puede suponer acerca de la eficiencia de esta configuración, de hecho, es una de las pocas formas de ejecutar ambos sistemas operativos al mismo tiempo, al tiempo que mantiene un rendimiento nativo efectivo en ambos, si busca en Google, encontrará que muchos han tenido éxito usando Tal configuración para ejecutar una máquina de juego de alto rendimiento u otros sistemas exigentes.

La realidad
fuente
¿Me puede recomendar algún tutorial / guía para configurarlo como usted mencionó? Quiero tener un sistema gentoo linux / win7.
Gene Pavlovsky
3

Según mi experiencia (también trabajo en aplicaciones .Net mientras pruebo cosas interesantes y resuelvo problemas en Linux), la mejor opción será el arranque dual.

Como otros han señalado, el uso de una máquina virtual a veces se siente lento e insensible, lo que puede ser un dolor.

Una cosa más que señalaría es que se toma su tiempo e intenta ejecutar una VM y verificar si se siente cómodo con ella.

En cuanto a la orden
1) instale Windows primero y luego Linux (preferido)
2) Instale Linux primero y luego Windows (luego debe reinstalar el gestor de arranque)

Una cosa más que me gustaría agregar es que para pequeños proyectos .Net puede usar incluso Linux usando mono, por lo que no es necesario cambiar de Windows a Linux.

Pratik Singhal
fuente
1

He estado haciendo mucho desarrollo de Linux / Visual Studio conmutado durante poco más de un año, comenzando con Visual Studio y pasando a Linux con el tiempo (¡me gusta apt, zsh y vim!).

Comencé con Windows alojando Ubuntu en VMWare Player, que funcionó bastante bien, ciertamente excelente si principalmente está desarrollando Visual Studio y solo de vez en cuando necesita algún paquete de Linux o lo que sea. Con el tiempo descubrí que quería que mi trabajo estuviera en el entorno de Linux con más frecuencia y la integración de VM tenía algunos puntos débiles, así que ...

Cuando cambié al desarrollo principalmente de Linux (muchos AS3 en IntelliJ y algunos nodos + python) con solo una necesidad ocasional de Windows (sitio ASP.NET), cambié eso a Ubuntu que aloja un VirtualBox (usando un disk2vhd -> .vdi de mi viejo disco de windows). Después de una buena cantidad de violines, estoy bastante contento con esto dada la división del trabajo que generalmente tengo, pero si está haciendo una gran cantidad de Visual Studio, probablemente desee que Windows aloje Linux, ya sea VirtualBox o VMWare Player.

Sin embargo, debo tener en cuenta algunos puntos débiles: con los controladores de video AMD Ubuntu 14.04 estándar, la aceleración 3D de VirtualBox hace que Visual Studio ~ 10-100x sea más lento, por lo que deshabilite la aceleración a costa de cierta lentitud; y realmente quieres estar corriendo en un SSD)

Simon Buchan
fuente
2
Solo notar que las respuestas que dicen "No tienes suficiente ram" me suena bastante loco: VS en sí es de 32 bits, por lo que no puede usar más de 4 GB. Es posible que tenga cierta lentitud si ejecuta ediciones completas de IIS con SQL Server, pero las versiones normales de Express deberían estar bien. SSD es mucho más importante para el rendimiento.
Simon Buchan