记一次FydeOS安装尝试和浅尝Linux操作系统安装 贴一个FydeOS链接, 该系统就是个贴牌Chromium OS. 官网安装方式在这里不做考虑. 偶然看到原来官方还给了这么个wiki 本次尝试安装目标: 硬盘安装 不刻盘 磁盘单分区 系统镜像分析 官网下载的FydeOS是一个img镜像. 分析官网提供的安装方式可以猜测, 该镜像可能是一个磁盘的RAW镜像. file命令可以基本确定其为磁盘的RAW镜像, 因此可以使用loopback方式尝试将其挂载. file命令输出 fydeos.img: DOS/MBR boot sector; partition 1 : ID=0xee, start-CHS (0x0,0,2), end-CHS (0x3ff,255,63), startsector 1, 10092700 sectors 首先将其设置为loop设备 losetup [options] -f | <loopdev> <file> 使用fdisk查看其分区布局(可能是我的操作方式有误, 使用parted时打印的分区布局是错误的) Device Start End Sectors Size Type /dev/loop0p1 5898240 10092652 4194413 2G Microsoft bas /dev/loop0p2 20480 53247 32768 16M ChromeOS kern /dev/loop0p3 319488 5898239 5578752 2.7G ChromeOS root /dev/loop0p4 53248 86015 32768 16M ChromeOS kern /dev/loop0p5 315392 319487 4096 2M ChromeOS root /dev/loop0p6 16448 16448 1 512B ChromeOS kern /dev/loop0p7 16449 16449 1 512B ChromeOS root /dev/loop0p8 86016 118783 32768 16M Microsoft bas /dev/loop0p9 16450 16450 1 512B ChromeOS rese /dev/loop0p10 16451 16451 1 512B ChromeOS rese /dev/loop0p11 64 16447 16384 8M unknown /dev/loop0p12 249856 315391 65536 32M EFI System 有了这个分区布局, 就可以尝试挂载了. 当然也可以使用dd把各分区单独分出来. 我是使用了losetup配合偏移量将各分区分别设置为loopback设备, 再使用mount将其一一挂载的; 有其他挂载方式请随意. 其实通过虚拟机运行FydeOS可以发现, 能用到的分区其实只有root/ stateful/ efi三个分区. (FydeOS可以切换到tty的), 因此上述多个分区其实是没有必要的. 猜测可能是Google对旗下ChromeBook设置的保留分区. 在这里补一个Google里搜索到的ChromiumOS安装教程 启动引导分析 挂载EFI分区, 查看grub.cfg内容, 关键启动记录如下示 menuentry "Boot FydeOS image A with Intel graphics chip" { linux /syslinux/vmlinuz.A init=/sbin/init boot=local rootwait ro noresume noswap loglevel=7 noinitrd console= i915.modeset=1 nouveau.modeset=0 radeon.modeset=0 amdgpu.modeset=0 cros_efi cros_debug root=PARTUUID=1687817B-70DD-E64B-AA45-82566DA0EB8D } 到此基本上可以尝试安装了. 将上述提及到的三个分区在硬盘里安置好, 然后从grub.cfg中指定根文件分区的分区ID即可开机了. *查看分区ID: lsblk [选项] [<设备> ...] LVM支持 是的, 使用LVM真的是没事找事. 主要是想实现单硬盘分区, 不想为了一个ChromiumOS而把硬盘分区表弄得乱糟糟的. 由于在开机时内核(vmlinuz)不能识别LVM分区, 因此需要设法将LVM分区在内核启动过程中挂载. (据说现在新版内核已经可以直接挂载LVM分区了, 不过FydeOS这个貌似是不行的) 有两种方案: initramfs 使用内核的device-mapper驱动 在我尝试弄了好几种方式生成initramfs都启动失败后, 还是妥协使用了device-mapper驱动. 相关文档: ChromiumOS Initrd | ChromiumOS KernelParameters | ChromiumOS DeviceMapper 方案如下: 新建LVM分区 修改init启动文件 然而还不行 挂载了root/ stateful , 但是还是运行不正常 等有空再折腾折腾吧 说一说折腾initramfs的事(内核调试) 说是内核调试, 其实也没有那么牛批的啦 当内核崩溃的时候, 或者当内核加载后使用图形化启动界面的情况时, 如果开机失败了, 看不到日志就让人摸不着头脑了. 当然添加quiet启动参数可以打开日志, 但是我试了, 好像是不行(而且遇到内核崩溃重启还会导致屏幕内容消失). 所以, 打开虚拟机吧. qemu调试内核