GNU/Linux >> Linux Esercitazione >  >> Linux

Forza lo spin-down del disco rigido esterno su Linux (raspberry pi)

Sì, è possibile ma richiederà un lavoro di sviluppo personalizzato e non banale e il codice sarà specifico per il chip bridge USB->SATA ALL'INTERNO del tuo contenitore.

L'accordo è che il bridge USB funge da più di un convertitore elettrico. Un HDD collegato tramite USB emula un'unità SCSI con un set di comandi diverso. Mentre i comandi standard di lettura/scrittura/ricerca si traducono continuamente, i più esotici spin up/down non lo fanno. La maggior parte dei chip non lo farà. Inoltre NON esiste un'API universale a livello di chip. Quindi, se scrivessi il codice, dovrei avere un manuale di programmazione per il chip bridge USB.

In conclusione, a meno che tu non abbia specifiche di programmazione sul chip e abbia familiarità con il set di istruzioni ATA e SCSI e l'incapsulamento dei comandi pass-through, allora dovrai semplicemente farne a meno. Troppo lavoro e nessuno standard.


È del tutto possibile che i segnali che stai inviando vengano trascurati. Non hai fornito l'output di

sudo hdparm -I /dev/sdX

che ci avrebbe detto le capacità del disco, ma molti dischi semplicemente non rispondono a questi comandi.

Fortunatamente, c'è un'utility molto comoda, hd-idle, che puoi scaricare da qui, che ti permette di forzare lo spin down del disco dopo un periodo di tempo specificato. Il programma è stato sviluppato appositamente per Debian (ma funziona su Linux in generale), quindi la sua installazione dovrebbe essere molto semplice per te. Spero solo che funzioni anche su un'architettura ARM, qualcosa che non posso testare.

Modifica:si compila e si installa correttamente su raspbian.


Non ho avuto fortuna con hd-idle; funzionava ma non funzionava. Ho finito per scrivere la sceneggiatura qui sotto:

#!/bin/bash
# This script looks for recent disk access, and if nothing has changed, puts /dev/"drive" into spindown mode.
# This should be used only is the hdparm power management function is not working.
# Call this script with cron or manually as desired
#
#
#
# Change which drive this script looks at by changing the drive variable below:
drive="sda"
#
#
current=`date`
caller=$(ps ax | grep "^ *$PPID" | awk '{print $NF}')
filename="/tmp/diskaccess.txt"
if [ -f "$filename" ]; then
    stat_old=`cat "$filename" | tr -dc "[:digit:]"`
    stat_new=`cat /sys/block/"$drive"/stat | tr -dc "[:digit:]"`
    if [ "$stat_old" == "$stat_new" ]; then
        stat="0"
        echo "The disk hasn't been used; spinning down /dev/$drive"
        echo $stat_old
        hdparm -y /dev/$drive > /dev/null
    else
        stat="1"
        echo $stat_old
        echo $stat_new
        echo "The drive has been used..."
        echo $stat_new > $filename
    fi
else
    echo "/tmp/diskaccess.txt file does not exist; creating it now."
    echo $stat_new > $filename
fi
echo $stat " - " $drive " - " $current " - by: " $caller >> /tmp/diskaccesslog.txt

Linux
  1. Usando la forza sulla riga di comando di Linux

  2. Processo in background in Linux

  3. linux shell wc -c conta caratteri +1

  4. Cosa fa % nelle stringhe della shell di Linux?

  5. Forza il traffico IP locale su un'interfaccia esterna

Esercitazione sui comandi echo Linux per principianti (5 esempi)

Comando Bash Echo spiegato con esempi in Linux

Comando Echo in Linux

Come utilizzare il comando echo negli script Bash in Linux

echo Command in Linux:7 esempi pratici

Esempi di comandi echo Linux