web-dev-qa-db-ja.com

永続パーティション(casper-rw)を読み取り専用でマウントする

USBスティックで使用する新しいISOイメージを作成しようとしています。 USBスティックをvfatext4の2つのパーティションに分割しました。 vfatパーティションにはISOとGRUB2がインストールされており、GRUB2がISOを起動します。

ext4パーティションにはボリュームラベルcasper-rwがあり、Live USBの永続データストアとして使用されます。 grub.cfgを変更して、ブート時に2つのオプションを取得できるようにしました。1つは永続モードでISOをブートするオプション、もう1つは通常にブートするオプションです。

ただし、「通常」モードで起動すると、casper-rwパーティションは通常のドライブとしてマウントされ、永続モードで行われた変更は残りません。

希望するのは、/ファイルシステムにオーバーレイするようにマウントされたcasper-rwパーティションですが、Ubuntuに通常のブートを要求した場合(つまり、GRUB2persistentオプションなし) 、永続モードで行われた変更が持続するように、そのパーティションを読み取り専用でマウントしたいと思います。

これを達成する最良の方法は何ですか?

1
Chinmay Kanchi

私がやったのは、initrd.lz内のcasperスクリプトを変更することです。

スクリプトはcasper-rwを読み取り専用としてマウントし、/の上にオーバーレイします。その後、tmpfsをオーバーレイの上にマウントします。

私はmint btwを使用していますが、ubuntuについてはわかりませんが、あなたにとってうまくいくことを願っています。

詳細は次のとおりです。

  1. here の命令を使用してinitrdを抽出します。
  2. スクリプト/キャスパーを編集し、setup_unionfs()関数を変更します。変更された関数 here が見つかります。

    ...
    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を使用します。

2
David Lim