Как загрузиться с ISO-файла, хранящегося на жестком диске?

12

Я знаю, что могу создать / записать загрузочный CD / DVD или живой USB и могу загрузить / установить с него. Но предположим, что в настоящее время я использую GNU / Linux и у меня есть файл ISO другого GNU / Linux, который я хочу установить на свой жесткий диск, затем я могу напрямую загрузиться с ISO с жесткого диска и попробовать / установить эту операционную систему GNU / Linux ?

Pandya
источник

Ответы:

15

Да, вы можете сделать это, добавив пункт меню в GRUBменю загрузчика.

Вы можете добавить пользовательский пункт меню GRUB путем редактирования /etc/grub.d/40_custom,

Пример пользовательского меню :

 exec tail -n +3 $0
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.  

menuentry "Trisquel ISO" {
        set isofile="/Operating_Systems/Trisquel_7.0_i686/trisquel_7.0_i686.iso"
        loopback loop (hd0,5)$isofile
        linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile quiet splash
        initrd (loop)/casper/initrd
}

Инструкция и объяснение:

  1. Команда setиспользуется для сохранения пути файла ISO в переменную здесь isofile.

  2. loopbackиспользуется для создания устройства из образа файловой системы. Для этого необходимо указать устройство и файл изображения. Здесь мы использовали (hd0,5)$isofileкоторый (hd0,5)представляет пятый раздел диска.

    • Точки на Примечание: В (hd0,5),
      1 - й цифра означает номер устройства , который начинается с 0(здесь: 0 = 1 - го устройства) и
      2 - й цифра означает номер раздела , который начинается с 1(здесь 5 = 5 - го раздела).
      Это означает/dev/sda5
    • И переменная $isofileимеет путь к файлу ISO. Итак, наконец это становится (hd0,5)/Operating_Systems/Trisquel_7.0_i686/trisquel_7.0_i686.iso.
    • Для получения дополнительной информации посетите: Как указать устройства и файлы .

  3. linuxКоманда используется для загрузки ядра Linux ( vmlinuz ) из файла. Поместите путь ядра Linux в ISO.

    • Прочитайте / извлеките содержимое ISO, чтобы получить путь к примеру с ядром:

       $ 7z l trisquel_7.0_i686.iso | grep vmlinu
       2014-10-29 21:41:43 .....      5841680      5841680  casper/vmlinuz
       2014-11-03 00:45:09 .....      5844176      5844176  casper/vmlinuz.netinst
      

      Итак, /casper/vmlinuzбыл использован здесь.

  4. initrd Команда используется для загрузки начального виртуального диска для образа ядра Linux и установки соответствующих параметров в области установки Linux в памяти.

    • initrd - это схема загрузки временной корневой файловой системы в память. Положите путь initrdв ISO.
    • Прочитайте / извлеките содержимое ISO, чтобы получить путь initrd:

      $ 7z l trisquel_7.0_i686.iso | grep initrd
      2014-11-03 00:45:19 .....     16851900     16851900  casper/initrd
      2014-11-03 00:45:09 .....      9398592      9398592  casper/initrd.netinst
      
  5. Дополнительный параметр, например, boot=casper iso-scan/filename=$isofile noprompt noejectможет быть специфичным для дистрибутива GNU / Linux и может отличаться для другого семейства Linux. Вы можете найти некоторые конфигурации для разных семей / дистрибутивов здесь .

    Примечание. Некоторые дистрибутивы используют initrd.gzили initrd.lzзависят от используемого алгоритма / сжатия.

После редактирования /etc/grub.d/40_customGRUB необходимо обновить update-grub2командой. После перезагрузки вы найдете пользовательский пункт меню, который вы добавили на экране GRUB. И вы можете использовать среду Live дистрибутива GNU / Linux.

Чтобы выполнить установку из ISO, установщику может потребоваться размонтировать любые смонтированные разделы; то есть, скажем, другая система смонтирована /isodevice, тогда вы можете umount -l /isodevice.

Pandya
источник
Вау, я впечатлен ... Я бы подумал, что это будет невозможно, так как установка новой ОС часто включает переформатирование разделов, которые могут включать раздел, в котором хранится ваш файл ISO.
Подстановочный
Ваши образцы использует GRUB2. Centos 6 использует GRUB1 (grub legacy), и приведенные выше примеры не работают.
Икром