Η διαδικασία είναι απλή:
- Σε άδειο USB memory stick (FAT32) αντέγραψα τα directories "boot" και "EFI" από το τρέχον Ubuntu .iso
- δημιούργησα στο στικάκι ένα directory /ISO
- αντέγραψα μέσα στο /ISO το/τα αρχείο/α Ubuntu .iso (θα βρείτε πολλά στο http://cdimage.ubuntu.com/)
- μετονόμασα το .iso σε κάτι απλούστερο (λ.χ. U170464.iso) για να το πληκτρολογώ εύκολα και σωστά...
- άλλαξα τα περιεχόμενα του /boot/grub/grub.cfg σύμφωνα με τις "ιδέες" του θέματος "LiveISO"
- έκανα reboot, έλεγξα ότι ο Η/Υ μου κάνει εκκίνηση από "removable media" και έφτασα στο μενού "Which /ISO/.iso file?"
- πληκτρολόγησα το όνομα του .iso και enter, enter
... ΟΛΑ ΚΑΛΑ!
Επειδή μπορεί να μη είναι εύκολο να "ανοίξουμε" το .iso για να αντιγράψουμε τα ευρετήρια "boot" και "EFI", έφτιαξα ένα αρχείο .zip που περιέχει αυτά που υπάρχουν στο τρέχον Ubuntu Mate 17.10 iso. Με κάθε επιφύλαξη, απλό unzip στο USB drive θα έχει τα σωστά αποτελέσματα.
Συμπιεσμένο αρχείο .zip με τα περιεχόμενα των /boot και /EFI από Ubuntu Mate 17.10 (64bit): grubEFI.zip (2,3MB)
Στο ευρετήριο /boot/grub/ υπάρχει το αρχείο grub.cfg με τις επιλογές εκκίνησης του grub.
Αυτό το αρχείο πρέπει να ρυθμιστεί για να κάνει εκκίνηση από το .iso.
Τα τελικά περιεχόμενα του grub.cfg των δοκιμών μου ήταν:
Κώδικας: Επιλογή όλων
if loadfont /boot/grub/font.pf2 ; then
set gfxmode=auto
insmod efi_gop
insmod efi_uga
insmod gfxterm
terminal_output gfxterm
fi
set menu_color_normal=white/black
set menu_color_highlight=black/light-gray
menuentry 'Boot from /ISO/????.iso file' {
set pager=1
echo
set root=hd0,msdos1
ls /ISO/
echo
echo -n 'Which /ISO/.iso file? '
read isofile
echo
loopback loop /ISO/$isofile
echo 'Loading Linux kernel vmlinuz.efi (if any)...'
linux (loop)/casper/vmlinuz.efi boot=casper fsck.mode=skip iso-scan/filename=/ISO/$isofile nomodeset --
echo 'Loading Linux kernel vmlinuz (if any)...'
linux (loop)/casper/vmlinuz boot=casper fsck.mode=skip iso-scan/filename=/ISO/$isofile nomodeset --
echo 'Loading initrd.lz (if any)...'
initrd (loop)/casper/initrd.lz
echo 'Loading initrd.gz (if any)...'
initrd (loop)/casper/initrd.gz
echo 'Loading initrd (if any)...'
initrd (loop)/casper/initrd
echo
}
Σημειώσεις:
- το .iso της δοκιμής ήταν το Ubuntu Mate 17.04 64 bit το οποίο έχει ονομασία kernel "vmlinuz.efi" και αρχική RAM στο "initrd.lz". Αλλες εκδόσεις μπορεί να χρησιμοποιούν διαφορετικές ονομασίες, λ.χ. "vmlinuz" και "initrd" ή "initrd.gz".
- η παράμετρος "root" έχει ρυθμιστεί με το "set root=hd0,msdos1" που σημαίνει ότι ο δίσκος που περιέχει τα παραπάνω είναι ο πρώτος ("hd0") και λειτουργούμε το πρώτο partition ("msdos1").
Επιπλέον για αλλαγές "on fly" στο grub:
- όταν εμφανίζεται το grub boot menu μπορούμε να πατήσουμε "e" (edit) των εντολών της επιλεγμένης γραμμής, να κάνουμε αλλαγές και μετά να τρέξουμε τις διορθωμένες εντολές με F10 ή ctrl-x.
- αν έχουμε περισσότερους δίσκους ίσως να πρέπει να ρυθμίσουμε κατάλληλα την παράμετρο "set root=hd0,msdos1".
- από το grub menu, με "c" (command line) μπορούμε να βρούμε πληροφορίες για τους δίσκους στο σύστημά μας. Στο grub shell υπάρχουν αρκετές βοηθητικές εντολές, όπως ls για λίστα αρχείων ή δίσκων, set για να δούμε ή να ρυθμίσουμε κάποια παράμετρο, cd για αλλαγή directory, κλπ.
Περισσότερα για το grub στην τυπική πηγή: https://www.gnu.org/software/grub/grub- ... ation.html