Liga / desliga do HDD em espera: evite girar

3

No meu sistema Linux Mint 17.1, estou usando um disco rígido Western Digital WD20EZRX para backup. Para minimizar o consumo de energia e estender a resistência da unidade, quero que o HDD normalmente estar no estado de espera decrescente e apenas girar quando for explicitamente necessário.

Isso pode ser alcançado de duas maneiras: A abordagem trivial seria configurar o HDD no modo de espera manualmente usando hdparm -y /dev/sdb . No entanto, a desvantagem seria a rotação da unidade durante a inicialização até que ela seja definida para dormir novamente por um script. Portanto, eu gostaria de deixar a unidade Power-Up em Standby , PUIS , para evitar que se soltem pela primeira vez.

Alguns drives WD suportam o PUIS, embora seja chamado de PM2 , Modo de Gerenciamento de Energia 2 pela Western Digital. Este recurso está sendo ativado usando Jumpers, conforme descrito em este artigo da Base de conhecimento da WD . O resultado dessa configuração pode ser verificado usando hdparm :

# hdparm -I /dev/sdb | grep "Power-Up In Standby"
   *    Power-Up In Standby feature set

No entanto, a unidade ainda gira durante a inicialização, mesmo antes de a tela de inicialização do Grub ser exibida. Poderia ser um Bootloader configurado incorretamente, que está procurando por sistemas operacionais em todos os HDDs conectados?

    
por Finwood 18.02.2015 / 11:39

2 respostas

2

Eu pesquisei o exato há alguns anos atrás, para o Linux Mint e um antigo HD que só era usado para armazenamento ocasional de dados também.

As soluções que encontrei (não têm mais os links à mão) foram as mesmas que parece que você encontrou: um disco rígido poucos pode ter uma configuração de jumper em> causa que a unidade permaneça dormindo / não gire no momento da inicialização. Mas não funcionou, meus resultados foram exatamente os mesmos que os seus, ele ainda gira na inicialização. Eu não encontrei nenhuma correção para isso, pois eu sei que era o BIOS / GRUB / linux, separadamente ou trabalhando juntos, ou apenas o próprio HD que não estava escutando.

Eu fiz alguns testes "hot plug" / "hot swap" , conectando a energia a um disco rígido (SATA) enquanto o computador estava funcionando & corrida. Ele gerou algumas entradas de log (dmesg & /var/log/syslog ) e funcionou com êxito . Então, quando terminar com a unidade (sync, unmount, sleep / hdparm -y ), desconecte a energia novamente. Trabalhou! Mas aparentemente precisa de uma placa-mãe compatível & OS, então YMMV.

No entanto, puxar o plugue de alimentação para usar o drive não é muito conveniente ou fácil, então eu liguei um switch de um só pólo single-throw - DPST, Wikipedia tem um diagrama - tem 4 terminais, para os 2 fios de alimentação separados (12V & 5V?), Para mantê-los separados e ligá-los on / off ao mesmo tempo . Conectando-o ao poder do HD, posso ativar o & fora da unidade sempre que necessário.

Atualização:

Hot swapping usado para trabalhar no Linux Mint 14/15/16, mas por algum motivo ele parou de funcionar em 17 & Estou supondo que alguma mudança no kernel tenha parado. Agora, a troca automática de um disco rígido parece funcionar, mas a unidade lê como corrompida , somente uma reinicialização na inicialização faz com que ela funcione com êxito. Talvez haja uma maneira fácil de fazê-lo funcionar novamente ou algum kernel recompilado seja necessário com alguns switches especiais ...?

Atualização 2

O hot swap aparentemente está funcionando novamente para o Ubuntu 16.04 (o Mint 18 também deve funcionar).

    
por 18.02.2015 / 12:32
2

O kernel do Linux roda a unidade. Dê uma olhada nessas linhas em drivers / ata / libata-core.c (código-fonte do kernel):

if (!tried_spinup && (id[2] == 0x37c8 || id[2] == 0x738c)) {
    tried_spinup = 1;
    /*
     * Drive powered-up in standby mode, and requires a specific
     * SET_FEATURES spin-up subcommand before it will accept
     * anything other than the original IDENTIFY command.
     */
    err_mask = ata_dev_set_feature(dev, SETFEATURES_SPINUP, 0);
    if (err_mask && id[2] != 0x738c) {
        rc = -EIO;
        reason = "SPINUP failed";
        goto err_out;
    }
    /*
     * If the drive initially returned incomplete IDENTIFY info,
     * we now must reissue the IDENTIFY command.
     */
    if (id[2] == 0x37c8)
        goto retry;
}

Se você comentar essas linhas e recompilar o kernel, as unidades não serão ativadas. Então você precisará de um comando para girá-los, por exemplo, quando o hdparm desativa o PUIS, ele gira a unidade. Dê uma olhada neste link .

É tudo o que sei sobre o PUIS.

Editar: Eu só notei que sua unidade gira antes da tela do grub: isso significa que a placa-mãe está girando a unidade. Você pode tentar desabilitar a porta sata correspondente em sua configuração BIOS / UEFI, se isso permitir isso, e tentar novamente. Se estiver funcionando, a unidade permanecerá imóvel até que o kernel a execute, depois da tela do grub e antes do prompt de login do usuário, e você poderá encontrar no dmesg

ataX.00: failed to IDENTIFY (SPINUP failed, err_mask=0x4)
ataX.00: revalidation failed (errno=-5)
ataX: SATA link up 6.0 Gbps (SStatus 133 SControl 300)

Neste ponto, se você hackear o kernel, a unidade não será ativada como descrevi anteriormente.

Editar 2: Eu encontrei um comando melhor para girar o disco:

sg_sat_set_features --feature=7 /dev/sdX

faz parte do pacote sg3_utils, requer privilégios de root, mas roda bem o disco. Poste atualizado no fórum arch linux , essa é a minha solução final por enquanto. Um pequeno resumo desse post:

  • se o disco habilitado para o PUIS for ativado antes da tela do carregador de inicialização, tente desabilitando a porta sata correspondente, ou tente um sata PCI-ex cartão controlador
  • recompile o kernel para desativar o comando que gira os discos no estado PUIS
  • use sg_sat_set_feature para girar o disco
  • rescan sata port para obter acesso a partições
por 17.05.2017 / 14:40