Загрузочный ISO-файл, расположенный на LVM, из GRUB2

Когда вы копируете с помощью cp -a source/* target/, вы копируете большинство файлов и каталогов из sourceв target. В частности, исключаемые элементы, вероятно, будут файлами, начинающимися с точки(.)на верхнем уровне source.

Рассмотрим эти файлы (или каталоги )вsource

apple        # will be copied
banana/      # will be copied, as will all its contents
.cherry      # will not be copied

При копировании с помощью cp -a source/. target/вы копируете все содержимое source, включая все элементы, начинающиеся с точки (.)–target

.

Рассмотрим эти файлы (или каталоги )вsource

apple        # will be copied
banana/      # will be copied, as will all its contents
.cherry      # will be copied

Если вы используете bash, zsh, вы можете использовать параметрdotglob, чтобы изменить значение *, чтобы оно также включало файлы и каталоги, начинающиеся с точки (yash. имеет опцию dotglob; однако затем он включает .и ..в расширения глобуса, что ограничивает его использование. См. также FIGNORE='@(.|..)'в ksh93).

Интересно, что cp -a source/. target/гарантируется никогда создание компонента target/source. (С другой стороны,cp -a source target/выполнит одно из двух действий в зависимости от того, существует ли уже target. Подробности см. в Как рекурсивно скопировать папку идемпотентным способом с помощью cp .)


Когда вы удаляете с помощью rm -rf source/*, вы удаляете файлы и каталоги в source, которые не начинаются с точки(.). С учетом уже упомянутой настройки dotglob. Он не удалит сам каталог source.

При попытке удалить с помощью rm -rf source/.произойдет сбой -, поскольку другие уже объяснили -, поскольку POSIX запрещает удаление пути, последним компонентом которого является .или ... Ближайшим эквивалентом является rm -rf source, который удалит каталог sourceи все его содержимое независимо от того, начинаются ли они с точки (.).

1
30.04.2019, 21:14
3 ответа

Как сказал Фростшуц, добавление live-media=/dev/mapper/Fedora-root findiso=ISO/kali-linux-2019.1a-amd64.isoк параметрам строки команды ядра -работало. Так выглядит новый пункт меню, который работает

menuentry "Kali Live ISO - findiso" --class gnu-linux {
  insmod lvm
  insmod ext2
  set root="lvm/Fedora-root"
  search --no-floppy --fs-uuid --set=root --hint=${root} 29e2f518-5fad-49c9-90ef-966b0c033c5e
  set isofile="/ISO/kali-linux-2019.1a-amd64.iso"
  loopback loop $isofile
  linux (loop)/live/vmlinuz boot=live live-media=/dev/mapper/Fedora-root findiso=ISO/kali-linux-2019.1a-amd64.iso noconfig=sudo username=root hostname=kali
  initrd (loop)/live/initrd.img
}

Оказывается, kali initramfs не поддерживает параметр iso-scan/filename=.

3
27.01.2020, 23:41

Вероятно, вы застряли из-за недопонимания.

Grub по своей природе не может загружать любой ISO.

Да, (в пределах )Grub может расшифровывать зашифрованные устройства, понимать RAID и LVM, монтировать множество файловых систем и даже циклически -монтировать ISO. Но у всех этих причудливых особенностей есть только одна цель:

Загрузить ядро ​​и initrd.

В конце концов, Grub — это всего лишь загрузчик.

Как только вы сможете загрузить ядро ​​и initrd,не имеет значения, через какие обручи вам пришлось перепрыгнуть Grub. Результат совершенно такой же, как если бы вы скопировали эти два файла напрямую в простой незашифрованный раздел /boot.

mount -o loop kali-linux-2019.1a-amd64.iso /mnt/iso
cp /mnt/iso/live/{vmlinuz,initrd.img} /boot/kali

Затем загрузите его вот так:

menuentry "Kali Live ISO" {
    linux kali/vmlinuz...parameters...
    initrd kali/initrd.img
}

Идентично вашему выше, при условии, что эти два файла (vmlinuz и initrd.img )взяты из соответствующего файла ISO.


Это то же самое, на самом деле. Grub просто хочет эти два файла, независимо от того, как. Вы можете загружать ISO-образы с помощью любого загрузчика, который может загружать ядро ​​и initrd, ничто из этого не зависит от причудливых функций Grub (, хотя это может быть просто более удобным ).

Итак, Grub загружает только ядро, передает ему некоторые параметры ядра и initrd, вот и все. Когда ядро ​​загружено, нет LVM, нет цикла ()и нет ISO. Что бы ни делал Grub, его заменило само ядро.


Как же тогда загружается ISO?

Он загружается сам. Вот почему вы должны передать имя файла ISO в качестве параметра ядра, чтобы оно знало, какой файл искать. Что ж, даже это может быть необязательным, если имя файла по умолчанию должно быть жестко закодировано в initramfs ISO.

Кроме того, в файле initramfs ISO есть фрагмент кода, который проходит через все ваши устройства хранения, монтирует все ваши файловые системы и ищет этот файл. И когда он находит файл, он монтирует его в цикле -.

И вот как это работает, не Grub, а сам ISO реализует функциональность, и в зависимости от этой реализации (если вообще есть реализация -иначе она не будет работать ), она может поддерживать или не поддерживать размещение этого файла на логических томах LVM или даже поддерживать RAID и шифрование.


Конкретно для Кали я не знаю, возможно ли это. Я попытался немного прочитать код initramfs Kali, и iso-scan/filename=, кажется, вообще не существует,вместо этого он должен быть findiso=, и добавление к нему пути /dev/mapper/или добавление его отдельно с live-media=может включить поддержку LVM.

Но на самом деле я сам не пробовал, а initramfs трудно расшифровать, поэтому вам придется экспериментировать/расследовать самостоятельно или задать этот вопрос сообществу Kali.

В качестве альтернативы просто поместите файл ISO в более доступное место (обычный раздел ).

2
27.01.2020, 23:41

Я подтверждаю возможность загрузки ISO на логическом томе с Grub 2.00. В моем случае у меня есть уникальный раздел MBR типа LVM, (весь диск ). У меня только 2 LV (boot и iso ), и я могу загрузиться с этим ubuntu -18.04.2 -desktop -amd64.iso. К сожалению, из-за нехватки возможностей casper (механизма livecd для ubuntu ), я исправил файл в initramfs (, но без изменения iso ).

Для Kali да, последнее решение работает, и оно более простое

-2
27.01.2020, 23:41

Теги

Похожие вопросы