Programmatore dual-boot o macchina virtuale per Linux che sviluppa un po 'di Visual Studio?


26

Lo scenario:

  • Sono uno sviluppatore di software freelance che si sviluppa principalmente su Linux (Python, MySQL, MongoDB ecc.)
  • Il mio computer di lavoro è un laptop Lenovo con un processore i7 e 8 GB di RAM. Big HD + 128 GB SSD. Il sistema operativo è Ubuntu Linux

Potrei ottenere alcuni progetti .NET / C # nel prossimo futuro, quindi sto cercando alcune indicazioni su quanto segue:

  • Dovrei cercare una soluzione a doppio avvio o utilizzare macchine virtuali per roba di Windows?
  • Se eseguo il dual-boot: qual è la sequenza di installazione consigliata? Prima Windows o Linux prima? (Sto cercando una reinstallazione completa di Ubuntu per ottenere l'ultimo LTS in modo da poter iniziare a installare tutto nuovo)
  • Se utilizzo VM: in che modo VMWare Workstation e VirtualBox confrontano le prestazioni?
  • La configurazione dei miei sogni sarebbe probabilmente la seguente:
    • Doppio avvio
    • Ma se avvio in Linux, posso avviare la partizione di Windows come una macchina virtuale. È possibile?
    • E / o: se avvio in Windows, posso avviare la partizione Linux come una macchina virtuale. È possibile?

5
Dovresti sempre fare Windows prima di Ubuntu poiché vuoi che Grub sostituisca l'avvio a catena con il Bootloader di Windows. Ci sono diverse dozzine di domande su come farlo. Le decisioni sulle prestazioni dovrebbero essere prese tu stesso
Ramhound,

Visual Studio è un'applicazione intensa e può o non può funzionare abbastanza bene nel tuo ambiente virtuale.
Frank Thomas,

Risposte:


12

Altri hanno coperto il resto della tua domanda, ma vedo che hanno lasciato questa parte senza indirizzo:

Ma se avvio in Linux, posso avviare la partizione di Windows come una macchina virtuale. È possibile? E / o: se avvio in Windows, posso avviare la partizione Linux come una macchina virtuale. È possibile?

La risposta breve è sì.

La lunga risposta è sì, ma con un numero di avvertenze e implicazioni.

Fino a gennaio (quando abbiamo ottenuto nuove macchine), avevo il mio computer di lavoro configurato per il dual boot o per usare Linux come host per una VM Windows 7 che accedeva direttamente alla partizione Windows. Non mi sono mai preoccupato di provare a utilizzare Windows come host per una macchina virtuale Linux a disco diretto, ma è anche possibile. Il mio computer utilizzava BIOS / MBR legacy, non sono sicuro di come procedere se si utilizza UEFI / GPT.

Ho scelto VirtualBox per farlo, ma da quello che ho capito dovrebbe essere possibile anche con VMWare.

Le prestazioni erano perfettamente accettabili per i miei scopi; Ho dato il core della CPU di Windows 1, 2 GB di memoria, 1 monitor e non ricordo quanta memoria video. La VM era in grado di riprodurre video e lavorare con la mia applicazione GUI Java e molti siti Web ricchi di contenuti.

Discuterò della stranezza prima di entrare nei dettagli:

  • Il passaggio tra avvio nativo e modalità VM Windows 7 ha attivato l'avviso di Windows che la mia copia di Windows non era autentica. A seconda della licenza, MS può considerare questa violazione della licenza installandola su due componenti hardware. Avevo anche bisogno di "riparare" la mia installazione perché molti dei driver di basso livello sono diversi per l'hardware reale e l'hardware "VM".

  • Ogni volta che Windows Update veniva eseguito (o qualsiasi altra operazione di I / O su disco di grandi dimensioni), il mio disco rigido veniva schiacciato sotto carico e tutto su entrambe le macchine diventava lento. Lo spostamento di ciascun sistema operativo sul proprio disco rigido dedicato ha risolto il problema in modo corretto; l'utilizzo di un'unità a stato solido avrebbe risolto anche il problema.

  • Per qualche ragione, a Ubuntu di tanto in tanto non piaceva svegliarsi dopo aver sospeso (forse il 20% delle volte), il che equivaleva a uno spegnimento forzato per la mia macchina virtuale Windows. Di conseguenza spegnevo la VM ogni sera prima di sospendere l'host.

  • Ho dovuto stare molto attento a non tentare mai di montare la partizione Windows in Linux per prevenire possibili danni / perdite di dati. Ho rapidamente aggiunto una regola udev per impedirlo.

Bene, se ciò non suona male, ecco i dettagli: Il riferimento più utile che ho trovato per fare questo è questo blog: http://www.rajatarya.com/website/taming-windows-virtualbox-vm . Ecco i passaggi riassunti:

  • RTFM. Veramente. Utilizzerai comandi che potrebbero danneggiare il tuo file system se fatto in modo errato.

  • Trova le partizioni.

  • Modifica le autorizzazioni per le tue partizioni (in alternativa puoi avviare la VM usando sudo, ma tutti i file creati sull'unità condivisa host / guest saranno di proprietà di root).

  • Crea un MBR in modo che l'ospite non tenti di utilizzare il normale bootloader.

  • Utilizzare un comando interno VirtualBox per creare l'immagine vmdk da utilizzare per la macchina virtuale.

  • Crea la VM. Usa il vmdk che hai appena creato.

  • Avvia e ripara l'installazione.

Mi aspetterei di trovare molti degli stessi problemi usando un host Windows, ma probabilmente Linux gestirà il diverso hardware in modo più elegante. Potrebbe essere molto più semplice utilizzare una o più partizioni condivise / home (e forse / opt) e avere partizioni root differenti per le macchine native vs guest.


Ho adottato l'approccio VM su Mac per anni e trovo che anche un SSD non lo tagli da solo. È necessario separare l'host e il guest su unità totalmente diverse per evitare che entrambi i sistemi diventino associati all'I / O. Anche se un SSD migliora le cose non è niente rispetto all'utilizzo di una seconda unità (e se sono entrambi SSD stai volando!)
Keith Jackson,

12

Faccio l'opposto in generale, ovvero il mio sistema domestico è una macchina Windows 7 ed eseguo varie versioni di Linux come VM. Essendo come Linux può funzionare abbastanza bene con risorse limitate, questo funziona per me anche se ho solo 4 GB di RAM (intendiamoci, questo significa che eseguo una singola VM alla volta e in genere gli conferisco al massimo 1024 MB di RAM per mantenere un sacco per Windows).

I tuoi 8 GB di RAM dovrebbero permetterti di eseguire una VM Windows abbastanza facilmente. Penso che l'unica grande domanda qui sia il tipo di risultati che vorresti misurare per il tuo sviluppo. Non esiterei a fare affidamento su qualsiasi metrica di prestazioni / throughput per gli elementi sviluppati in una macchina virtuale (a meno che non venga distribuita in un ambiente VM simile con le stesse specifiche su tutta la linea). Altrimenti dovresti essere bravo ad andare.

E toccare i commenti in altri thread, naturalmente se stai sapendo che svilupperai applicazioni che richiedono una grande quantità di risorse, quindi l'ottimizzazione a tal fine sarebbe la strada da percorrere (quindi in quei casi il dual boot sarebbe sicuramente essere preferibile utilizzare le macchine virtuali).

Ho usato sia VMWare che VirtualBox, e non ho visto alcun vero colpo di prestazione usando neanche. Non sono andato al punto di fare il benchmarking delle VM all'interno, semplicemente non ho notato alcun impatto negativo da entrambe le piattaforme (uso ancora VirtualBox a casa e VMware al lavoro).


Se il tuo Linux gestisce in esecuzione su 1 GB di RAM in una VM, ciò significa che puoi facilmente eseguire Windows in una VM e assegnare anche 3 GB di VRAM. Nel caso della domanda, la stessa teoria va. Conservare 1 GB per il sistema operativo Linux di base e assegnare 7 GB a Windows. Non importa quale sia il sistema operativo di base e la macchina virtuale. Finché stai eseguendo entrambi, condividi le stesse risorse. Per me, non importa, entrambi i sistemi operativi sono felici di funzionare in una macchina virtuale e se hai le risorse per eseguirli entrambi, è sempre bello poter passare da uno all'altro senza riavviare.
Jakke,

Preferisco VirtualBox per eseguire le mie macchine virtuali, perché ho riscontrato gravi perdite di memoria in VMware Player AND Workstation (versione 10). Sto parlando di> 4 VM in esecuzione contemporaneamente, su un sistema con 32 GB di RAM. Entrambi i prodotti VW iniziano a utilizzare tutto il ram fino a quando non si blocca, mentre VB funziona felicemente per settimane senza problemi.
Jakke,

8

Dipende da come lavori e da come vuoi che il sistema operativo si senta .

Doppio avvio significa riavvio e avvio se si desidera modificare il sistema operativo, questo richiede tempo . Come freelance, lavori 8 ore di fila con un progetto senza fare le "tue" cose ("le tue cose" saresti tu sul tuo avvio di Linux).

Se lavori 8 ore di seguito in Windows e trascorri il resto della giornata in Linux, usa il dual boot. Se lavori 30 minuti e poi vuoi fare qualcosa in Linux, passa a lavorare di nuovo per 3 ore, poi di nuovo in Linux, ecc. Quindi sceglierei VM.

Se non si è sicuri, fare entrambe le cose. Doppio avvio e in Windows eseguono una macchina virtuale. Vedrai una netta differenza tra entrambi e preferirai l'uno all'altro.

Personalmente uso solo un vm per testare nuove dist di Linux e talvolta un server falso durante il devloping (essere in grado di rovinare un vm non ha prezzo e tanto meno fastidio che farlo sul tuo vero hard disk.). Anche la VM è in ritardo e si sente meno reattiva, ho bisogno che il mio sistema operativo si senta reattivo e fluido, la VM manca in quest'area. Quindi preferisco il dual boot.

C'è anche un problema quando si tratta di condividere file. È più lavoro da condividere su un doppio avvio (immagina di modificare un file all'avvio di Windows e di avviarlo in Linux solo per rendersi conto che hai perso una linea e devi riavviare in Windows, l'incubo!) Dove su un VM puoi usare NFS o samba per condividere file tra il sistema operativo in tempo reale, senza problemi.

Anche su ram non abbastanza come ha detto Aboba, dico spazzatura. Corro 4 GB e una macchina virtuale in Windows8. Ricorda però di quali risorse ha bisogno il tuo progetto.


Informazioni sulla condivisione di file: spero davvero, davvero, che tu abbia tutto ciò su cui lavori sotto il controllo del codice sorgente, nel qual caso il punto diventa discutibile. Le cose che vuoi ancora condividere tra Windows e Linux (perché ... non lo so) vanno solo su una partizione NTFS - che può essere letta e scritta da entrambi i sistemi operativi.
Voo,

GIT 4 life ofc! Faccio molta programmazione privata quindi non ho bisogno di git per questo (so di sapere che è una buona pratica ma sono pigro). Riguardo all'NFTS, era esattamente quello che stavo dicendo! tuttavia l'avvio tra i SO richiede tempo. E in un vm entrambi i file sono disponibili in tempo reale!
Karl Morrison,

La mia partizione Ubuntu monta automaticamente tutte le partizioni di Windows, quindi non dovrebbe essere un problema il file system / i file di Windows di accesso almeno. Inoltre sono software di terze parti per montare partizioni EXT3 / 4 su Windows.
kuldeep.kamboj,

Un'altra considerazione è se si desidera eseguire lo sviluppo di Windows Phone. In tal caso, non è possibile eseguire Visual Studio in un ambiente virtuale, poiché gli emulatori WP sono essi stessi macchine virtuali Hyper-V. Potresti eseguire Windows 8 con il client Hyper-V abilitato, Linux in una VM sotto quello e avere ancora accesso agli emulatori per lo sviluppo di WP.
rjrapson,

5

O come su questo. Sei interessato a .net / C #, quindi perché non usare Mono su Linux? La sua stessa piattaforma incrociata nel senso che Java è.


Esattamente i miei pensieri: ho giocato realizzando un semplice gioco C # Othello a finestra singola su Visual Studio, e ha funzionato perfettamente durante l'importazione del progetto e l'esecuzione su MonoDevelop.
NoBugs,

3
Come avvertimento, Mono non supporta i progetti WPF. Quindi, se l'OP sta cercando di sviluppare applicazioni WPF, ciò non funzionerà. Inoltre, ero un grande fan di Mono, ma dopo l'abbandono del progetto da parte di Novell e la scelta di Xamarin nel gestire il nuovo stato delle cose, sono un po 'cauto nell'investire più sforzi in esso.
Boluc Papuccuoglu,

1
Ho considerato l'uso del mono e lo proverò sicuramente. Ma potrebbero esserci problemi quando altri membri del team usano Visual Studio?
codeape,

Ti mancherebbe molto il divertimento di .NET se non stai usando Visual Studio.
demonkoryu,

3
@codeape Ci sono molte funzionalità e librerie non supportate in Mono; questa probabilmente non è un'opzione seria se il tuo cliente non è specificamente interessato al targeting Mono.
Casey,

4

Personalmente ho avuto molte esperienze positive prendendo la casa a metà strada, usando un hypervisor come Xen puoi quindi avere sia Linux che Windows in esecuzione con un hypervisor micro-kernel leggero, né subire un significativo impatto sulle prestazioni e questa configurazione è molto più flessibile , consentendoti di riallocare facilmente le risorse tra i due in qualsiasi momento.

Questo corrisponde quasi alla configurazione dei tuoi sogni menzionata poiché puoi avviare o spegnere i due sistemi operativi in ​​qualsiasi momento in modo indipendente per riallocare le risorse all'altro e non sarai in grado di notare alcun impatto sulle prestazioni (in realtà potrebbe essere una frazione di un% più lento in alcuni casi, ma non lo noterai a meno che non esegua un benchmark specifico per testarlo).

L'unico problema è che alcune funzionalità richiedono che la CPU supporti la visualizzazione, tuttavia ogni i7 lo fa (afaik), quindi questo non dovrebbe essere un problema per te.

MODIFICARE:

Xen contiene il proprio microkernel, Debian non è necessario per eseguirlo, l'unica ragione per cui sarebbe necessario un sistema linux è riconfigurare Xen poiché il programma di configurazione è un programma linux che si esegue su uno degli ospiti (guest è il termine usato da Xen per indicare una VM). Puoi avere solo Linux, solo Windows o entrambi in esecuzione in qualsiasi momento, ma avrai bisogno di Linux in esecuzione per configurare le impostazioni di Xen, quindi è consigliabile lasciare un piccolo Linux in esecuzione in background per farlo quando necessario.

L'hardware può essere gestito in diversi modi, Xen fornisce una serie di dispositivi virtuali che consentono a un componente hardware di essere utilizzato da più ospiti contemporaneamente come schede di rete e schede audio, ecc.

Per l'hardware che non può funzionare in questo modo o è necessario solo a un guest alla volta, xen dispone di dispositivi pass-through, ciò significa che è possibile selezionare e scegliere in qualsiasi momento quale guest ha accesso diretto al componente hardware e può cambiarlo in qualsiasi tempo. Questo può essere fatto per dare a un ospite specifico un vero accesso alla scheda grafica se è necessario un rendering accelerato ad alta velocità senza alcun sovraccarico di virtualizzazione .

È anche possibile avere un ospite che utilizza direttamente la scheda grafica in modalità pass-through come spiegato sopra, ma è comunque possibile visualizzare gli altri utilizzando un protocollo VNC locale che fa apparire le schermate degli altri ospiti in Windows (pensare come una scatola virtuale o un desktop remoto) mentre uno ha il controllo diretto della scheda grafica; o, naturalmente, puoi semplicemente passare da una schermata degli ospiti all'altra con un accesso diretto alla volta.

Contrariamente a quanto si può presumere in merito all'efficienza di questa configurazione, in effetti è uno dei pochi modi per eseguire entrambi i sistemi operativi contemporaneamente mantenendo in modo efficace le prestazioni native in entrambi, se si fa un google si scopre che molti hanno avuto successo usando tale impostazione per eseguire una macchina da gioco ad alte prestazioni o altri sistemi impegnativi.


Puoi consigliarmi un howto / guida per impostare tutto come hai menzionato? Voglio avere un sistema gentoo linux / win7.
Gene Pavlovsky,

3

Secondo la mia esperienza (lavoro anche su app .Net mentre collaudo cose interessanti e risolvo problemi algo su Linux), il dual boot sarà la soluzione migliore.

Come altri hanno sottolineato, l'uso di una VM a volte sembra lento e non risponde, il che può essere una seccatura.

Un'altra cosa che vorrei sottolineare è che impiega il tuo tempo e prova a eseguire una VM e controlla se ti senti a tuo agio.

Per quanto riguarda l'ordine
1) installa prima Windows e poi Linux (preffered)
2) Installa prima Linux poi Windows (quindi devi reinstallare Bootloader)

Un'altra cosa che vorrei aggiungere è che per i piccoli progetti .Net è possibile utilizzare anche Linux usando mono, quindi non è necessario passare da Windows a Linux.


1

Faccio molto sviluppo di Linux / Visual Studio da poco più di un anno, a partire da Visual Studio e passando a Linux nel tempo (mi piacciono apt, zsh e vim!).

Ho iniziato con Windows che ospita Ubuntu in VMWare Player, che ha funzionato abbastanza bene, sicuramente eccezionale se stai principalmente facendo lo sviluppo di Visual Studio e semplicemente hai bisogno di qualche pacchetto solo Linux o altro. Nel corso del tempo ho scoperto che volevo che il mio lavoro fosse più spesso nell'ambiente Linux e che l'integrazione della VM avesse alcuni punti deboli, quindi ...

Mentre passavo principalmente allo sviluppo di Linux (un sacco di AS3 in IntelliJ e alcuni nodi + python) con solo occasionali necessità di Windows (sito ASP.NET), l'ho capovolto su Ubuntu ospitando un VirtualBox (usando un disk2vhd -> .vdi di il mio vecchio disco di Windows). Dopo una buona dose di armeggi, sono abbastanza contento di questo dato lo scontro di lavoro che faccio in genere, ma se stai facendo una quantità considerevole di Visual Studio probabilmente vuoi che Windows ospiti Linux, VirtualBox o VMWare Player dovrebbero andare bene.

Dovrei notare alcuni punti dolenti: con i driver video Ubuntu 14.04 AMD standard, l'accelerazione 3D di VirtualBox rende più lento Visual Studio ~ 10-100x, quindi disabilita l'accelerazione al costo di un po 'di lentezza; e vuoi davvero essere in esecuzione su un SSD)


2
Solo notare che le risposte che dicono "Non hai abbastanza RAM" mi sembra abbastanza folle: VS stesso è a 32 bit, quindi non può usare più di 4 GB. Potresti avere un po 'di lentezza se stai eseguendo le edizioni complete di IIS con SQL Server, ma le normali versioni Express di quelle dovrebbero andare bene. L'SSD è molto più importante per le prestazioni.
Simon Buchan,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.