Προς το περιεχόμενο

Dual boot, το ένα σε VM με host Linux (grub?)


Μετάβαση στην απάντηση Απαντήθηκε από nikolaos_,

Προτεινόμενες αναρτήσεις

Δημοσ.

Λοιπόν, έχω δυο Linux συστήματα στο ίδιο μηχάνημα. Προέκυψε από παλιά, είχε χαλάσει ένα παλιό μηχάνημα με Linux Mint (παλιά έκδοση) και τοποθέτησα το δίσκο του παλιού στο καινούργιο που έχω τώρα, πάλι με Linux Mint. Στην εκκίνηση το grub βρίσκει και το καινούργιο και το παλιό και βγάζει το μενού ποιο θέλω να ξεκινήσω (κάποιο grub-update πρέπει να είχα τρέξει όταν είχα κάνει την μεταφορά του δίσκου και τα είχε βρει). Με το μενού του grub στην εκκίνηση φυσικά εκκινεί είτε το ένα, είτε το άλλο, ανάλογα τι θα διαλέξω.

Στο καινούργιο έχω ήδη KVM Virtual Machine manager (τρέχω κάτι παλιά windows 7 μάλιστα) και αναρωτήθηκα, αν είναι δυνατόν να φτιάξω μια ακόμη εικονική μηχανή (VM) που να τρέχει το παλιό Linux με host το καινούργιο φυσικά. Δηλαδή στη VM να ανήκει ο παλιός δίσκος σαν physical. Και να γλιτώσω από το dual boot, να βγαίνω από το ένα να μπαίνω στο άλλο.

Ένα στοιχείο που μπορεί να περιπλέκει ή και όχι, είναι ότι οι δίσκοι των Linux έχουν LVM partitions. Έτσι η VM θα πρέπει να "βλέπει" τουλάχιστον το LVM root partition που έχει μέσα ο παλιός δίσκος.

Από το λίγο ψάξιμο που έκανα είδα ότι μπορεί να χρειαστεί ένα μικρό virtual disk στη VM για να χρησιμεύσει σαν boot partition της, και όχι να μπλέξω με το physical boot partition του host (καινούργιου) μηχανήματος. Δεν είναι πρόβλημα αλλά δεν ξέρω πώς να κάνω σωστά την δουλειά, ώστε το virtual boot partition να προσαρτήσει το LVM root partition και να ξεκινήσει το Linux μέσα στη VM.

Αν δεν σας μπέρδεψα και αν το έχετε, θέλω τις ιδέες σας. Νομίζω πως έχει να κάνει περισσότερο με το πώς να εγκαταστήσω σωστά το grub.

Δημοσ.
59 λεπτά πριν, nikolaos_ είπε

Λοιπόν, έχω δυο Linux συστήματα στο ίδιο μηχάνημα. Προέκυψε από παλιά, είχε χαλάσει ένα παλιό μηχάνημα με Linux Mint (παλιά έκδοση) και τοποθέτησα το δίσκο του παλιού στο καινούργιο που έχω τώρα, πάλι με Linux Mint. Στην εκκίνηση το grub βρίσκει και το καινούργιο και το παλιό και βγάζει το μενού ποιο θέλω να ξεκινήσω (κάποιο grub-update πρέπει να είχα τρέξει όταν είχα κάνει την μεταφορά του δίσκου και τα είχε βρει). Με το μενού του grub στην εκκίνηση φυσικά εκκινεί είτε το ένα, είτε το άλλο, ανάλογα τι θα διαλέξω.

Στο καινούργιο έχω ήδη KVM Virtual Machine manager (τρέχω κάτι παλιά windows 7 μάλιστα) και αναρωτήθηκα, αν είναι δυνατόν να φτιάξω μια ακόμη εικονική μηχανή (VM) που να τρέχει το παλιό Linux με host το καινούργιο φυσικά. Δηλαδή στη VM να ανήκει ο παλιός δίσκος σαν physical. Και να γλιτώσω από το dual boot, να βγαίνω από το ένα να μπαίνω στο άλλο.

Ένα στοιχείο που μπορεί να περιπλέκει ή και όχι, είναι ότι οι δίσκοι των Linux έχουν LVM partitions. Έτσι η VM θα πρέπει να "βλέπει" τουλάχιστον το LVM root partition που έχει μέσα ο παλιός δίσκος.

Από το λίγο ψάξιμο που έκανα είδα ότι μπορεί να χρειαστεί ένα μικρό virtual disk στη VM για να χρησιμεύσει σαν boot partition της, και όχι να μπλέξω με το physical boot partition του host (καινούργιου) μηχανήματος. Δεν είναι πρόβλημα αλλά δεν ξέρω πώς να κάνω σωστά την δουλειά, ώστε το virtual boot partition να προσαρτήσει το LVM root partition και να ξεκινήσει το Linux μέσα στη VM.

Αν δεν σας μπέρδεψα και αν το έχετε, θέλω τις ιδέες σας. Νομίζω πως έχει να κάνει περισσότερο με το πώς να εγκαταστήσω σωστά το grub.

Αν κατάλαβα καλά θες να μετατρέψεις τον δεύτερο δίσκο σε VM?

Δεν ξέρω μπερδεύτηκα λίγο με το grub το σχέση έχει αν όντως θες να κάνεις αυτό

Αν κατάλαβα σωστά είτε θα μετατρέψεις τον δίσκο σε image , επειδή το είχα ψάξει σε κάποια φάση είτε με πληρωμένο VMware είτε με utility του virtual box ( disk2hd νομίζω)

Αλλιώς μπορείς να πάρεις ένα back up , να στήσεις την διανομή σε VM και να την κάνεις restore μέσα στο VM

Αν δεν κατάλαβα καλά συγνώμη 

Δημοσ.

Ακόμη κι αν ήθελα να αντιγράψω 500GB δίσκου physical σε αρχείο image, μέσα στον άλλο δίσκο του host, δεν αξίζει. Ούτε και το /dev/vg_mint20/lv_root που έχει κάπου 50 GB από τα 500. Η VM θα πρέπει να βλέπει το partition αυτό όπως είναι, ένα LVM partition πάνω σε physical δίσκο με το root του Linux. Αυτό που σκεφτόμουν είναι να κατασκευάσω ένα VM με λίγα GB (αν όχι MB) image δίσκου, με ένα boot partition (virtual) το οποίο θα κάνει όταν ξεκινά mount το LVM partition που ανέφερα και θα συνεχίζει από εκείνο την εκκίνηση.

Δημοσ. (επεξεργασμένο)

Στο VMware μπορεις να χρησιμοποιήσεις ένα φυσικό HDD. Θεωρητικά: αρχικά θα πρέπει να φτιάξεις έναν virtual disk στον οποίο θα εγκαταστήσεις το Grub. Οπότε φτιάχνεις virtual machine για το linux mint (on vm creation choose ubuntu 64-bit config for guest) και έπειτα αφού την δημιουργήσεις θα κάνεις edit στα virtual machine settings (της συγκεκριμένης vm). Μετά πας στο Hard Disk πατάς κάτω κάτω στο add και προσθέτεις τον φυσικό δίσκο που θέλεις. Αυτά θεωρητικά γίνονται, τώρα αν θα φορτώσει με την πρώτη δεν ξέρω.

Μπορείς να εγκαταστήσεις το grub, αφου πρώτα βάλεις στην vm και τον φυσικό δίσκο.

 

 

 

 

Επεξ/σία από duffyduck
Δημοσ. (επεξεργασμένο)
On 30/10/2023 at 06:47, nikolaos_ said:

Ακόμη κι αν ήθελα να αντιγράψω 500GB δίσκου physical σε αρχείο image, μέσα στον άλλο δίσκο του host, δεν αξίζει. Ούτε και το /dev/vg_mint20/lv_root που έχει κάπου 50 GB από τα 500. Η VM θα πρέπει να βλέπει το partition αυτό όπως είναι, ένα LVM partition πάνω σε physical δίσκο με το root του Linux. Αυτό που σκεφτόμουν είναι να κατασκευάσω ένα VM με λίγα GB (αν όχι MB) image δίσκου, με ένα boot partition (virtual) το οποίο θα κάνει όταν ξεκινά mount το LVM partition που ανέφερα και θα συνεχίζει από εκείνο την εκκίνηση.

κοιτα οτι γινεται ναι

αφου φτιαξεις το vm μπες και δωσε path ολο τον ssd με το ονομα του απο τον host , δοκιμαζεις και βλεπεις

image.png.ccde5b7c4fe109ce89ab837e9cb2da4e.png

Επεξ/σία από Aris_
Δημοσ. (επεξεργασμένο)

Λοιπόν μετά από λίγο διάβασμα, ξεκίνησα μια πιο αυτοσχέδια διαδικασία που με πήγε κάπου.

Όπως είπα και στο πρώτο ποστ, στο φυσικό σύστημα έχω δυο Linux, ένα Mint και ένα παλιότερο Mint. Το δεύτερο κατοικοεδρεύει σε ένα LVM partition, πιο συγκεκριμένα:

lsblk /dev/sda
MAJ:MIN  NAME                  SIZE TYPE MODEL                   KNAME     LABEL                       FSTYPE      MOUNTPOINT
   8:0   sda                 931,5G disk TOSHIBA DT0             sda                                               
   8:1   └─sda1              927,5G part                         sda1                                  LVM2_member 
 253:2     ├─vg_mint-lv_root   400G lvm                          dm-2      old_mint_root               ext4        /media/nik/old_mint_root
 253:4     └─vg_mint-lv_home 527,3G lvm                          dm-4      old_mint_home               ext4        /media/nik/old_mint_home

Ο σκοπός μου είναι να κάνω boot μέσα σε VM (qemu) το σύστημα που βρίσκεται στο /dev/sda1 με KVM host το Linux Mint που τρέχω τώρα.

Παρατηρήστε ότι το /dev/sda1 δεν έχει MBR. Αυτό επειδή ουσιαστικά τα δυο logical volumes του εικονικού volume group αντιγράφηκαν σε άλλους physical δίσκους από εκείνους στους οποίους είχαν κατασκευαστεί.

Επομένως χρειαζόμουν ένα εικονικό δίσκο MBR. Εκτελώ τα ακόλουθα:

dd if=/dev/zero of=disk.img bs=1M count=512
sudo gdisk disk.img

Command (? for help): o
This option deletes all partitions and creates a new protective MBR.
Proceed? (Y/N): y

Command (? for help): n
Partition number (1-128, default 1): 
First sector (34-262110, default = 2048) or {+-}size{KMGTP}: 
Last sector (2048-262110, default = 262110) or {+-}size{KMGTP}: +1M
Current type is 8300 (Linux filesystem)
Hex code or GUID (L to show codes, Enter = 8300): ef02
Changed type of partition to 'BIOS boot partition'

Επειδή όμως έκανα πολλά trial and error, τα νούμερα που έχω επικολλήσει, είναι ενδεικτικά. Γενικά όλα τα στάδια έχουν περάσει από βάσανο.

Βλέπετε όμως ότι έφτιαξα ένα disk.img 512MB που το φορμάρω σαν MBR δίσκο με 2 partitions:

Command (? for help): p
Disk disk.img: 1048576 sectors, 512.0 MiB
Sector size (logical): 512 bytes
Disk identifier (GUID): 10EF41AA-2865-47FF-BBAB-FB94716A290C
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 1048542
Partitions will be aligned on 2048-sector boundaries
Total free space is 2014 sectors (1007.0 KiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048            4095   1024.0 KiB  EF02  BIOS boot partition
   2            4096         1048542   510.0 MiB   8300  Linux filesystem

Αντί για kpartx πήρα την προσέγγιση με losetup:

sudo losetup /dev/loop0 disk.img
sudo losetup --offset $((4096*512)) --sizelimit $(((1048542-4096+1)*512)) /dev/loop1 disk.img
sudo mkdosfs -F 32 /dev/loop1
sudo mkdir /mnt/drive
sudo mount /dev/loop1 /mnt/drive

(Το δεύτερο Linux filesystem partition δεν βρήκα να το χρειάζομαι, αλλά ακόμη δεν τέλειωσα με τις δοκιμές μου.)

Με αυτό πετυχαίνω να έχω ένα εικονικό boot partition για το παλιό Linux. Κάνω compile και εγκατάσταση του GRUB 2.06 μέσα (κατεβάζω, ./configure, make κλπ.) στο boot partition.

./grub-install --target=i386-pc --directory=grub-core --root-directory=/mnt/drive/ --modules="normal part_msdos part_gpt multiboot" --no-floppy /dev/loop0
Installing for i386-pc platform.
./grub-install: warning: cannot open directory `/usr/local/share/locale': No such file or directory.

Installation finished. No error reported.

Οπότε τώρα είχα την μισή εικονική έτοιμη:

qemu-system-x86_64 -drive format=raw,file=disk.img

image.png.d290367a83ee0e080407a9cfc4210c62.png

Φυσικά δεν είχα καμία εικόνα Linux στο άλλο partition. Έκανα copy από το /boot στο /dev/vg_mint/lv_root, δηλαδή

sudo cp /media/nik/old_mint_root/boot/* /mnt/drive/boot

Επίτηδες μόνο το /boot, για να μην επικαλύψω το /boot/grub, αλλά τέλοσπάντων δεν πετυχαίνουν τα μπουταρίσματα από εκεί, γιατί πρώτα πρέπει να βρω τρόπο να κάνει mount το lv_root.

Έτσι κατέφυγα στο επόμενο τέχνασμα:

sudo modprobe nbd
sudo qemu-nbd --connect=/dev/nbd0 /dev/vg_mint/lv_root
sudo chmod o+rw /dev/nbd0

Το τελευταίο για να μην τρέχω με sudo το Qemu:

qemu-system-x86_64 -m 2G -drive format=raw,file=disk.img -drive file=/dev/nbd0

image.png.8c9c4b943edfe275bb1744d17821e43b.png

Τα επόμενα στο grub prompt τα έχω γράψει εγώ φυσικά.

Το (hd0, gpt2) είναι το boot από το εικονικό disk.img ενώ το (hd1) είναι το /dev/nbd0 δηλαδή το /dev/vg_mint/lv_root

Τώρα το παλιό mint έτυχε να έχει τις εικόνες vmlinuz και initrd.img μέσα στο lv_root. Δεν θα χάσω και τίποτε, σκέφτηκα, να κάνω από εκείνο την εκκίνηση:

image.png.9b2efc1dd74f7eeb435bb60b5c6d430f.png

Όχι μόνο δεν έχασα, αλλά πήγε και να μπουτάρει. Με πέταξε όμως σε ένα initramfs prompt και δεν έχω καταλάβει πόσο προχώρησε η διαδικασία εκκίνησης στον εικονικό δίσκο lv_root. Επιπλέον, δεν ξέρω τι να κάνω στο "BusyBox" με το initramfs prompt προκειμένου να βγω στο παλιό mint (γραφικά κλπ.) Ίσως φταίει ότι δεν καθόρισα γραφικά στη γραμμή εντολών του qemu. Ίσως πρέπει να σκαρώσω πιο σοβαρά μια εικονική μηχανή στο Virtual Machine Manager...

Περιμένω ένα feedback αν καταλαβαίνει κάποιος τι έχω κάνει και πόσο έχω προχωρήσει εκεί που θέλω... Θα ακολουθήσει άλλος γύρος δοκιμών προσεχώς.

Ευχαριστώ!

 

image.png

Επεξ/σία από nikolaos_
  • Λύση
Δημοσ.

Τι πέτυχε τελικά:

sudo chmod o+rw /dev/mapper/vg_mint-lv_root
sudo chmod o+rw /dev/mapper/vg_mint-lv_home
qemu-system-x86_64 -m 2G -drive format=raw,file=disk.img -drive format=raw,file=/dev/mapper/vg_mint-lv_root -drive format=raw,file=/dev/mapper/vg_mint-lv_home -boot c

Στο grub prompt ο φάκελος /boot αντιστοιχεί στο περιεχόμενο στο αρχείο disk.img

grub> linux /boot/vmlinuz-4.19.2compiled root=/dev/sdb
grub> initrd /boot/initrd.img-4.19.2compiled
grub> boot

Αυτό που δεν είχα καταλάβει (και το κατάλαβα εξερευνώντας στο initramfs prompt τον φάκελο /dev) ήταν αυτό στην πρώτη γραμμή, ότι το /dev/mapper/vg_mint-lv_root αντιστοιχεί στο /dev/sdb μέσα στην εικονική μηχανή. Οπότε με το root=/dev/sdb (δεν έχει sdb1) είναι mountable και μπόρεσε να προχωρήσει η εκκίνηση.

image.png.40a029fb66b6ced4810ed15c26d07f83.png

Αυτό που χρειάζομαι τώρα είναι "χτένισμα" να βάλω δηλαδή το GRUB σωστά στον disk.img να έχει κατάλληλο vmlinuz και intird.img, μενού, κλπ.

Μήπως έχετε κανένα link για το πώς γίνεται το update στο disk.img, δηλαδή χωρίς να πειράξω τους άλλους /boot ?

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...