我正在尝试创建一个新的 ISO 映像以在 USB 记忆棒上使用。我已将 USB 记忆棒划分为 2 个分区,一个分区vfat
和一个分区ext4
。vfat
分区中有 ISO 并GRUB2
已安装到其中,以便GRUB2
启动 ISO。
该ext4
分区具有卷标casper-rw
,并用作 Live USB 的持久数据存储。我已修改,grub.cfg
以便在启动时获得两个选项,一个以持久模式启动 ISO,一个正常启动。
但是,在“正常”模式下启动时,该casper-rw
分区将作为正常驱动器安装,并且在持久模式下所做的更改不会保留。
我希望 casper-rw 分区能够覆盖在/
文件系统上,但是当我要求 Ubuntu 正常启动时(即,没有persistent
中的选项GRUB2
),我希望该分区以只读方式安装,以便在持久模式下所做的更改能够持久。
实现这一目标的最佳方法是什么?
答案1
我所做的是修改 initrd.lz 里面的 casper 脚本。
该脚本将以只读方式挂载 casper-rw,然后将其覆盖在 / 之上。然后它将 tmpfs 挂载在覆盖之上。
顺便说一下,我用的是 mint,不确定 ubuntu,希望它对你有用。
以下是更多详细信息:
- 使用以下指令提取 initrd这里。
编辑 scripts/casper,修改
setup_unionfs()
函数。你找到修改后的函数这里。... p_ro_mount="" if [ -n "${PERSISTENT}" ]; then cowprobe=$(find_cow_device "${root_persistence}") if [ -b "${cowprobe}" ]; then p_ro_device=${cowprobe} p_ro_fstype=$(get_fstype "${cowprobe}") p_ro_mountopt="ro,noatime" p_ro_mount="/persistent" mkdir -p $p_ro_mount mount -t ${p_ro_fstype} -o ${p_ro_mountopt} \ ${p_ro_device} \ ${p_ro_mount} || panic "Can not mount" ... case ${UNIONFS} in ... overlayfs) mounts="" for mount in /cow $p_ro_mount $rofslist ...
替换 initrd.lz,或者就我而言,我只是创建了一个新的。
find . | cpio --quiet -o -H newc | lzma -7 > ../ro-initrd.lz
添加更多启动选项
syslinux.cfg
append initrd=/casper/ro-initrd.lz file=/cdrom/preseed/linuxmint.seed boot=casper splash -- persistent
注意:我使用 Mint 16 (x86) 和 unetbootin。