Вот гипотетическая ситуация, которая, на мой взгляд, может быть правдоподобной:
grub
либо никогда не устанавливается на цель, либо был полностью удален из системы.
То, что мы могли бы сделать в приведенном выше случае, - это настроить параметр загрузки для небольшого установочного / аварийного образа, который мы храним в нашем системном разделе / esp
или EFI.
Если что-то когда-либо пойдет не так с нашей текущей установкой, то, пока мы можем хотя бы получить доступ к системному разделу EFI каким-либо образом, мы можем связать нашу прошивку и настроить машину на загрузку с нашим образом восстановления при следующей перезагрузке. В этом случае все, что нам нужно сделать, это изменить текстовый файл или два, скрестить пальцы и запустить reboot now
.
Вот базовый набор команд для минимально сконфигурированной системы Arch Linux (потому что это то, что я использую) , которая все еще может работать так, как я описываю.
Сначала мы создадим рабочий каталог и загрузим несколько файлов.
aria2c
. Я рекомендую это, но используйте то, что работает. rEFInd
с помощью 7za
, но во всех случаях вы можете использовать тот же инструмент
. Если вы не читаете это в течение нескольких часов / дней после того, как я опубликовал его, то очень высока вероятность, что ссылки, используемые ниже, не актуальны.
mkdir / tmp / work && cd / tmp / work || exit
aria2c 'magnet:? xt = urn: btih: 331c7fac2e13c251d77521d2dc61976b6fc4a033 & dn = archlinux-2015.06.01-dual.iso & tr = udp: //tracker.archlinux.org: 6969 & tr.arch. = http: //tracker. : 6969 / announce '\
' http://iweb.dl.sourceforge.net/project/refind/0.8.7/refind-cd-0.8.7.zip'
7za x ref * .zip; rm ref * zip
Затем я сделаю диск с образом.
В случае реального устройства параметры fallocate
и losetup
можно игнорировать, и фактические имена устройств будут с большей вероятностью
соответствовать / dev / sda [12]
, чем / dev / loop0p [12]
fallocate -l4G img
Теперь я разделю этот диск с помощью утилиты gdisk
и назначу его устройству цикла.
/ dev / sda1
и / dev / sda2
соответственно, если вы используете настоящий диск, то есть / dev / sda
, а не ./ img
. Обычно желательно добавить более одного раздела для корня linux, что, как предполагается, является целью / dev / sda2
. Сценарий printf
или нет, программа gdisk
проста в использовании - и поэтому вам может быть лучше использовать ее в интерактивном режиме. Целевой диск не должен монтироваться при запуске, и вам, вероятно, потребуются права root для w
внесения изменений. w
обряд - так что будьте уверены, когда будете это делать. Я помещаю свой $ TGT
в переменную оболочки. За исключением его определения здесь, которое вы, возможно, захотите адаптировать по мере необходимости, где я его использую, можете и вы.
printf% s \\ noyn 1 '' + 750M ef00 \
n 2 '' '' '' '' wy |
gdisk ./img> / dev / null {1 }} TGT = $ (sudo losetup --show -Pf img) p
Нам также понадобится файловая система на esp. Это должен быть FAT.
VESP
. Вы должны называть свой как хотите. / etc / fstab
и другом файле конфигурации - так что определенно сделайте это чем-нибудь. Если вы устанавливаете ОС на $ {TGT} 2
, теперь вам, конечно же, понадобится файловая система для нее.
sudo mkfs.vfat -nVESP "$ TGT" 1
И мы создадим несколько каталогов mount
и начнем извлекать соответствующие файлы.
установить ref ref * iso \
arch arch * iso \
efi arch / EFI / archiso / efiboot.img
в то время как ["$ #" -gt 0] { {1}} do mkdir "$ 1" || exit
sudo mount "$ 2" "$ 1"
shift 2
готово; mkdir esp
Установить rEFInd
...
rEFInd
- менеджер загрузки, который в основном просто предлагает и заполняет меню загрузки. rEFInd
поместит свои файлы конфигурации в esp, и их можно будет редактировать в любое время и в любом случае.
sudo ref / install.sh --usedefault "$ TGT" 1 &&
sudo umount ref && rm -rf ref *
Теперь мы смонтируем
наш esp и получите необходимые файлы с установочного диска Arch, чтобы получить наш собственный загрузочный аварийный диск.
Этот уродливый хак заключается в том, что efiboot.img
в настоящее время установлен на ./ efi
.Здесь мы найдем наше ядро и файл образа initramfs. другие на диске (в ./ arch / arch / boot
) не будут не работать для систем EFI.
sudo sh -ec << CONF '
смонтировать "$ 1" esp
cp -ar efi / EFI / archiso esp / EFI
cp -ar arch / arch / * x86 * esp / EFI / archiso
mkdir esp / EFI / archiso / cow
xargs> esp / EFI / archiso / refind_linux.conf
umount efi arch
rm -rf efi arch * '- "$ TGT" 1
\ "arch_iso \" \ "archisobasedir = EFI / archiso \
archisolabel = VESP \
copytoram \ {{1 }} cow_label = VESP \
cow_directory = / EFI / archiso / cow \
cow_persistence = P \
cow_spacesize = 384M \
initrd = EFI / archiso / archiso .img \ "
CONF
По сути, вы только что установили - с нуля - среду предзагрузочного восстановления с постоянным сохранением копирования при записи . файл (так что вы можете, например, systemctl включить sshd_socket
сейчас, и настройка сохранится при следующей загрузке живой системы) . Живой установочный носитель Arch Linux теперь находится в загрузочном разделе вашей системы и может быть вызван из меню загрузки в любое время. Конечно, вы также установили менеджер меню загрузки.
* x86 *
, потому что у меня 64-битная машина, и glob получает то, что мне нужно. Для 32-разрядной установки (но почему?) используйте вместо него * 686 *
.
esp / EFI / archiso / x86_64 / airootfs.sfs
. VESP
. copytoram
предписывает системе Arch Linux live init
скопировать свой образ rootfs в tmpfs перед его монтированием в цикле, что фактически освобождает вас для доступа к esp при работе в нем. среда. Большинство систем живой установки имеют аналогичные конструкции. Отличительной чертой EFI является его способность обрабатывать файловую систему . На современных компьютерах нет никакой необходимости упаковывать необработанные двоичные файлы и вставлять их между разделами диска. Меня поражает, что люди все еще делают это, когда вместо этого они могут управлять своей загрузочной средой и настраивать ее с помощью простых текстовых файлов, расположенных в обычном, повседневном дереве каталогов. Выше я поместил ядро и initramfs в их собственную именованную папку в центральной древовидной структуре. EFI - который в данном случае для удобства будет брать реплики из rEFInd
- будет вызывать его при загрузке по pathname , потому что он монтирует esp.
Теперь все, что осталось сделать, это убедиться, что вы понимаете, как выбрать систему, которая действительно будет загружаться, когда вам нужно. Поймите - вы можете загрузить это прямо сейчас. Вы можете сделать это на виртуальной машине с qemu
(вам понадобится прошивка OVMF -pflash
) или вы можете перезагрузить компьютер и rEFInd
обнаружит ядро и передаст свой путь прошивке, которая загрузит и запустит живую систему Arch Linux.Когда вы устанавливаете на диск более постоянную систему - или несколько (что вы можете сделать прямо сейчас, если захотите, перезагрузившись с живого диска и выполнив установку) , вы захотите сохранить ее ядро и initramfs в той же структуре. Это очень легко устроить.
Если, например, вы должны были установить систему в корневой раздел, названный, из-за недостатка воображения, root
, вам нужно было бы настроить его примерно так:
mount - привязать
конкретную загрузочную папку к корневому пути / boot
в / etc / fstab
. Для этого вам понадобятся две строки в / etc / fstab
и для создания точки монтирования в / esp
.
sudo sh -c << \ FSTAB '
[-d / esp] || mkdir / esp
findmnt / esp || mount -L ESP / esp
mkdir -p / esp / EFI / root
cp / boot / kernel binary \
/boot/initramfs.img \
/ esp / EFI / root
mount -B / esp / EFI / root / boot
cat >> / etc / fstab
echo "$ 1"> / boot / refind_linux.conf { {1}} '-' "new_menu_item" "root = LABEL = root" '
LABEL = ESP / esp vfat defaults 0 2
/ esp / EFI / root / boot none bind, defaults 0 0
FSTAB
Вам нужно делать что-то подобное только один раз за установку - и это при условии, что вы изначально не настроили это таким образом - что проще потому что ядро и initramfs уже будут там, где им место. После того, как у вас есть эти строки в / etc / fstab
и минимальный файл конфигурации в /boot/refind_linux.conf
, все готово.Вы можете поддерживать любое количество установок в одной системе с одним и тем же устройством / esp
и точно так же централизовать все загрузочные двоичные файлы в одном дереве. Различные
системы будут действовать немного по-разному - например, Windows потребуется немного больше уговоров, чтобы заставить их соответствовать, - но они все будут работать .
Хорошо, последнее, что вам нужно знать, как я сказал ранее, это как выбрать следующую загрузочную установку из файловой системы. Это настраивается в файле /esp/EFI/BOOT/refind.conf
.
rEFInd
загружает последнее обновленное ядро в своем дереве сканирования. Но обычно я устанавливаю следующие параметры:
<< \ DEF sudo tee \
/esp/EFI/BOOT/refind.conf.def
### refind. conf.def
### при переименовании в refind.conf этот файл
### приведет к тому, что refind выберет по умолчанию
### пункт меню под названием "new_menu_item" { {1}} ### в его /boot/refind_linux.conf
default_selection new_menu_item
### этот файл также установит тайм-аут меню
### всего на 5 секунд при каждой загрузке
таймаут 5
### END
DEF
И файл восстановления ...
<< \ RES sudo tee \
/esp/EFI/BOOT/refind.conf.res
### refind.conf.res
### здесь по умолчанию будет выбран
# ## запись с именем "arch_iso" с
### 10-секундным таймаутом
default_selection arch_iso
тайм-аутом 10
### END
RES
перезагрузку сейчас
... sudo cp /esp/EFI/BOOT/refind.conf.res \
/esp/EFI/BOOT/refind.conf
.def
на .res
, использованный выше, конечно, чтобы вернуться к корневому каталогу по умолчанию . Выполните следующие действия:
mkswap /dev/sda3
swapon /dev/sda3
mount /dev/sda4 /mnt
mount /dev/sda5 /mnt/home
lsblk
. Вывод будет примерно таким:# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 100G 0 disk
├─sda1 8:1 0 512M 0 part
├─sda2 8:2 0 1G 0 part [SWAP]
├─sda3 8:3 0 20G 0 part /
└─sda4 8:4 0 80G 0 part /home
pacstrap /mnt base
genfstab -U /mnt >> /mnt/etc/fstab
. Также сделайте это для /home
. arch-chroot /mnt /bin/bash
Подробные инструкции см. в этом видео .