Como criar um sistema ativo na unidade USB com alterações persistentes no disco / disco rígido

10

Eu estava tentando instalar o Ubuntu ao vivo em uma unidade USB com alterações persistentes. No entanto, eu queria escrever as alterações no disco rígido em vez de USB por várias razões (desempenho, espaço).

Descobri que as alterações são tratadas em um arquivo com um sistema de arquivos ext3 montado pelo sistema (casper-rw). Mas parece ser detectado automaticamente na unidade flash na inicialização.

Como posso criar um novo arquivo casper-rw no disco rígido e redirecionar o sistema ao vivo do Ubuntu na unidade USB para o disco rígido?

edit 2015-07-14:

Obrigado pelas respostas até agora. Eles são muito interessantes e ajudam muito a entender melhor a mecânica do "recurso de salvamento persistente do sistema ativo" e mostram boas abordagens para resolver o problema. Infelizmente, eu estava tentando superar algumas limitações que eu tinha em mente ao fazer a pergunta sobre o acesso ao sistema host e / ou o acesso ao novo hardware que não indiquei claramente (desculpe por isso).

Se o particionamento for uma opção, acho que a resposta indicada aqui é muito boa, pois ela exige apenas que você crie uma nova partição, rotule-a como casper-rw e pronto (foi ótimo, eu testei).

Se a compra de um novo hardware for uma opção, lembrem-se de uma unidade flash USB3.0 (MLC ou SLC), HDDs portáteis, eSATA e outras opções que têm um desempenho muito melhor do que uma unidade flash USB2.0 média.

Então, eu queria saber se existe uma maneira de apenas criar um arquivo casper-rw em vez de uma partição em um disco com acesso limitado a (ou copiar / vincular o da unidade flash).

Dessa forma, seria fácil copiar o arquivo casper-rw de volta para a unidade flash e usá-lo de lá novamente ou movê-lo para outro computador, garantindo grande flexibilidade, alterações mínimas no disco rígido e remoção fácil das alterações feitas para o sistema.

LS
fonte
Não tenho certeza se essa é uma opção, mas se você precisar salvar apenas os dados, também poderá montar uma partição do disco rígido em algum lugar da árvore do sistema de arquivos ao vivo ... Dessa forma, você só tem pastas específicas localizadas no disco.
Byte Commander
@ByteCommander obrigado pelo seu comentário. Infelizmente, particionar o disco rígido não é uma opção para mim e eu gostaria que tudo fosse o mais compacto possível para que eu possa excluir os dados de maneira rápida e simples, para que um único arquivo no disco rígido seja o ideal.
LS
Também deve ser possível montar um arquivo contendo uma imagem de um sistema de arquivos (por exemplo, .iso ou .img, provavelmente mais). Infelizmente, eu nunca fiz isso e não posso lhe dizer como fazê-lo ...
Byte Commander
Como você sabe que isso não está funcionando? O seu arquivo se chama casper-rw ? Está na raiz da sua partição ? Eu fiz isso (usando persistência no HDD com uma partição chamada casper-rw) e não me lembro de nenhuma etapa extra necessária.
SolsTiCe
Sua edição mais recente torna sua pergunta muito específica para ser de uso amplo (que é minha resposta ...) Não é impossível, mas significaria criar scripts e regras do udev para [desmontar] - [sincronizar com o HDD] - [montar] na inserção e [sincronizar com o HDD] na desmontagem, mas isso é uma tonelada de trabalho e não é realmente adequado para um site de perguntas e respostas como este.
Fabby

Respostas:

4

Você pode facilmente colocar o sistema de arquivos gravável (no arquivo casper-rw) de uma mídia ao vivo em um disco rígido. A limitação é que o arquivo casper-rw deve ir em uma partição FAT. As máquinas mais recentes (UEFI) têm uma partição FAT EFI, mas geralmente são pequenas demais para armazenar um arquivo casper-rw 1G-4G. Em outra partição FAT grande o suficiente, é possível criar diretórios, cada um contendo um arquivo casper-rw para mídias ao vivo possivelmente diferentes. Suponha que sda11 seja 10G e tenha um sistema de arquivos 10G FAT, montado em / mnt / sda11, no qual existem diretórios / A, / B, / C, / D e / E. Suponha que usaremos / A para nossa mídia persistente, colocando um casper-rw lá.

cd /mnt/sda11/A
dd if=/dev/zero of=casper-rw bs=1M  count=4096
mkfs.ext4 -F -O^has_journal -L casper-rw casper-rw

Pegue sua mídia ao vivo criada com persistência e edite o arquivo /boot/grub/grub.cfg e o arquivo /syslinux/txt.cfg, adicionando a palavra "persistente"

"persistent-path=/A"

/boot/grub/grub.cfg ...

menuentry "Try Ubuntu without installing" {
    set gfxpayload=keep
    linux   /casper/vmlinuz.efi  file=/cdrom/preseed/ubuntu.seed boot=casper quiet splash --- cdrom-detect/try-usb=true noprompt persistent persistent-path=/A
    initrd  /casper/initrd.lz
}

/syslinux/txt.cfg

default live
label live
menu label ^Try Ubuntu without installing
kernel /casper/vmlinuz.efi
append noprompt cdrom-detect/try-usb=true persistent persistent-path=/A file=/cdrom/preseed/ubuntu.seed boot=casper initrd=/casper/initrd.lz quiet splash ---
label live-install
...

É isso aí. Você nem precisa renomear / remover o arquivo casper-rw na mídia USB.


Se houver espaço na mídia USB, você pode até copiar o casper-rw do disco rígido de volta para o USB e fazer as alterações com você.


O caminho persistente não permite nenhuma referência explícita ao disco, portanto deve ser exclusivo em todas as partições FAT. Testado com 1 ou 2 partições FAT (uma sendo a partição EFI). Não funcionará em um sistema de arquivos ext2 ou ntfs em vez de FAT. Se você também adicionar a palavra "toram" na mesma linha que "persistente", o sistema de arquivos compactado no USB lento será copiado para o ram e oferecerá um desempenho muito melhor, no entanto, parece haver um problema de desligamento, com a partição FAT não sendo desmontado corretamente (o que parece não causar nenhum problema, mas ...)

ubfan1
fonte
Obrigado. Isso torna as coisas muito mais claras. Suponho que, no estado de inicialização, o NTFS não possa ser reconhecido (certo?), Impossibilitando assim um casper-rw em uma partição NTFS. Então, eu acho que irei com a partição ext4 chamada casper-rw ou tente algumas coisas "toram" ou ramdrive.
LS
Como você modifica grub.cfgou syslinux.txtconsidera que você só pode montar a mídia ao vivo somente leitura, pois é uma iso?
SolsTiCe
O item acima usou o ISO para criar um USB de mídia ao vivo, no qual os arquivos são graváveis. A inicialização do ISO diretamente (fora de um disco rígido, por exemplo) usa um grub totalmente separado (aquele no disco rígido) cujos arquivos são editáveis ​​- neste caso, não é necessário usar os mecanismos de inicialização do ISO.
precisa saber é o seguinte
7

Isso é extremamente fácil se você usar a seguinte configuração:

  1. Instale o Ubuntu em um pendrive SLC USB (preferencialmente o USB 3.0, se o seu hardware o suportar) sem nenhum dos itens do casper (apenas uma instalação normal, tratando o pendrive como um SSD).

    Por quê? Os SLCs são duas vezes mais caros que os MLCs, mas são 4 vezes mais rápidos e duram 8 * mais! Então eles realmente são pequenos SSDs em um bastão!

  2. Otimize o sistema e trate o pendrive como um pequeno SSD, portanto:

    No seu /etc/sysctl.confadd:

    # Fabby: change the "swappiness" to 10 to prevent swapping as much as possible
    # to not wear out the USB stick as the Ubuntu default is optimized for a server.
    # 10 to balance with vfs_cache_pressure
    vm.swappiness = 10
    
    # Fabby: Lower vfs_cache_pressure to 75% 
    # (once cached, probably not immediately needed any more)
    #
    # This percentage value controls the tendency of the kernel to reclaim
    # the memory which is used for caching of directory and inode objects.
    #
    # At the default value of vfs_cache_pressure=100 the kernel will attempt to
    # reclaim dentries and inodes at a "fair" rate with respect to pagecache and
    # swapcache reclaim.  Decreasing vfs_cache_pressure causes the kernel to prefer
    # to retain dentry and inode caches.
    vm.vfs_cache_pressure = 75
    
    # Fabby: Good to improve sequential reads (stop stuttering in movie play)
    # Can also be implemented per disk using udev rules
    vm.max-readahead=2048
    vm.min-readahead=1024
    

    No seu, /etc/fstabadicione os parâmetros em negrito à sua linha USB de inicialização. (Provavelmente será sdcou sdd. A seguir está um exemplo, use o UID, se possível)

    /dev/sdc / ext4 defaults,noatime,discard,errors=remount-ro 0 1

  3. crie 2 usuários: um usuário administrador que tenha seu diretório pessoal no pendrive, mas tenha muito poucos arquivos e um usuário normal que tenha seu diretório pessoal no HDD.

  4. Somente agora insira o HDD e adicione as informações necessárias sobre o HDD para fstabmontar automaticamente o HDD e adicionar os seguintes parâmetros:

    nobootwait,nofail

    para permitir a inicialização mesmo quando o disco rígido não estiver presente (se for esse o caso, apenas o usuário administrador terá acesso, não o usuário normal)

  5. Agora efetue login como usuário administrador e mova o diretório inicial do usuário normal do pen drive para o disco rígido:

cp --preserve=all /home/NormalUser/* /media/ExternalHDD/NormalUser

Se tudo estiver bem:

rm --recursive --force /home/NormalUser/*
cd /home
ln --symbolic /media/ExternalHDD/NormalUser

Feito! :-)

Para constar: eu tenho um pendrive MLC USB 2.0 de 16GB assim (mais do que suficiente para o meu caso de uso e não é muito caro e tem cerca de 5 anos e ainda está em execução!)

Fabby
fonte