Manjaro To Go | 装进口袋的 Manjaro

Cover Image

Prologue

Windows To Go[1] 类似, Manjaro To Go 就是将 Manjaro 安装到电脑上 USB 连接的外部驱动器,并且能在不同的平台上启动。MBR + Legacy/EFI 方案大致思路是直接向 MBR 的 U 盘安装带 Legacy GRUB 的 Manjaro ,再安装一个 EFI GRUB。

这样做有以下用途:

  1. 当作 LiveCD,随时 chroot 过去修复其他地方的 Linux
  2. 随身携带配置好的的环境,有电脑就能在比较习惯的環境下工作
  3. Show off your USB drive performance

GPT + Legacy/EFI 也是可以的,要在硬盘前 2TiB 里划一个 1MiB~3MiB 的 BIOS boot 分区,然后安装 Legacy 的 GRUB,不过这种操作好像比较少见。

材料

  • 4KiB 读写比较快的 U 盘[2]
  • 想要安装的 iso
  • 一個在跑 Windows 的电脑(不支援 EFI 也可
  • Manjaro 环境(这里使用 VMware® Workstation 15 Pro 15.1.0 build-13591040

Legacy 安装 Manjaro

使用 VM 安装

参考 Wiki。然而我这边出現了一些 tricky 的情况。

使用 USB LiveCD 安装

参考 Wiki。然而我只有一个 USB 连接的外部驱动器。

从硬碟安装

对于 Arch 系,坠痛苦的是从硬盘安装。要从镜像里提取 VMLINUZ_X86_64INITRAMFS_X86_64.IMG 然后和镜像一起放到 /c。再用 EasyBCD 增加一个 NeoGRUB 条目。

然后编辑 /c/NST/menu.lst 如下:

1
2
3
4
5
title insmjro
rootnoverify (hd0,0) # 因为放在第一块硬碟的第一个分区
kernel /VMLINUZ_X86_64 misolabel=M1804 boot=casper iso-scan/filename=/mjro-gnome.iso locale=zh_CN.UTF-8
# misolabel 就是 CD 装载后的 title
initrd /INITRAMFS_X86_64.IMG

reboot. 然后选择 NeoGrub,进入 shell 后手動加载镜像:

1
2
3
4
5
6
7
mkdir /iso
mount -r -t ntfs /dev/sda1 /iso
modprobe loop
losetup /dev/loop6 /iso/mjro-gnome.iso
rm /dev/disk/by-label/M1804
ln -s /dev/loop6 /dev/disk/by-label/M1804
exit

记得分一个 200MiB 的 /boot/efi。另外,考虑到 Flash 寿命,我没给 swap 。

Manjaro 的 GUI 安装向导 Illyria 非常 zz。在进行 Legacy 安装输入 /boot/efi 后直接敲 Enter 即可。如果点击「确定」挂载点将 不会 被保存。

安装 EFI GRUB

Manjaro 安装到 U 盘后,启动安装在其他地方的 Arch 系 Linux 来 chroot,这里使用虚拟機 LiveCD。记得选上 UEFI 。

先调到合适的分辨率方便操作。切换到 SU,按照自机的分区情况进行掛载。注意先挂载 / 的分区。

1
2
3
4
5
6
7
8
sudo -s
fdisk -l
mount /dev/sda2 /mnt
mount /dev/sda1 /mnt/boot/efi
mount -o bind /dev /mnt/dev
mount -o bind /dev /mnt/proc
mount -o bind /dev /mnt/sys
mount -o bind /dev /mnt/run

然后就可以 chroot /mnt。如果没有 swap 请先去 配置一些东西 再来安装 EFI GRUB。

1
grub-install --target=x86_64-efi --boot-directory=/boot/efi --efi-directory=/boot/efi --removable --recheck

全都卸下来,退出 chroot

1
2
3
4
5
6
umount /proc
umount /dev
umount /sys
umount /run
sync
exit

安装 EFI GRUB 的时候不会生成 grub.cfg,所以直接從 Legacy 的 GRUB 里複製过去。

1
2
cd /mnt/boot
cp grub/grub.cfg efi/boot/grub/

最后,可以把 os-prober 干掉,省得每次滚系统的时候 grub 菜单被更新。

配置一些東西

/etc/fstab 里的 swap 一行注释掉,以免浪费人生中宝贵的 90s。此外,因为没有 swap ,所以 suspend to disk (usually known as hibernate) 是不可用的,要去 /etc/mkinitcpio.conf 改一下 HOOKS

1
HOOKS="base udev block autodetect modconf keyboard keymap filesystems fsck"

然后再让 /etc/default/grubGRUB_CMDLINE_LINUX_DEFAULT 为空

1
GRUB_CMDLINE_LINUX_DEFAULT=""

如果开機的时候不想看 dmesg 也可以改成:

1
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"

视你的 kernel 版本执行

1
mkinitcpio -p linux419

最後重新生成 grub.cfg

1
grub-mkconfig -o /boot/grub/grub.cfg

然后可以回去安装 EFI GRUB 了。

( Arch 反倒没这么多破事)

Appendix

[1] Windows To Go is no longer being developed. Microsoft is bound to go bankrupt.
[2] 至少 SK6221 ,推荐 2246XT/SM3350 。这里使用的是奈奈的第三批 SM3350
[3] 把浏览器的缓存扔进 RAM 可以减少 USB drive 的写入量,这里以 Chrome 为例:

1
2
3
mv ~/.cache/google-chrome/* /dev/shm
rm -rf ~/.cache/google-chrome
ln -s /dev/shm ~/.cache/google-chrome

References

后紀

voidge 向 U 盘写了至少 100GiB,所以这块没有 TRIM 的 SM3350 x KLUDG8V1EE-B0C1 已经脏盘了。最后,特别感谢 tnqzh123dotkrnl 的指导。

当你尝试在其他地方启动,Xorg 很可能会挂掉,我连 X 文档都没读过,我怎么知道怎么办,反正没有 GUI 又不是不能用

Updated at 02/22/2020: 我已经知道 Manjaro 是垃圾了,不要再把我批判一番。

本站所有原创内容采用 CC-BY-NC-ND 4.0 International 协议进行许可,附加条款亦可能应用。部分非原创内容版权为 上海アリス幻楽団黄昏フロンティア 等同人创作者所有。

笔记 Linux

评论

您需要成为穿墙的邪仙以加载 Disqus。