Montando a partição de persistência (casper-rw) somente leitura

1

Estou tentando criar uma nova imagem ISO para usar em um pendrive. Eu particionei meu pendrive em duas partições, uma vfat e uma ext4 . A partição vfat tem o ISO e GRUB2 instalado, de tal forma que GRUB2 inicializa o ISO.

A partição ext4 tem o rótulo de volume casper-rw e é usada como armazenamento de dados persistente para o Live USB. Eu modifiquei o grub.cfg de forma que eu recebo duas opções na inicialização, uma para inicializar o ISO no modo persistente e uma para inicializar normalmente.

No entanto, ao inicializar no modo "normal", a partição casper-rw é montada como uma unidade normal e as alterações feitas no modo persistente não permanecem.

O que eu gostaria é que a partição casper-rw seja montada sobreposta no sistema de arquivos / , mas quando eu peço ao Ubuntu para inicializar normalmente (isto é, sem a opção persistent em GRUB2 ), eu como essa partição a ser montada somente leitura para que as alterações feitas no modo persistente persistam.

Qual é a melhor maneira de conseguir isso?

    
por Chinmay Kanchi 19.01.2014 / 22:48

1 resposta

2

O que eu fiz é modificar o script casper dentro de initrd.lz.

O script montará casper-rw como somente leitura e, em seguida, sobreposto em cima de /. Em seguida, montará o tmpfs no topo da sobreposição.

Eu uso mint btw, não tenho certeza sobre o Ubuntu, espero que funcione para você.

Aqui estão mais detalhes:

  1. Extraia o initrd usando as instruções de aqui .
  2. Edite scripts / casper, modifique a função setup_unionfs() . Você encontra a função modificada aqui .

    ...
    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. Substitua initrd.lz ou, no meu caso, acabei de criar um novo.

    find . | cpio --quiet -o -H newc | lzma -7 > ../ro-initrd.lz
    
  4. Adicione mais opções de inicialização a syslinux.cfg

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

Nota: eu uso Mint 16 (x86) e unetbootin.

    
por David Lim 22.01.2014 / 11:10