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/sdb
para 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-1189
para /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/debirf
como nano +107 $(which debirf)
- função find
create_debootstrap
- encontre uma linha como
local OPTS="
- add
--components main,contrib,non-free
entre 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 1
1 kernel real-m 1G
1G de memória
- adicionais
-nographic
lançará VM na janela atual do terminal--enable-kvm
permite aceleração de hardware-kernel vmlinuz-*
permite passar diretamente o kernel-initrd *.cgz
acesso direto ao arquivo .cgz com o initramfs-append
permite 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
network
arquivos network
o 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