Linux na RAM: maneira debirf
Você quer ter velocidade absoluta de disco hoje em dia, não é? Vamos revisar como isso poderia ser feito com versão e automação em 2018.
Do moderador: um artigo em inglês chegou até nós na Sandbox. Lemos e decidimos publicá-lo como um experimento de sexta-feira. Não julgue estritamente, todos paz e feliz sexta-feira! Vamos nos unir! Em suma, Do fundo dos corações de Aua.
Changelog:
- O idioma do artigo é corrigido em inglês
- repositório de amostra introduzido no github
- Adicionados parâmetros de teste
- asciicast adicionado
Você deve saber antes de executar este tutorial:
- linux essencial
- a principal diferença entre bash e sh (debirf escrito em sh, por isso recomendo seguir o estilo)
- como formatar a chave usb (de qualquer forma)
- quais drivers são necessários para o seu hardware (ou você pode depurá-lo via dmesg | lspci)
- como obter os objetivos da sua tarefa através do script
você pode substituir:
- carta usb de /dev/sdbpara qualquer outro (/dev/sdd)
- diretório de trabalho de /root/Projects/debirf/à sua escolha (/home/username/Documents/debirf)
- ponto de montagem de /media/root/8B46-1189para/media/username/myflashdrive
Passos para a preparação
Eles são (opcionais) ativam componentes não livres para instalação básica. Além disso, acho que você precisará do repositório não-livre.
- abra o número de linha 107 do arquivo /usr/bin/debirfcomonano +107 $(which debirf)
- função find create_debootstrap
- encontre uma linha como local OPTS="
- add --components main,contrib,non-freeentre parênteses
Até o início:
Vamos imaginar, nossa unidade flash:
- deve ser rápido, por isso é recomendável usar a classe 8+ ou a inicialização levará tempo suficiente
- / dev / sdb
- formatado
- montado em /media/root/8B46-1189.
- nosso diretório de trabalho /root/Projects/debirf/
Instalar debirf
 apt-get install -yq debirf mtools genisoimage 
- mtools necessários para criar iso via debirf (não funcionando, mas necessário)
- genisoimage necessário para criar iso de trabalho real (opcional)
Preparar o diretório de trabalho debirf
 mkdir -p /root/Projects/debirf tar xzf /usr/share/doc/debirf/example-profiles/rescue.tgz -C /root/Projects/debirf cd /root/Projects/debirf/rescue 
 DEBIRF_LABEL="debirf-rescue" DEBIRF_SUITE=stretch DEBIRF_DISTRO=debian DEBIRF_MIRROR=http://ftp.ru.debian.org/debian/ 
Criar LiR
- Execute o debirf make .e vá embora. É preciso muito tempo, no mínimo 15 minutos, no hardware superior.
- Execute debirf makeiso .para criar iso não funcionando (necessário para o arquivo grub.cfg)
Teste
- Instalar qemu
 - para linux: apt-get install -yq qemu
- para macos: brew install qemu
 
- decidir quais recursos serão alocados para VM
 - -smp 11 kernel real
- -m 1G1G de memória
 
- adicionais
 - -nographiclançará VM na janela atual do terminal
- --enable-kvmpermite aceleração de hardware
- -kernel vmlinuz-*permite passar diretamente o kernel
- -initrd *.cgzacesso direto ao arquivo .cgz com o initramfs
- -appendpermite ignorar os parâmetros do kernel, eis os parâmetros para executar sem um shell gráfico
 
O comando para iniciar a máquina virtual:
 qemu-system-x86_64 --enable-kvm -kernel vmlinuz-* -initrd *.cgz -append "console=tty0 console=ttyS0,115200n8" -m 1G -smp 1 -net nic,vlan=0 -net user -nographic 
Amostra de teste

Instale o grub na unidade flash e copie o LiR nele
Eu recomendo que você use bios legacy boot e empacote o grub-pc. Não testado com UEFI, mas deve funcionar. As próximas linhas serão:
- criar ponto de montagem (em sistemas com GUI habilitados para montagem automática, não é necessário)
- mount chave usb para o ponto de montagem (em sistemas com interface gráfica do usuário ativada, não é necessária a montagem automática)
- instalar grub
- copiar arquivo grub
- copiar initramfs (sistema)
- copiar vmlinuz (kernel)
- desmontar chave usb
- remover ponto de montagem
 mkdir -p /media/root/8B46-1189 mount /dev/sdb1 /media/root/8B46-1189 grub-install --boot-directory=/media/root/8B46-1189/boot /dev/sdb cp /root/Projects/debirf/rescue/iso/boot/grub/grub.cfg /media/root/8B46-1189/boot/grub/ cp /root/Projects/debirf/rescue/*.cgz /media/root/8B46-1189 cp /root/Projects/debirf/rescue/vmlinuz-* /media/root/8B46-1189 umount /media/root/8B46-1189 rm -rf /media/root/8B46-1189 
Criar iso inicializável (opcional)
- download isolinux.bin
- criar arquivo de configuração isolinux
- criar iso
 mkdir -p rescue/iso/isolinux/ wget -O rescue/iso/isolinux/isolinux.bin 'http://mirror.yandex.ru/centos/7/os/x86_64/isolinux/isolinux.bin' cat << EOF > rescue/iso/isolinux/isolinux.cfg TIMEOUT 5 DEFAULT lir LABEL lir LINUX /vmlinuz-4.9.0-7-amd64 INITRD /debirf-rescue_stretch_4.9.0-7-amd64.cgz EOF genisoimage -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -l -input-charset default -V LiR -A "Linux in RAM" -o rescue/rescue.iso rescue/iso/ 
Verificar resultado
- Instale o hypervisor QEMU apt-get install -yq qemu
- execute qemu-system-x86_64 -enable-kvm -m 512 -hda /dev/sdb
- se o comando anterior falhar, remova -enable-kvm
- A VM será iniciada, inicializada a partir da chave usb
- você deve ver dois itens de menu, diferença no final: console e serial. Selecione a primeira entrada.
- em ~ minuto você verá muitas linhas. após o término - pressione enter para ver a mensagem de boas-vindas
- login: root, sem senha
Personalize-o: Crie um módulo debirf personalizado
Module - script sh executável para execução durante a criação de LiR
- criar arquivo de módulo
- a ordem dos nomes dos arquivos é importante. Na networkarquivosnetworko arquivo de resolução será alterado para o resolvido pelo sistema e você não poderá trabalhar com a rede;
- as linhas de 1 a 3 devem estar presentes, a linha 3 deve apresentar o nome do arquivo
- se você deseja instalar o pacote - use a construção #DEBIRF_PACKAGE>+
- se você quiser trabalhar com rootfs - use $DEBIRF_ROOT
- se você deseja executar o comando no fakeroot - use debirf_exec
Amostra:
 cat <<< EOF > rescue/modules/mi  
e substitua a linha com resolved no arquivo rescue / modules / network com debirf_exec systemctl enable wpa_supplicant@wlp1s0.service systemd-networkd.service systemd-resolved.service
Bônus: lxc no LiR
resgate de módulo / modules / lxc