Jak bezpiecznie wyłączyć Raspberry Pi?

30

Zwykle na komputerze stacjonarnym, jeśli uruchamiam sudo shutdown -P now, komputer wyłącza się całkowicie i mogę go ponownie włączyć za pomocą przycisku. (Podobnie, jeśli komputer ulegnie awarii, mogę wymusić ponowne uruchomienie, przytrzymując przycisk zasilania przez około 5 sekund.)

Raspberry Pi nie ma przycisku zasilania. W rzeczywistości, jeśli uruchomię sudo shutdown -P now, dioda zasilania nadal wydaje się być włączona, i aby ją ponownie uruchomić, wydaje się, że muszę ją odłączyć i podłączyć ponownie. Wydaje się to nieco analogiczne do „Teraz można bezpiecznie wyłączyć komputer” w starych wersjach systemu Windows.

W którym momencie można bezpiecznie wyciągnąć wtyczkę z Raspberry Pi? czy robię coś źle?

George Simms
źródło
2
Czerwona dioda led wskazuje, że Oi otrzymuje moc. Ten, na który chcesz zwrócić uwagę, to zielony. Jeśli miga, oznacza to, że Oi uzyskuje dostęp do karty microSD. Po zamknięciu obejrzyj. Powinien błyskać 4-10 razy. Gdy to nastąpi, można bezpiecznie odłączyć wtyczkę.
TheXed
1
Jeśli twoja karta SD jest sformatowana w ext4 (lub innym dzienniku FS), szczerze mówiąc mniej lub bardziej bezpiecznie jest ją wyłączyć, gdy pi jest po prostu bezczynne. Przynajmniej bezpieczniej niż było po prostu wyłączyć komputer z systemem Windows95. (Nie dlatego, że polecam go do zastosowań krytycznych z punktu widzenia bezpieczeństwa ... ale i tak nie jest idealnie idealny.)
leftaroundabout
4
@leftaroundabout, kronikowanie nie robi wiele, gdy podstawowy nośnik nie jest w stanie w pełni poradzić sobie z awarią zasilania. Często muszę ponownie sformatować moje karty SD po awarii zasilania.
Mark
@ Mark: możliwe. Mam plik pi, który często odłączałem niepomyślnie bez komplikacji, ale w rzeczywistości ten korzysta tylko z karty tylko do modułu ładującego i ma wszystko inne na dysku twardym USB.
leftaroundabout
@ Mark To również nie znaczy wiele, gdy jest w środku zapisu danych. Nadal stracisz swoje dane. Po prostu gwarantuje spójność systemu plików.
Bob

Odpowiedzi:

18

Nie robisz nic złego.

Dioda LED aktywności powinna migać 3 lub 4 razy tuż przed wyłączeniem zasilania. Odłączenie zasilania jest wtedy bezpieczne.

Zazwyczaj zamykam się, odchodzę na kilka minut, a następnie wyciągam przewód zasilający.

joan
źródło
15

Nie trzeba odłączać zasilania, aby ponownie uruchomić Pi. W pobliżu karty SD znajduje się kilka padów (myślę, że może być oznaczone resetowanie - nie widzę na moim Pi, ponieważ wszystkie mają lutowane przełączniki na płycie). Chwilowo krótki, aby ponownie uruchomić.

Najnowsze Rasbpian mają wbudowany proces wyłączania (obsługiwany przez systemd-logind)

Dodaj następujące elementy do /boot/config.txt

dtoverlay=gpio-shutdown,gpio_pin=5

Umożliwia to przełącznikowi podłączonemu między stykiem 29 (GPIO 5) a stykiem 30 (Gnd) zainicjowanie uporządkowanego wyłączenia Pi.

Można użyć prawie dowolnego pinu - domyślnie jest to pina 5 (GPIO 3), chociaż często jest to używane w I²C, ,gpio_pin=21używałby tych samych pinów, które zastosowano w pinie skryptu 40 (GPIO 21) i pinie 39 (Gnd)

Polecam sudo poweroffwyłączyć Pi. Nie ma nic złego w tym, co robisz, ale poweroffpowoduje, że zielona dioda LED miga 10 razy co 1 sekundę, gdy można bezpiecznie wyłączyć zasilanie.

Mam skrypt w języku Python, który wyłącza Pi za pomocą przycisku.

#!/usr/bin/env python2.7
#-------------------------------------------------------------------------------
# Name:         Shutdown Daemon
#
# Purpose:      This program gets activated at the end of the boot process by
#               cron. (@ reboot sudo python /home/pi/shutdown_daemon.py)
#               It monitors a button press. If the user presses the button, we
#               Halt the Pi, by executing the poweroff command.
#
#               The power to the Pi will then be cut when the Pi has reached the
#               poweroff state (Halt).
#               To activate a gpio pin with the poweroff state, the
#               /boot/config.txt file needs to have :
#               dtoverlay=gpio-poweroff,gpiopin=27
#
# Author:      Paul Versteeg
#
# Created:     15-06-2015, revised on 18-12-2015
# Copyright:   (c) Paul 2015
# https://www.raspberrypi.org/forums/viewtopic.php?p=864409#p864409
#-------------------------------------------------------------------------------

import RPi.GPIO as GPIO
import subprocess
import time

GPIO.setmode(GPIO.BCM) # use GPIO numbering
GPIO.setwarnings(False)

# I use the following two GPIO pins because they are next to each other,
# and I can use a two pin header to connect the switch logic to the Pi.
# INT = 17    # GPIO-17 button interrupt to shutdown procedure
# KILL = 27   # GPIO-27 /KILL : this pin is programmed in /boot/config.txt and cannot be used by any other program
INT = 21    # GPIO button interrupt to shutdown procedure

# use a weak pull_up to create a high
GPIO.setup(INT, GPIO.IN, pull_up_down=GPIO.PUD_UP)

def main():

    while True:
        # set an interrupt on a falling edge and wait for it to happen
        GPIO.wait_for_edge(INT, GPIO.FALLING)
#       print "button pressed"
        time.sleep(1)   # Wait 1 second to check for spurious input
        if( GPIO.input(INT) == 0 ) :
            subprocess.call(['poweroff'], shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)

if __name__ == '__main__':
    main()
Milliways
źródło
Czy możesz dodać ten kod python w celach informacyjnych, a co jeśli podam źródło zasilania, czy automatycznie zacznie pi?
Gaurav Dave
4

Wydaje się, że nikt nie odpowiedział na to pytanie: „W którym momencie można bezpiecznie wyciągnąć wtyczkę z Raspberry Pi?”

Aby poprawnie zamknąć system, biegniesz

sudo shutdown

Gdy to zrobisz, zobaczysz, że kontrolka „ACT” (zielona) miga solidnie 10 razy (w odstępach 0,5 sekundy). Gdy przestanie migać, zielone światło zgaśnie. W tym momencie można bezpiecznie odłączyć zasilanie lub wyciągnąć wtyczkę.

Czerwone światło pozostanie włączone, dopóki do Pi zostanie doprowadzona moc.

Po wyłączeniu należy odłączyć zasilanie, a następnie ponownie włączyć zasilanie, aby włączyć Pi.

Electronics_John
źródło
2

Jak stwierdzono w poprzednich odpowiedziach, czerwona dioda LED oznacza, że ​​pi jest zasilane, podczas gdy zielona dioda LED oznacza aktywność (uważam, że aktywność dysku)

możesz albo wyciągnąć wtyczkę, gdy zielona dioda przestaje migać po komendzie wyłączania, lub zewrzeć pady rozruchu / resetu znajdujące się na płycie

Ta strona zawiera świetne instrukcje, jak dodać przełącznik twardego resetu, jeśli chcesz lutować kilka pinów.

Jeśli korzystasz z twardego resetu, pamiętaj, aby go użyć dopiero po zatrzymaniu lub zamknięciu systemu lub w ostateczności, ponieważ natychmiast uruchamia on ponownie procesor, jeśli piszesz na kartę SD, możesz potencjalnie uszkodzić go tak samo, jak wyciągnięcie zasilania podczas gdy działa

S.Rose
źródło
2

Oto naprawdę prosty skrypt Pythona zamykającego.

import RPi.GPIO as GPIO 
import os 
channel=11 
GPIO.setmode(GPIO.BOARD) 
#Pin 11 & Gnd 

GPIO.setup(channel, GPIO.IN, pull_up_down=GPIO.PUD_UP) 
GPIO.wait_for_edge(channel, GPIO.FALLING) 
os.system("sudo shutdown -h now")
Andy Anderson
źródło