GNU/Linux >> Znalost Linux >  >> Linux

Vynutit vypnutí externího pevného disku na linuxu (raspberry pi)

Ano, je to možné, ale bude to vyžadovat určitou vlastní vývojovou práci a ne triviální a kód bude specifický pro čip USB->SATA bridge UVNITŘ vašeho krytu.

Dohoda spočívá v tom, že můstek USB slouží jako více než jen elektrický převodník. HDD připojený přes USB emuluje jednotku SCSI, která má jinou sadu příkazů. Zatímco standardní příkazy čtení/zápis/hledání překládají neustále, exotičtější rotace nahoru/dolů ne. Většina čipů to neudělá. Navíc NENÍ univerzální API na úrovni čipu. Takže kdybych napsal kód, musel bych mít programovací manuál pro čip USB bridge.

Sečteno a podtrženo, pokud nemáte programovací specifika na čipu a nejste obeznámeni s instrukční sadou ATA a SCSI a zapouzdřujícími průchozí příkazy, pak se bez nich budete muset obejít. Příliš mnoho práce a žádný standard.


Je zcela možné, že signály, které vysíláte, jsou zanedbané. Neposkytli jste výstup

sudo hdparm -I /dev/sdX

což by nám řeklo možnosti disku, ale mnoho disků na tyto příkazy prostě nereaguje.

Naštěstí existuje velmi pohodlná utilita, hd-idle, kterou si můžete stáhnout zde a která vám umožní vynutit roztočení disku po určité zadané době. Program byl vyvinut speciálně pro Debian (ale obecně funguje na Linuxu), takže jeho instalace by pro vás měla být velmi snadná. Jen doufám, že to také funguje na architektuře ARM, což nemohu testovat.

Edit:na raspbian se zkompiluje a nainstaluje správně.


Neměl jsem štěstí s hd-idle; běželo, ale nefungovalo. Nakonec jsem napsal skript níže:

#!/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. Použití síly na příkazovém řádku Linuxu

  2. Jak vynutit instalaci Redhat Linuxu v textovém režimu

  3. Vynutit restart vzdáleného serveru Linux

  1. Linuxový příkaz echo

  2. Příklady příkazů echo v Linuxu

  3. Proces na pozadí v linuxu

  1. linuxový shell wc -c počet znaků +1

  2. Co dělá % v řetězcích shellu Linux?

  3. Vynutit místní provoz IP na externí rozhraní