Spegnere il Pi in modo sicuro senza SSH o un monitor?


25

Il mio Pi attualmente non risponde a SSH e l'unico monitor HDMI che ho è una grande TV a diversi metri di distanza. Ho sentito cose brutte riguardo a scollegarlo, ma ho altre opzioni?

Attualmente esegui raspbian senza testa, forse potrei collegare una tastiera e indovinare i comandi?


3
Per ora non funzionerà, ma potresti aggiungere un pulsante ai tuoi pin GPIO per spegnerlo correttamente in futuro
Rizzle Light,

Come punto dati: da diversi anni utilizzo RPis per vari compiti su robot mobili alimentati a batteria. Questi si interrompono spesso e senza preavviso. Devo ancora riscontrare un problema con una qualsiasi delle schede Pis / SD (beh, a parte la connessione SD che si allenta a causa della vibrazione costante e della rottura della parete).
Mike Ounsworth il

Non è possibile spostare temporaneamente il monitor HDMI su alcuni metri e poi rimetterlo al termine?
jpmc26,

@ jpmc26 è giù per una rampa di scale ed è una TV abbastanza grande.
vpzomtrrfrt,

Risposte:


25

Anche se dovrebbe essere considerato come ultima risorsa poiché aumenta il rischio di corruzione del filesystem, la disconnessione del cavo di solito va bene se la spia verde ACT non lampeggia intensamente .

Per impostazione predefinita, il led ACT mostra l'attività I / O sulla scheda SD. Se è spento, molto probabilmente il sistema è inattivo. Questo non è necessariamente vero, ma uccidere un sistema che è impegnato con attività ad alta intensità di CPU (e non I / O) non è comunque un problema intrinseco. Il sistema operativo memorizza nella cache le informazioni del filesystem in memoria, il che significa che potrebbe non essere sincronizzato con l'archiviazione effettiva sulla scheda SD, ma questo dovrebbe essere trattato almeno ogni pochi secondi (a volte potresti essere in grado di dedurre questo modello dall'ACT guidato).

Quindi, se appare inattivo dopo averlo visto per 5-10 secondi e non hai altra scelta, vai avanti e scollega l'alimentazione. Ancora una volta, questo non garantisce nulla e ci sono scenari sfortunati in cui il sistema potrebbe essere bloccato e la sincronizzazione del filesystem non si verifica correttamente, ma nella maggior parte dei casi dovresti stare bene.

Probabilmente ho dovuto tirare il cavo su un pi (o ho avuto un'interruzione di corrente) più di cento volte in questo modo e non ricordo di aver mai avuto dolore a causa sua. A volte inserisco la scheda in un'altra macchina ed eseguo e2fsck -fil filesystem di root, il che vale la pena. Il sistema operativo controllerà automaticamente il file system all'avvio, ma è possibile che questo controllo fallisca (o non venga eseguito correttamente) e passi inosservato.


8
Il periodo di inattività da 5 a 10 secondi è perché l'impostazione predefinita di Linux /proc/sys/vm/dirty_writeback_centisecsè 500 centisecondi (5 secondi). Quindi se Linux ha dati non scritti che si trovano nei buffer I / O, inizierà a scaricarli sul disco dopo 5 secondi, a meno che tu non li abbia modificati. In teoria un journaling FS dovrebbe essere sicuro contro la corruzione dell'intero filesystem anche se si spegne durante una scrittura, ma aspettare che sia inattivo ti dà una possibilità molto migliore di non danneggiare anche i file modificati di recente. (Quale journaling protegge solo con i dati ext3 / ext4 = journal, che non è l'impostazione predefinita)
Peter Cordes,

31

Chiave Magic SysRq

Questo dovrebbe farti cominciare.

La chiave magica SysRq è una combinazione di tasti compresa dal kernel Linux, che consente all'utente di eseguire vari comandi di basso livello indipendentemente dallo stato del sistema. Viene spesso utilizzato per ripristinare da blocchi o per riavviare un computer senza corrompere il filesystem . Il suo effetto è simile al pulsante di ripristino hardware del computer (o interruttore di accensione) ma con molte più opzioni e un controllo molto maggiore.

Puoi collegare una tastiera e digitare queste cose in cieco (senza monitor).

Nessuna corruzione del filesystem, nessun hardware aggiuntivo richiesto.


Pulsante GPIO

Come suggerito da Rizzle Light, potresti prendere una sorta di pulsante e collegarlo ai pin GPIO, e fare un po 'di magia di programmazione per fare in modo che premendo il pulsante esegua il comando "poweroff" (con i privilegi di amministratore, ovviamente.)

Ci sono tonnellate di tutorial di programmazione GPIO online che puoi adattare, come questo .

Rahul R Dhobi ha una bella sceneggiatura in pitone a due righe che spegnerà un Raspberry Pi:

import os
os.system("shutdown now -h")

esegui il tuo script con i privilegi di root.


3
La documentazione SysRQ del kernel Linux è l'unica documentazione che io abbia mai stampato su carta :). (E questo era quando avevo solo un computer.)
Peter Cordes il

3

Non c'è bisogno di indovinare; basta collegare la tastiera e digitare questo e premere enter:

sudo shutdown -h now

Il shutdowncomando necessita di un privilegio di root per essere eseguito.


4
Dovresti prima effettuare il login (cieco) e utilizzare un account privilegiato o (presumendo che l' piutente superpotente di Raspbian ...) anteponi sudo.
Riccioli d'oro

2
@goldilocks: probabilmente avrete bisogno di mettere sudoalla partenza del comando, piuttosto che aggiungendo che :-)
psmears

@goldilocks: Giusto, comunque, il login non sembra molto fastidioso.
Corse di leggerezza con Monica il

1
Non stavo commentando il livello di difficoltà;) @psmears Whoops, ti ho lasciato! Corretto.
Riccioli d'oro

@goldilocks: Abbastanza giusto :)
Corse di leggerezza con Monica il

1

La porta seriale è un buon fallback per tali situazioni ed è abilitata per impostazione predefinita.

Puoi provare a connetterti alla porta seriale usando Putty. Se funziona, accedi utilizzando il tuo nome utente e invia "sudo poweroff" per chiudere in modo sicuro.

Vedi http://elinux.org/RPi_Serial_Connection per maggiori informazioni ...


0

Stavo testando un file server in una parte della casa senza un facile accesso a un monitor quando ho riscontrato lo stesso problema. Quanto segue ha funzionato per me, supponendo che il tuo pi si avvii nell'ambiente GUI predefinito:

  1. Collegare una tastiera (se non è già stata eseguita).
  2. Colpire Alt-F2 per aprire una finestra di dialogo Esegui.
  3. Digita quanto segue e premi Invio per avviare una finestra Terminale:

    lxterminal
    
  4. Attendi qualche secondo per essere sicuro, quindi digita quanto segue:

    sudo shutdoown now -h
    
  5. Premi Invio.

Questo dovrebbe chiudere il Pi. Se funziona, le luci della tastiera e tutti i dispositivi USB collegati si spengono. In caso contrario, puoi ripetere i passaggi precedenti nel caso in cui tu abbia commesso un errore digitando i comandi.


-1

Pulsante finestra - nove volte il tasto verso il basso - 2 volte entra ... Goditi ...


1
Grazie per la risposta: tutti gli input sono apprezzati. Mi è stato chiesto di suggerire alcune modifiche per aiutarti a migliorare la tua risposta: in primo luogo, presumo per "pulsante Finestra", intendi il pulsante con il logo Microsoft sulle tastiere Windows. In tal caso, dovresti dichiararlo esplicitamente. Inoltre, nella risposta è implicita una sequenza di tasti, ma non abbastanza specifica. In breve, ti preghiamo di riscrivere la tua risposta per chiarire in modo inequivocabile quale sia effettivamente la tua risposta, piuttosto che fare affidamento su ipotesi.
Seamus,

Si noti inoltre che chi asker esegue raspbian senza testa . Ciò significa che l'ambiente desktop non è installato, quindi questa sequenza di tasti probabilmente non sarà di aiuto.
Hydraxan14,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.