su executa seu shell de login conforme indicado no banco de dados de login. Isso é /root/zsh , que não existe, então o comando su falha.
chsh só aceita alterar o shell de um usuário que atualmente possui um shell válido (listado em /etc/shells ). Como /root/zsh não é aceito, chsh falha. O usuário root pode alterar o shell de qualquer pessoa, mas esse teste é feito após a verificação de validade do shell atual.
No entanto, o sudo não se importa com o seu shell de login (a menos que você execute sudo -s ou sudo -i ). Portanto, você tem diversas maneiras de reparar seu sistema: sudo /bin/zsh fornece um shell, no qual é possível executar vipw e corrigir a entrada para raiz. Você pode até executar sudo vipw diretamente.
Eu recomendo iniciar um shell de root em um terminal e fazer a mudança de configuração em outro terminal. Não saia do shell de raiz até confirmar que o sistema está de volta ao estado de funcionamento testando que sudo -i ou sudo su funciona.