Δημοσιεύτηκε: 17 Οκτ 2014, 19:38
από pc_magas
Πολλές φορές θα μας είναι χρήσιμο αν είχαμε ένα στικάκι που να είχε την δυνατότητα να μπορεί να εκκινεί από παραπάνω από μια διανομές linux. Εξάλλου την σήμερον ημέρα τα στικάκια ξεπερνάνε άνετα τα 2GB κρίμα να έχετε ένα τόσο μεγάλο στικάκι και να έχει ανεκμετάλλευτο χώρο :problem:.

Αυτό άνετα το πετυχαίνεται με διάφορες λύσεις αλλά εμείς θα σας δείξουμε την λύση που δεν θα θέλετε τίποτα εξτρά (πέραν ότι προσφέρει το σύστημα από τα προεπιλεγμένα αποθετήριά του).

Λοιπόν τα υλικά μας είναι:
  • Το καλό μας τερματικό
  • Ένα στικάκι μεγάλης χωρητικότητας (κρίμα να έχετε τόσες διανομές και να μην μπορείτε να τις χωρέσετε ;) )
  • Και βεβαίως βεβαίως διανομές Linux

Εκτέλεση:
Ανοίγουμε το τερματικό και γινόμαστε root:
Κώδικας: Επιλογή όλων
sudo su


Μετά βλέπουμε όλους τους δίσκους και εντοπίζουμε το στικάκι μας:
Κώδικας: Επιλογή όλων
fdisk -l

Καλό είναι να έχετε "καρφωμένο" μόνο το στικάκι που θέλετε να κάνετε multiboot για να μπορείτε να το βρείτε εύκολα


θα είναι της μορφής /dev/sdx1 όπου x ένα λατινικό γράμμα αναλόγως το σύστημα.

Στην συνέχεια θα κάνουμε 2 υποθέσεις:
  1. Ότι το στικάκι μας είναι το αρχείο συσκευής /dev/sdb
  2. Και αναλόγως ότι περιέχει ένα partition /dev/sdb1

Και το κάνουμε Unmount το partition:
Κώδικας: Επιλογή όλων
umount /dev/sdb1


Τώρα έχουμε να επιλέξουε μεταξύ 2 οδών:
  1. Το στικάκι να μπορεί να κάνει boot μόνο σε legacy mode (ο παλιός τρόπος) ή και σε bios μηχανήματα
  2. Το στικάκι να μπορεί να κάνει boot παντού (ο νέος τρόπος), αλλά μην περιμένετε να κάνει boot σε secure mode εάν κάνει πείτε το από κάτω .

Όποιες εντολές εκτελούμε και στους 2 τρόπους τα εκτελούμαι σαν root (υπό καθεστώς sudo su).



Ο παλιός τρόπος:

Μετά διαμορφώνουμε το partition σαν fat32:
Κώδικας: Επιλογή όλων
mkfs.vfat -F 32 -n MULTIBOOT /dev/sdb1


Και μετά κάνουμε το partition bootable:
Κώδικας: Επιλογή όλων
fdisk /dev/sdb

Στo μενού που μας βγάζει πατάμε a και enter μετά πατάμε 1 και enter και μετά w και enter

Και προσαρτίζουμε το usb stick ξανά.
Κώδικας: Επιλογή όλων
mkdir /media/όνομα_χρήστη/MULTIBOOT && mount /dev/sdb1 /media/όνομα_χρήστη/MULTIBOOT


Όπου όνομα_χρήστη το username που κάνεται login (είσοδο) στο σύστημα. Μπορείτε να το δείτε σε ένα διαφορετικό παράθυρο τερματικού δίνοντας την εντολή:
Κώδικας: Επιλογή όλων
whoami


Εφόσον το προσαρτήσαμε εγκαθιστούμε τον grub2 στο στικάκι:
Κώδικας: Επιλογή όλων
grub-install --force --no-floppy --target=i386-pc --recheck --boot-directory=/media/όνομα_χρήστη/MULTIBOOT/boot /dev/sdb


Ο νέος τρόπος:
Κατ αρχάς εκτελούμε τις εξής εντολές ΜΙΑ ΠΡΟΣ ΜΙΑ:
Κώδικας: Επιλογή όλων
parted /dev/sdb -- mktable gpt
parted /dev/sdb -- mkpart biosgrub fat32 1MiB 4MiB
parted /dev/sdb -- mkpart efi fat32 4MiB -1
parted /dev/sdb -- set 1 bios_grub on
parted /dev/sdb -- set 2 esp on


Η τελευταία, εάν σας βγάλει κάποια μυνήματα, χαλαρουίτα μην ανυσυχείτε.

Είστε ok εάν η εντολή:
Κώδικας: Επιλογή όλων
parted /dev/sdb -- print

Σας βγάλει ότι το στικάκι έχει 2 partitions.

Μετά διαμορφώνουμε το ΔΕΥΤΕΡΟ partition για το στικάκι μας (οι εντολές ΜΙΑ ΠΡΟΣ ΜΙΑ παρακαλώ):
Κώδικας: Επιλογή όλων
mkfs -t vfat -n GRUB /dev/sdb2
mount /dev/sdb2 /mnt


Για να υποστηρίξει ο grub2 εγκατάσταση για EFI πρέπει να εγκατασταθούν κάποια πακετάκια:
Κώδικας: Επιλογή όλων
apt install grub-efi-ia32-bin grub-efi-amd64-bin grub-pc-bin grub2-common

(Και απολαύστε τα χρωματάκια στο τερματικό)

Και μετά εγκαθιστούμε τον grub στο στικάκι μας (οι εντολές ΜΙΑ ΠΡΟΣ ΜΙΑ παρακαλώ):
Κώδικας: Επιλογή όλων
grub-install --removable --no-nvram --no-uefi-secure-boot \
     --efi-directory=/mnt --boot-directory=/mnt \
     --target=i386-efi

grub-install --removable --no-nvram --no-uefi-secure-boot \
     --efi-directory=/mnt --boot-directory=/mnt \
     --target=x86_64-efi

grub-install --removable --boot-directory=/mnt \
     --target=i386-pc /dev/sdb


Και τώρα βάζουμε τα .iso αρχεία των διανομών στο στικάκι μας.

Εφόσον το κάνουμε δημιουργούμε στον φάκελο grub το έγγραφο grub.cfg με τον αγαπημένο μας text editor. Εκεί σε επιλογές menuentry βάζουμε τις επιλογές εκκίνησης για να ξεκινά ο grub από το iso της εκάστοτε διανομής που θέλουμε.

Σημείωση:Το αρχείο grub.cfg το δημιουργούμε σαν root.

  • Για τον παλιό τρόπο δίνουμε:
    Κώδικας: Επιλογή όλων
    sudo touch /media/όνομα_χρήστη/MULTIBOOT/boot/grub/grub.cfg
  • Για τον νέον τρόπο δίνουμε:
    Κώδικας: Επιλογή όλων
    sudo touch /mnt/grub/grub.cfg

Για Ubuntu, Lubuntu, Kubuntu, Xubuntu θα έχει μια καταχώρηση του στύλ:
  • Για 32 bit:
    Κώδικας: Επιλογή όλων
    menuentry "Try Lubuntu 14.04 32 bit Desktop ISO" {
    loopback loop /<ονομα iso>
    linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=/<ονομα iso> noeject quiet splash locale=el_GR.UTF-8 --
    initrd (loop)/casper/initrd.lz
    }
  • Για 64bit
    Κώδικας: Επιλογή όλων
    menuentry "Try Ubuntu 14.04 64 bit Desktop ISO" {
    loopback loop /<όνομα iso>
    linux (loop)/casper/vmlinuz.efi boot=casper iso-scan/filename=/<όνομα iso> noeject quiet splash locale=el_GR.UTF-8 --
    initrd (loop)/casper/initrd.lz
    }

Αν θέλετε να σας "πετάει" Απ' ευθείας σε περιβάλλον εγκατάστασης μετά από το noeject βάλτε only-ubiquity έτσι οι επιλογές θα γίνουν
  • Για 32 bit:
    Κώδικας: Επιλογή όλων
    menuentry "Try Lubuntu 14.04 32 bit Desktop ISO" {
    loopback loop /<ονομα iso>
    linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=/<ονομα iso> noeject only-ubiquity quiet splash locale=el_GR.UTF-8 --
    initrd (loop)/casper/initrd.lz
    }
  • Για 64bit
    Κώδικας: Επιλογή όλων
    menuentry "Try Ubuntu 14.04 64 bit Desktop ISO" {
    loopback loop /<όνομα iso>
    linux (loop)/casper/vmlinuz.efi boot=casper iso-scan/filename=/<όνομα iso> noeject only-ubiquity quiet splash locale=el_GR.UTF-8 --
    initrd (loop)/casper/initrd.lz
    }

Για Debian 8.6 64 bit έβαλα το εξής menuentry:
Κώδικας: Επιλογή όλων
    menuentry "Debian 8.6" {
        loopback loop /debian-8.6.0-amd64-CD-1.iso
        set background_color=black
        linux    (loop)/install.amd/vmlinuz  iso-scan/filename=/debian-8.6.0-amd64-CD-1.iso vga=788 --- quiet
        initrd   (loop)/install.amd/initrd.gz
    }


Για άλλες διανομές μπορείτε να δείτε εδώ το πως θα βάλετε ένα menuentry στο grub2 που είναι εγκατεστημένο στο στικάκι:
https://help.ubuntu.com/community/Grub2 ... t/Examples

Καθώς και να πείτε στο θέμα αυτό τις δικιές σας προτάσεις για menuentry.

Τέλος μπορείτε μέσω qemu να δοκιμάσετε χωρίς restart τα menuentry:
Κώδικας: Επιλογή όλων
qemu-system-x86_64 -hdb /dev/sdχ

όπου στην θέση του /dev/sdx αντικαθιστούμε με το καταλλήλως προκειμένου να κάμνει (σσ. άτσα και το Κυπριακό) boot από την κατάλληλη συσκευή που αντιστοιχεί το στικάκι σας.

Αλλά μέτα από κάθε αλλαγή θα πρέπει να κάνετε unmount to στικάκι να το "ξεκαρφώνετε" και να το "ξανακαρφώνετε" στην θύρα USB ή μπορείτε να δίνετε την εντολή:
Κώδικας: Επιλογή όλων
cd ; sudo eject /dev/sdχ; sleep 1; sudo eject -t /dev/sdχ

Για να μην κάψετε ούτε μια πικοθερμίδα (piko είναι μια υποδιαίρεση μικρότερη και από το nano).