Inicialização dupla ou máquina virtual para programador Linux que desenvolve algum Visual Studio?


26

O cenário:

  • Sou desenvolvedor de software freelancer que desenvolve principalmente em Linux (Python, MySQL, MongoDB etc.)
  • Meu computador de trabalho é um laptop Lenovo com um processador i7 e 8 GB de RAM. HD grande + SSD de 128 GB. O sistema operacional é o Ubuntu Linux

Posso obter alguns projetos .NET / C # em um futuro próximo, portanto, estou procurando algumas orientações sobre o seguinte:

  • Devo optar por uma solução de inicialização dupla ou usar máquinas virtuais para coisas do Windows?
  • Se eu for dual-boot: Qual é a sequência de instalação recomendada? Windows primeiro ou Linux primeiro? (Estou olhando para uma reinstalação completa do Ubuntu para obter o LTS mais recente de qualquer maneira, para que eu possa começar a instalar tudo novo)
  • Se eu for VM: como o VMWare Workstation e o VirtualBox se comparam ao desempenho?
  • A configuração dos meus sonhos provavelmente seria a seguinte:
    • Bota dupla
    • Mas se eu inicializar no Linux, posso inicializar a partição do Windows como uma máquina virtual. Isso é possível?
    • E / ou: Se eu inicializar no Windows, posso inicializar a partição Linux como uma máquina virtual. Isso é possível?

5
Você deve sempre executar o Windows primeiro do que o Ubuntu, pois deseja que o Grub substitua a inicialização em cadeia do Windows Bootloader. Existem várias dezenas de perguntas sobre como fazer isso. Decisões de desempenho deve ser feita a si mesmo
Ramhound

O Visual Studio é um aplicativo intenso e pode ou não funcionar suficientemente bem em seu ambiente virtual.
Frank Thomas

Respostas:


12

Outros abordaram o restante da sua pergunta, mas vejo que eles deixaram esta parte não endereçada:

Mas se eu inicializar no Linux, posso inicializar a partição do Windows como uma máquina virtual. Isso é possível? E / ou: Se eu inicializar no Windows, posso inicializar a partição Linux como uma máquina virtual. Isso é possível?

A resposta curta é sim.

A resposta longa é sim, mas com várias advertências e implicações.

Até janeiro deste ano (quando recebemos novas máquinas), meu computador de trabalho estava configurado para inicialização dupla ou para usar o Linux como host de uma VM do Windows 7 que acessava diretamente a partição do Windows. Eu nunca me incomodei em tentar usar o Windows como host para uma VM Linux em disco direto, mas também é possível. Meu computador usou BIOS / MBR herdado, não sei como fazer isso se você usar UEFI / GPT.

Eu escolhi o VirtualBox para fazer isso, mas, pelo que entendi, também deve ser possível com o VMWare.

O desempenho foi perfeitamente aceitável para meus propósitos; Dei ao Windows 1 núcleo da CPU, 2 GB de memória, 1 monitor e não lembro quanta memória de vídeo. A VM era capaz de reproduzir vídeo e trabalhar com meu aplicativo Java GUI e muitos sites de conteúdo rico.

Vou discutir a estranheza antes de entrar em detalhes:

  • A alternância entre o Windows 7 de inicialização nativa e o modo VM acionou o aviso do Windows de que minha cópia do Windows não era genuína. Dependendo da sua licença, a MS pode considerar isso uma violação de licença instalando em duas peças de hardware. Eu também precisava "reparar" minha instalação porque muitos dos drivers de nível inferior são diferentes para o hardware real e o "hardware" da VM.

  • Sempre que o Windows Update era executado (ou qualquer outra operação de E / S de disco grande), meu disco rígido era esmagado sob carga e tudo nas duas máquinas ficava lento. Mover cada sistema operacional para seu próprio disco rígido dedicado corrigiu esse problema muito bem; o uso de uma unidade de estado sólido também teria resolvido o problema.

  • Por alguma razão, o Ubuntu ocasionalmente não gostava de acordar após a suspensão (talvez 20% do tempo), o que equivalia a um desligamento intenso da minha VM do Windows. Como resultado, eu desligava a VM todas as noites antes de suspender o host.

  • Eu tive que tomar muito cuidado para nunca tentar montar a partição do Windows no Linux para evitar possível corrupção / perda de dados. Eu rapidamente adicionei uma regra do udev para evitar isso.

Tudo bem, se isso não parecer muito ruim, eis os detalhes: A referência mais útil que encontrei para fazer isso é este blog: http://www.rajatarya.com/website/taming-windows-virtualbox-vm . Aqui estão as etapas resumidas:

  • RTFM. Sério. Você usará comandos que podem corromper seu sistema de arquivos, se isso for feito errado.

  • Encontre as partições.

  • Altere as permissões para suas partições (como alternativa, você pode inicializar sua VM usando o sudo, mas todos os arquivos criados na unidade compartilhada host / convidado pertencerão à raiz).

  • Crie um MBR para que o convidado não tente usar o carregador de inicialização normal.

  • Use um comando interno do VirtualBox para criar a imagem vmdk a ser usada para a VM.

  • Crie a VM. Use o vmdk que você acabou de criar.

  • Inicialize e repare sua instalação.

Eu esperaria encontrar muitos dos mesmos problemas usando um host do Windows, mas o Linux provavelmente lidaria com o hardware diferente de maneira mais elegante. Realmente pode ser mais fácil usar uma partição compartilhada / home (e talvez / opt) e ter apenas partições raiz diferentes para as máquinas nativas e de convidado.


Eu tenho adotado a abordagem de VMs em Macs há anos e acho que mesmo um SSD não funciona sozinho. Você precisa separar o host e o convidado em unidades totalmente diferentes para evitar que o sistema se torne vinculado à E / S. Embora um SSD não melhorar as coisas que não é nada comparado ao uso de uma segunda unidade (e se eles são ambos os SSDs você está voando!)
Keith Jackson

12

Geralmente, faço o oposto: meu sistema doméstico é uma máquina com Windows 7 e eu executo vários tipos de Linux como VMs. Sendo que o Linux pode funcionar muito bem com recursos limitados, isso funciona para mim, mesmo que eu tenha apenas 4 GB de RAM (lembre-se de que isso significa que eu executo uma única VM por vez e geralmente dou 1024 MB de RAM no máximo para manter a abundância para Windows).

Seus 8 GB de RAM devem permitir que você execute uma VM do Windows com bastante facilidade. Penso que a única grande questão aqui é o tipo de resultados que você deseja medir para o seu desenvolvimento. Eu hesitaria em confiar em qualquer métrica de desempenho / taxa de transferência para itens que você desenvolver em uma VM (a menos que seja implantada em um ambiente de VM semelhante com as mesmas especificações em todos os aspectos). Caso contrário, você deve estar pronto.

E para tocar nos comentários de outro segmento, naturalmente, se você souber que estará desenvolvendo aplicativos que requerem uma grande quantidade de recursos, a otimização para esse fim seria o caminho a seguir (portanto, nesses casos, a inicialização dupla certamente preferível a usar VMs).

Usei o VMWare e o VirtualBox e também não vi nenhum desempenho real. Não cheguei ao ponto de comparar as VMs internas, simplesmente não notei nenhum impacto negativo de nenhuma das plataformas (ainda use o VirtualBox em casa e o VMware no trabalho).


Se o seu Linux manipula a execução de 1 GB de RAM em uma VM, isso significa que você pode executar facilmente o Windows em uma VM e atribuir também 3 GB de VRAM. No caso da questão, a mesma teoria se aplica. Mantenha 1 GB para o sistema operacional Linux básico e atribua 7 GB ao Windows. Realmente não importa qual é o SO básico e a VM. Contanto que você esteja executando os dois, estará compartilhando os mesmos recursos. Para mim, isso realmente não importa, os dois sistemas operacionais estão felizes em rodar em uma VM e, se você tiver os recursos para rodar os dois, é sempre bom poder alternar entre eles sem precisar reiniciar.
Jakke

Prefiro o VirtualBox para executar minhas VMs, porque vi sérios vazamentos de memória no VMware Player AND Workstation (versão 10). Estou falando de> 4 VMs em execução ao mesmo tempo, em um sistema com 32 GB de RAM. Os dois produtos da VW começam a usar todo o aríete até travar, enquanto o VB está funcionando por semanas sem problemas.
Jakke,

8

Depende de como você trabalha e como deseja que o sistema operacional se sinta .

Inicialização dupla significa reiniciar e inicializar, se você deseja alterar o sistema operacional, isso leva tempo . Como freelancer, você trabalha 8 horas seguidas com um projeto sem fazer "suas" coisas ("suas coisas" seriam você na inicialização do linux).

Se você trabalha 8 horas seguidas no Windows e passa o resto do dia no Linux, use a inicialização dupla. Se você trabalha 30min e depois quer fazer algo no Linux, mude para trabalhar novamente por 3 horas, depois para o linux novamente etc. Então eu escolheria VM.

Se não tiver certeza, faça as duas coisas. Inicialização dupla e quando no Windows, execute uma VM. Você verá uma clara diferença entre os dois e preferirá um sobre o outro.

Pessoalmente, uso apenas uma vm para testar novos discos Linux e, às vezes, um servidor falso quando devloping (poder estragar uma vm é inestimável e muito menos complicado do que fazê-lo no seu disco rígido real). A VM também fica atrasada e se sente menos responsiva, preciso que meu sistema operacional se sinta responsivo e suave, a VM não possui nessa área. Então eu prefiro dual boot.

Há também um problema no compartilhamento de arquivos. É mais trabalho compartilhar em uma inicialização dupla (imagine editar um arquivo na inicialização do Windows e depois inicializar no Linux, apenas para perceber que você perdeu uma linha e precisa reiniciar o Windows, o pesadelo!), Onde em uma VM você pode usar NFS ou samba para compartilhar arquivos entre os sistemas operacionais em tempo real, sem problemas.

Também sobre o suficiente ram como Aboba disse, lixo eu digo. Eu corro 4gb e uma VM no Windows8. Lembre-se de quais recursos o seu projeto precisa.


Sobre o compartilhamento de arquivos: Eu realmente, realmente, realmente espero que você tenha tudo em que trabalha sob controle de origem; nesse caso, o ponto se torna discutível. As coisas que você ainda deseja compartilhar entre o Windows e o Linux (porque .. eu não sei) simplesmente entram em uma partição NTFS - que pode ser lida e gravada pelos dois sistemas operacionais.
Voo

GIT 4 vida ofc! Eu faço muita programação privada, então não preciso do git para isso (eu sei que sei que é uma boa prática, mas sou preguiçoso). Sobre o NFTS, era exatamente o que eu estava dizendo! no entanto, a inicialização entre os sistemas operacionais leva tempo. E em uma vm os dois arquivos estão disponíveis em tempo real!
Karl Morrison

Minha partição Ubuntu monta automaticamente todas as partições do Windows, portanto, pelo menos, acesse o sistema de arquivos / arquivos do Windows não deve ser problema. Também são softwares de terceiros para montar partições EXT3 / 4 no Windows.
kuldeep.kamboj

Outra consideração é se você deseja fazer o desenvolvimento do Windows Phone. Se for esse o caso, você não poderá executar o Visual Studio em um ambiente virtual, pois os emuladores WP são eles próprios VMs Hyper-V. Você pode executar o Windows 8 com o cliente Hyper-V habilitado, Linux em uma VM e ainda assim ter acesso aos emuladores para o desenvolvimento do WP.
rjrapson

5

Ou como está isso? Você está interessado em .net / C #, então por que não usar o Mono no linux? Sua plataforma cruzada no sentido java é.


Exatamente meus pensamentos - eu brinquei em criar um jogo C # Othello simples de janela única no Visual studio, e ele funcionou perfeitamente ao importar o projeto e rodar no MonoDevelop.
NoBugs

3
Como uma ressalva, o Mono não oferece suporte a projetos WPF. Portanto, se o OP estiver buscando desenvolver aplicativos WPF, isso não funcionará. Além disso, eu era um grande fã de Mono, mas desde o abandono do projeto pela Novell e a escolha de Xamarin em lidar com o novo estado de coisas, sou um pouco cauteloso em investir mais esforços nele.
Boluc Papuccuoglu 26/06

1
Eu considerei usar o mono e definitivamente o testarei. Mas pode haver problemas quando outros membros da equipe usam o Visual Studio?
Codeape 26/06

Você realmente perderia a diversão do .NET se não estivesse usando o Visual Studio.
demonkoryu

3
@codeape Há muitos recursos e bibliotecas não suportados no Mono; isso provavelmente não é uma opção séria se seu cliente não estiver especificamente interessado em segmentar o Mono.
Casey

4

Pessoalmente, tive muitas experiências positivas tomando a metade do caminho, use um hipervisor como o Xen, para que você possa ter o Linux e o Windows executando sob um hipervisor de micro-kernel leve, nem sofrer um desempenho significativo e essa configuração é muito mais flexível , permitindo realocar facilmente recursos entre os dois a qualquer momento.

Isso quase coincide com a configuração dos seus sonhos mencionada, pois você pode inicializar ou desligar os dois sistemas operacionais de maneira independente a qualquer momento para realocar recursos para o outro e você não poderá perceber nenhum impacto no desempenho (na realidade, pode ser uma fração um pouco mais lenta em alguns casos, mas você não notará isso, a menos que esteja comparando especificamente para testar isso).

O único problema é que certos recursos exigem que sua CPU ofereça suporte à visualização, no entanto, todo i7 suporta (portanto), portanto isso não deve ser um problema para você.

EDITAR:

O Xen contém seu próprio microkernel, o Debian não é necessário para executá-lo, a única razão pela qual um sistema linux seria necessário para reconfigurar o Xen, pois o programa de configuração é um programa linux que você executa em um dos convidados (guest é o termo que o Xen usa para significar uma VM). Você pode ter apenas Linux, apenas Windows ou ambos em execução a qualquer momento, mas precisará executar o Linux para definir as configurações do Xen, por isso é aconselhável deixar um pequeno Linux em execução em segundo plano para fazer isso quando necessário.

O hardware pode ser tratado de várias maneiras, o Xen fornece um conjunto de dispositivos virtuais que permitem que um pedaço de hardware seja usado por vários convidados ao mesmo tempo, como placas de rede e placas de som, etc.

Para hardware que não funciona dessa maneira ou é necessário apenas por um convidado de cada vez que o xen possui dispositivos de passagem, isso significa que você pode selecionar e escolher a qualquer momento que o convidado tem acesso direto à peça de hardware e pode alterná-lo a qualquer momento Tempo. Isso pode ser feito para fornecer a um convidado específico o verdadeiro acesso à placa de vídeo, se você precisar renderizar acelerada em alta velocidade sem sobrecarga de virtualização .

Também é possível ter um convidado usando a placa de vídeo diretamente no modo de passagem, como explicado acima, mas ainda assim ver outros usando um protocolo local semelhante ao VNC que faz com que a tela de outros convidados apareça nas janelas (pense em caixa virtual ou área de trabalho remota) enquanto um tem controle direto da placa gráfica; ou, é claro, você pode simplesmente alternar entre as telas dos convidados, oferecendo um acesso direto por vez.

Ao contrário do que você pensa sobre a eficiência dessa configuração, é de fato uma das poucas maneiras de executar os dois sistemas operacionais ao mesmo tempo, mantendo um desempenho nativo eficaz em ambos; se você pesquisar no Google, verá que muitos tiveram sucesso usando essa configuração para executar uma máquina de jogos de alto desempenho ou outros sistemas exigentes.


Você pode recomendar algum howto / guia para configurar tudo como você mencionou? Eu quero ter um sistema gentoo linux / win7.
Gene Pavlovsky

3

De acordo com a minha experiência (eu também trabalho em aplicativos .net enquanto teste coisas legais e resolva problemas no Linux), a inicialização dupla será sua melhor aposta.

Como outros já apontaram, o uso de uma VM parece lento e sem resposta às vezes, o que pode ser uma dor.

Mais uma coisa que gostaria de salientar que leva o seu tempo, tente executar uma VM e verifique se você está confortável com ela.

Quanto à ordem
1) instale primeiro o Windows e depois o Linux (preferido)
2) Instale o Linux primeiro e depois o Windows (é necessário reinstalar o gerenciador de inicialização)

Mais uma coisa que gostaria de acrescentar é que, para pequenos projetos .Net, você pode usar até linux usando mono, portanto, não há necessidade de alternar entre janelas do linux.


1

Estou desenvolvendo muito o Linux / Visual Studio há mais de um ano, começando com o Visual Studio e migrando para o Linux ao longo do tempo (eu gosto do apt, zsh e vim!).

Comecei com o Windows hospedando o Ubuntu no VMWare Player, que funcionou razoavelmente bem, certamente ótimo se você estiver desenvolvendo principalmente o Visual Studio e apenas ocasionalmente precisar de algum pacote somente Linux ou qualquer outra coisa. Com o tempo, descobri que queria que meu trabalho estivesse no ambiente linux com mais frequência e a integração da VM tinha alguns pontos problemáticos, então ...

Como mudei para o desenvolvimento principalmente de linux (muitos AS3 no IntelliJ e alguns nós + python) com apenas uma necessidade ocasional de Windows (site ASP.NET), mudei isso para o Ubuntu que hospedava um VirtualBox (usando um disk2vhd -> .vdi do meu disco antigo do Windows). Depois de uma boa quantidade de mexericos, estou bastante satisfeito com isso, considerando a divisão de trabalho que geralmente tenho, mas se você estiver realizando uma quantidade séria de Visual Studio, provavelmente desejará que o Windows hospede o Linux, o VirtualBox ou o VMWare Player devem ficar bem.

Devo observar alguns pontos problemáticos: com os drivers de vídeo padrão Ubuntu 14.04 AMD, a aceleração 3D do VirtualBox torna o Visual Studio ~ 10-100x mais lento, portanto, desative a aceleração à custa de alguma lentidão; e você realmente quer rodar em um SSD)


2
Só de notar que as respostas dizendo "Você não tem memória RAM suficiente" são bastante loucas para mim: o VS em si é de 32 bits e não pode usar mais de 4 GB. Você pode ter alguma lentidão se estiver executando edições completas do IIS com o SQL Server, mas as versões normais do Express devem estar corretas. O SSD é muito mais importante para o desempenho.
Simon Buchan
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.