我有一台装有 Arch Linux 的笔记本电脑
[averagejoey2000@JoeyHobbyPCarchLinux arch-install-scripts]$ lsblk -l
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 596.2G 0 disk
sda1 8:1 0 25G 0 part /
sda2 8:2 0 2M 0 part
sda3 8:3 0 512M 0 part /boot
sda4 8:4 0 4G 0 part [SWAP]
sda5 8:5 0 4G 0 part [SWAP]
sda6 8:6 0 266.3G 0 part /home
sda7 8:7 0 296.3G 0 part
我打算将 Slackware linux 安装到 /dev/sda7 及更高版本。我没有用于基于 iso 的安装的空白 DVD,dd if=usbboot.img of=/dev/sdb 会给我启动菜单,但我的电脑在安装进行之前就过热了。在另一台笔记本电脑上,它没有过热,而是等待了 3 个小时,而不是承诺的两分钟。我既没有钱也没有耐心订购并等待邮寄的 DVD,购买后就可以体验 slackware 的挑战。我希望能够
mkdir /mnt/slack
mount /dev/sda7 /mnt/slack
(can't remember the command) proc proc proc/
slackinst
但是如果可以这样做的话,我想先完成安装之前的部分。
TL;DR:有 Arch Linux,想要 slack,必须保留两者;没有 cd,没有 usb 或钱;可以 chroot,预分区:GPT
答案1
最简单的解决方案是使用 Grub2 从 iso 映像启动的功能,您可能已经拥有该映像,或者可以获得该映像。假设它被称为slack.iso, (所有命令均为须藤)
mkdir /boot/iso
cp /path/to/your/slack.iso /boot/iso
现在编辑文件/etc/grub.d/40_custom并插入以下行:
#!/bin/sh
echo "Adding 40_custom." >&2
exec tail -n +4 $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 "Slackware ISO" {
set isofile="/boot/iso/slack.iso"
loopback loop (hd0,3)$isofile
linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile noprompt noeject
initrd (loop)/casper/initrd.lz
}
现在保存,并更新 grub:
update-grub
重新启动,选择新条目,您应该会看到实时 Slack 启动。
如果您现在想要安装,您必须记住,您无法安装到正在使用的磁盘,但是,由于您的实时映像已经加载到 RAM 中,因此无需担心:作为 sudo,
umount -l /isodevice
然后您就可以开始安装了。只需确保选择正确的(即空的) 分区进行安装。
注意:如果你从 efi 启动,则需要替换Linux的在 40_custom 中输入以下内容:
linux (loop)/casper/vmlinuz.efi boot=casper iso-scan/filename=$isofile noprompt noeject
NB2:为了重申显而易见的事实,我还想指出,为了测试的目的,安装新操作系统最简单的方法是在虚拟机内进行安装。我看不出在同一台电脑上安装两台生产机器有什么用,因为它们不能同时运行。相反,虚拟机可以与主机操作系统同时运行,可以与主机操作系统共享整个磁盘,可以轻松擦除或重新定位到另一台电脑,等等。
答案2
你可以尝试这样的方法,但我不确定它是否适合你。它可能需要一些命令行技巧。
您需要做的第一件事是挂载 usbboot.img 文件:
$ mkdir /tmp/usbboot
$ sudo mount usbboot.img /tmp/usbboot
然后从中复制 initrd.img 并卸载:
$ cp /tmp/usbboot/initrd.img /tmp/
$ sudo umount /tmp/usbboot
$ rmdir /tmp/usbboot
现在 initrd 位于 /tmp 中。但它是什么?
$ cd /tmp
$ file initrd.img
initrd.img: gzip compressed data, from Unix, last modified: Fri Nov 1 01:07:44 2013, max compression
啊,它被 gzip 压缩了。将其重命名为 .gz 并解压:
$ mv initrd.img{,.gz}
$ gzip -d initrd.img.gz
现在它是什么?
$ file initrd.img
initrd.img: ASCII cpio archive (SVR4 with no CRC)
现在为 slackware 安装程序创建一个新目录,并使用 cpio 提取 initrd(您需要以 root 身份确保所有权限正确):
$ mkdir slackboot
$ cd slackboot
$ su
# cat ../initrd.img | cpio -i
笔记:cpio 会将其所有文件提取到当前目录,因此请确保在调用时位于要提取文件的目录中。它不会从 / 尝试提取。
您现在可以 chroot 并测试它:
# chroot .
# /usr/lib/setup/setup
Error opening terminal: xterm.
看来您需要一个真正的 tty/pty/whatever。因此请以 root 身份 (ctrl+alt+2) 登录到您的一个真正的 (非 X11) 终端。
# mount -o bind /dev /tmp/slackboot/dev
# mount -o bind /sys /tmp/slackboot/sys
# mount -o bind /proc /tmp/slackboot/proc
# chroot /tmp/slackboot
# /usr/lib/setup/setup
这将启动安装程序,然后您就可以开始了。不过,如果您的硬盘坏了,请不要怪我。