以只读方式挂载持久分区 (casper-rw)

以只读方式挂载持久分区 (casper-rw)

我正在尝试创建一个新的 ISO 映像以在 USB 记忆棒上使用。我已将 USB 记忆棒划分为 2 个分区,一个分区vfat和一个分区ext4vfat分区中有 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,希望它对你有用。

以下是更多详细信息:

  1. 使用以下指令提取 initrd这里
  2. 编辑 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
    ...
    
  3. 替换 initrd.lz,或者就我而言,我只是创建了一个新的。

    find . | cpio --quiet -o -H newc | lzma -7 > ../ro-initrd.lz
    
  4. 添加更多启动选项syslinux.cfg

    append initrd=/casper/ro-initrd.lz file=/cdrom/preseed/linuxmint.seed boot=casper  splash -- persistent
    

注意:我使用 Mint 16 (x86) 和 unetbootin。

相关内容