Wymuś rozkładanie zewnętrznego dysku twardego na Linux (Raspberry Pi)

16

Obecnie konfiguruję serwer domowy za pomocą Raspberry Pi z zewnętrznym dyskiem twardym podłączonym przez USB. Jednak mój dysk twardy nigdy się nie obraca, gdy jest bezczynny.

Próbowałem już podpowiedzi pod adresem raspberrypi.org ... bez powodzenia.

1.)

sudo hdparm -S5 /dev/sda

zwroty

/dev/sda:
 setting standby to 5 (25 seconds)
SG_IO: bad/missing sense data, sb[]:  70 00 04 00 00 00 00 0a 00 00 00 00 44 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

2.)

sudo hdparm -y /dev/sda

zwroty

/dev/sda:
 issuing standby command
SG_IO: bad/missing sense data, sb[]:  70 00 04 00 00 00 00 0a 00 00 00 00 44 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

... i 3.)

sudo sdparm --flexible --command=stop /dev/sda

zwroty

/dev/sda: HDD         1234

... bez rozwijania napędu.

Używam następującego sprzętu:

  • Inateck FDU3C-2 podwójna stacja dokująca do dysku twardego USB 3.0
  • Western Digital WD10EZRX Zielony 1 TB

Czy to możliwe, że wysłane sygnały spin-down są gdzieś nadpisywane / gubione / ignorowane?

użytkownik258346
źródło
1
Aktualizacja: Wspomniana stacja dokująca Inateck ma funkcję klonowania dysków twardych, zapewniając port master / source oraz port slave / sink dla dysków twardych. Po podłączeniu dysku twardego do portu slave, wspomniane powyżej polecenia, treningu. Ogranicza to problem braku spin-down do portu master.
user258346
1
Jeśli uważasz, że to rozwiązanie, powinieneś zaakceptować własne rozwiązanie. Choć może to wydawać się banalne, jest przydatne dla przyszłych czytelników z tym samym problemem.
MariusMatutiae
1
Zdajesz sobie oczywiście sprawę z tego, że polecenie, którego używasz w skrypcie, jest takie samo, jak powiedziałeś, że nie działa, prawda? hdparm -y / dev / sda ...
MariusMatutiae

Odpowiedzi:

4

Nie miałem szczęścia z HD-Idle; działał, ale nie działał. W końcu napisałem poniższy skrypt:

#!/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
użytkownik300457
źródło
4
Myślałem, że hdparm -ynie działa.
Cristian Ciupitu
Dzięki, działa idealnie. Mój niebieski dysk twardy WD obraca się teraz, gdy nie jest używany. Jaki jest Twoim zdaniem rozsądny odstęp czasu dla wywołania skryptu przez crona? Na razie nazywam to co 15 minut.
Tarator
5

Tak, jest to możliwe, ale będzie wymagać niestandardowych prac programistycznych, a nie trywialnych, a kod będzie specyficzny dla mostka USB-> SATA WEWNĄTRZ twojej obudowy.

Chodzi o to, że mostek USB służy nie tylko jako konwerter elektryczny. Dysk twardy podłączony do USB emuluje dysk SCSI, który ma inny zestaw poleceń. Podczas gdy standardowe polecenia odczytu / zapisu / wyszukiwania tłumaczą cały czas, bardziej egzotyczne obroty w górę / w dół nie. Większość żetonów tego nie zrobi. Ponadto NIE ma uniwersalnego interfejsu API na poziomie układu. Więc gdybym napisał kod, musiałbym mieć instrukcję programowania dla mostka USB.

Podsumowując, jeśli nie masz specyfiki programowania na chipie i nie znasz zestawu instrukcji ATA i SCSI oraz enkapsulujących poleceń tranzytowych, to po prostu będziesz musiał się obejść. Zbyt dużo pracy i brak standardu.

David Lethe
źródło
5

Jest całkiem możliwe, że wysyłane sygnały są zaniedbywane. Nie podano danych wyjściowych

sudo hdparm -I /dev/sdX

co powiedziałoby nam o możliwościach dysku, ale wiele dysków po prostu nie reaguje na te polecenia.

Na szczęście istnieje bardzo wygodne narzędzie hd-idle, które można pobrać stąd , co pozwala na wymuszenie zatrzymania dysku po określonym czasie. Program został opracowany specjalnie dla Debiana (ale ogólnie działa na Linuksie), więc jego instalacja powinna być bardzo łatwa. Mam tylko nadzieję, że działa on również na architekturze ARM, czego nie mogę przetestować.

Edycja: kompiluje się i instaluje poprawnie na raspbian.

MariusMatutiae
źródło