
Eu uso muito o dd. Vivo com um medo constante de um dia cometer um erro, por exemplo escrever em sda (disco de computador) em vez de sdb (disco USB) e depois apagar tudo que tenho em meu computador.
Eu sei que o dd deveria ser uma ferramenta de usuário avançado, mas ainda assim, não faz sentido para mim que você possa basicamente estragar todo o seu computador pressionando a tecla errada.
Por que não existe uma medida de segurança que impeça o dd de gravar no disco de onde obtém o comando? Não tenho certeza de como alguém faria isso de propósito.
Observe que eu não tentei fazer isso sozinho, apenas li sobre isso, então posso estar errado sobre tudo isso.
Responder1
Eu sei que o dd deveria ser uma ferramenta de usuário avançado, mas ainda assim, não faz sentido para mim que você possa basicamente estragar todo o seu computador pressionando a tecla errada.
Considere os tipos de ferramentas elétricas usadas na construção civil e o que você pode estragar ao fazer alguma coisa errada. Essas coisas poderiam ser mais evitáveis? Provavelmente, mas o contrapeso é até que ponto tornar os acidentes mais evitáveis torna a ferramenta menos útil e/ou mais incómoda.
Dirigir automóveis é uma analogia semelhante com consequências potencialmente muito mais terríveis, mas os seres humanos conseguem fazer isso o tempo todo (até demais, na verdade). É claro que seria mais seguro se o fizessem mais devagar, mas cabe a nós decidir colectivamente quais os riscos que vale a pena correr. Da mesma forma, o computador seria mais seguro se dd
não existisse, mas como se considera que a sua utilidade supera os seus riscos, ele existe.
Por que não existe uma medida de segurança que impeça o dd de gravar no disco de onde obtém o comando?
Na verdade existe, já que por padrão os arquivos de dispositivo (como /dev/sda1
) precisam de privilégios de superusuário para gravar. Portanto, a menos que você esteja trabalhando como root
ou via sudo
, você não pode estragar todo o seu computador com um botão usando dd
.
O que nos leva apor que existem todas as advertências sobre a execução de comandos com privilégios de superusuário. Esses avisos são muito comuns e acho que seria difícil acabar operando um sistema *nix sem tê-los visto, como entrar em uma zona de construção sem perceber oÁREA DO CAPACETEsinais.
Se você não tem motivo para estar em uma zona de construção, vá embora. Se o fizer, tome as precauções de segurança adequadas. O mundo pode ser um lugar perigoso e alguns lugares mais perigosos que outros. Não aja sem pensar. Um grau de segurança que garante que nada de ruim possa acontecer – para que você não precise se preocupar em pensar – implica que você também não pode fazer muita coisa. Às vezes isso é desejável, às vezes não.
Responder2
É razoável perguntar por que o comando dd não verifica primeiro se seu destino contém um sistema de arquivos montado e, em seguida, solicita confirmação ou requer um sinalizador especial. Uma resposta simples é que isso quebraria qualquer script que espera poder usar dd dessa maneira e que não foi projetado para lidar com entradas interativas. Por exemplo, pode ser razoável modificar a tabela de partições de um dispositivo bruto enquanto uma partição desse mesmo dispositivo está montada; você só precisa ter cuidado para modificar apenas o primeiro setor.
Há um grande número de sistemas Linux por aí, e é impossível saber que tipo de configurações malucas as pessoas criaram. Portanto, é muito improvável que os mantenedores do dd façam uma alteração incompatível com versões anteriores que possa causar problemas para um número desconhecido de ambientes.
Responder3
Para "adicionar um pequeno passo, como uma opção ou mensagem de confirmação", você pode fazer o que o artm sugeriu nos comentários da sua pergunta: usar um script wrapper.
Em outras palavras, em vez de lidar diretamente com os argumentos de linha de comando um tanto assustadores do dd, crie um script em bash (ou Python, etc) que receba os argumentos dd nos quais você está interessado, usando uma sintaxe de opção que você está mais confortável com. O script verifica se os argumentos são sensatos e os imprime (e possivelmente a linha de comando dd final) para que você possa verificar se tudo está como deveria estar. E então o script pergunta "OK para continuar? [s/N]", então você deve inserir y
se deseja que o script realmente execute a linha de comando dd que foi construída para você.
Portanto, se você nunca quiser que o script grave em /dev/sda ou em suas partições, você pode impossibilitar isso. Para ajudá-lo a verificar se você realmente selecionou os dispositivos de entrada e saída pretendidos, o script pode usar o comando blkid para obter o UUID e o rótulo do disco para esses dispositivos. Etc.