zfs pool não disponível na inicialização após configurar o tempo de inatividade e os tempos ociosos da unidade com hd-idle / hdparm

3

Primeiramente, eu configuro meu RHEL7-x64 para acomodar as unidades zfs usando este , este e isso . Eu acredito que tentei hd-idle primeiro, quando os problemas começaram.

Eu escrevi um script idle_drives_enable para lidar com ele @reboot in crontab -e (em um estado atual usando o método hdparm , como meu último esforço) .

#!/bin/bash

# idle_drives_enable
# Sets idle times to drives, usually needed at boot

# Default idle time covers all drives, including zfs drives, unless otherwise specified
DEFAULT_IDLE_TIME=120;

# Root drive we want to increase a bit, so specify separately
ROOT_IDLE_TIME=360;

#------------------------------------------------------------------
# Using hd-idle
# @dependency sudo yum install hd-idle
#
## 120 seconds is 10 minutes, 360 is 30 minutes
## Set default idle time on all.
#/sbin/hd-idle -i $DEFAULT_IDLE_TIME;

## Set root drive idle time longer, incase doing work, dont want to continually be waking it up

## sdb is current root, but sometimes changes
##/sbin/hd-idle -a /dev/sdb

## Use uuid instead because it never changes.  Specifying the root partition is enough to trigger the whole drive.
#/sbin/hd-idle -a /dev/disk/by-uuid/bbc69fc6-12fa-499a-a0c6-e0f65e248ce2 -i $ROOT_IDLE_TIME;

#echo "/usr/local/bin/idle_drives_enable complete! Default idle time of $DEFAULT_IDLE_TIME seconds was set. Additionally, the root drive is set to idle after $ROOT_IDLE_TIME seconds.";


#------------------------------------------------------------------------
# hd-idle is not allowing wake, are these considered scsi??
# testing with hdparm instead

echo "executing /usr/local/bin/idle_drives_enable..."
echo "using hdparm"
echo "Here is the output of the current hdparm -C"
/sbin/hdparm -C /dev/sd?

echo "setting idle times now..."
/sbin/hdparm -q -S  $DEFAULT_IDLE_TIME -y /dev/sd?

echo "done settting idle times. to default idle time ($DEFAULT_IDLE_TIME seconds)."
echo "Here is the output of the current hdparm -C"
/sbin/hdparm -C /dev/sd?

echo "/usr/local/bin/idle_drives_enable complete!"

eu defino zfs prop atime=off
Eu também defino em /etc/fstab noatime para minha unidade de inicialização que contém root / home xfs & swap apenas.

Essas foram as únicas alterações feitas.

Após o primeiro teste de reinicialização, os zfs pools não estão mais disponíveis e isso continua.

Após o teste com hdparm , descobri que ele apresentava os mesmos sintomas (sem zfs na inicialização). Eu finalmente percebi que apenas não estava importando corretamente na inicialização. Se eu apenas zfs export , em seguida, zfs import , o pool voltar a ficar on-line bem, e o sono em modo inativo, e rewaking no acesso ao pool funciona bem neste ponto. (pelo menos quando usar hdparm ). Ainda não pensei nisso quando usei hd-idle .

Curiosamente, descobri que no array 6 unidade RaidZ2 , quando eu acesso determinadas pastas, somente certas unidades despertam, isso é muito legal.

O que eu fiz para tentar corrigir:

  • ativou a propriedade atime no zfs, não corrigiu, então desligou.
  • comentou a tarefa do cron para que os tempos ociosos não sejam definidos na inicialização.

Eu suspeito que eu tentei hd-idle primeiro, e tem algumas configurações residuais que podem não estar funcionando e precisam ser redefinidas.

Alguma idéia de onde procurar e porque o pool do zfs não está mais disponível no boot?

Atualizar No final, acho que acabei de alguma forma atrapalhando minha implementação do ZFS. Este script funciona muito bem. Aqui está o que acabei com se alguém mais quer dormir suas unidades.

#!/bin/bash                                                                                                                                     

# idle_drives_enable
# Sets idle times to drives, usually needed at boot

# Default idle time covers all drives, including zfs drives, unless otherwise specified
DEFAULT_IDLE_TIME=120;

# Root drive we want to increase a bit, so specify separately 
ROOT_IDLE_TIME=360;


#ALLDRIVELIST=("a" "b" "c" "d" "e" "f" "g");
#for DRIVE in "${ALLDRIVELIST[@]}";
#do
#    #/sbin/hdparm -C /dev/sd$DRIVE 
#     
#done

#------------------------------------------------------------------
# Using hd-idle 
# @dependency sudo yum install hd-idle
#
## 120 seconds is 10 minutes, 360 is 30 minutes
## Set default idle time on all.  
#/sbin/hd-idle -i $DEFAULT_IDLE_TIME;

## Set root drive idle time longer, incase doing work, dont want to continually be waking it up

## sdb is current root, but sometimes changes
##/sbin/hd-idle -a /dev/sdb

## Use uuid instead because it never changes.  Specifying the root partition is enough to trigger the whole drive. 
#/sbin/hd-idle -a /dev/disk/by-uuid/bbc69fc6-12fa-499a-a0c6-e0f65e248ce2 -i $ROOT_IDLE_TIME;

#echo "/usr/local/bin/idle_drives_enable complete! Default idle time of $DEFAULT_IDLE_TIME seconds was set. Additionally, the root drive is set to idle after $ROOT_IDLE_TIME seconds.";


#------------------------------------------------------------------------
# hd-idle is not allowing wake, are these considered scsi??
# testing with hdparm instead

echo "executing /usr/local/bin/idle_drives_enable..."
echo "using hdparm"
echo "Here is the output of the current hdparm -C"
/sbin/hdparm -C /dev/sd?

echo "setting idle times now..."
/sbin/hdparm -q -S  $DEFAULT_IDLE_TIME -y /dev/sd?

echo "done settting idle times. to default idle time ($DEFAULT_IDLE_TIME seconds)."
echo "Here is the output of the current hdparm -C"
/sbin/hdparm -C /dev/sd?

echo "/usr/local/bin/idle_drives_enable complete!"
    
por Brian Thomas 23.02.2018 / 21:32

0 respostas