Come si ottiene e2fsck per mostrare le informazioni sui progressi?


42

Sto eseguendo e2fsk su un disco ext3 molto grande (1 TB +) con

e2fsck -v /dev/sda1

da RIPLinux avviato con PXE.

ottengo

e2fsck 1.41.6 (30-May-2009)
/dev/sda1 contains a file system with errors, check forced.
Pass 1: Checking inodes, blocks, and sizes

e poi una lunghissima pausa ...

Come faccio ad avere un'idea dell'attività?

Idealmente, un conteggio degli articoli completati rispetto al totale e una sorta di ETA.


Tuttavia, può passare qualche istante dopo il messaggio "Passa 1: Verifica di inode, blocchi e dimensioni" prima che inizi a mostrare la barra di completamento. Sospetto che ci sia una fase iniziale del Pass 1 che non aggiorna la barra di completamento, ma su dischi molto grandi richiede molto tempo.
user2864482

Risposte:


70

La -Cbandiera mostrerà una barra di avanzamento. Differenze di prestazioni a seconda di come viene chiamato fsck.

E molto interessante, se e2fsckè già in esecuzione, è possibile inviare un USR1segnale affinché inizi a visualizzare una barra di avanzamento. USR2fermare. Esempio:

killall -USR1 e2fsck

Da FSCK (8):

   -C     Display completion/progress bars for those filesys-
          tems  checkers (currently only for ext2) which sup-
          port them.   Fsck will manage the filesystem check-
          ers  so  that  only  one  of  them  will  display a
          progress bar at a time.

Da E2FSCK (8):

   -C fd  This  option  causes  e2fsck  to  write  completion
          information  to  the  specified  file descriptor so
          that the progress of the filesystem  check  can  be
          monitored.   This  option is typically used by pro-
          grams  which  are  running  e2fsck.   If  the  file
          descriptor specified is 0, e2fsck will print a com-
          pletion bar as it goes about  its  business.   This
          requires  that e2fsck is running on a video console
          or terminal.

2
Sembra che la tua pagina man sia per una versione diversa di e2fsck. Pubblicherò una risposta dalla mia versione, ma è molto vicina e la tua risposta è stata sufficiente per farmi leggere la parte giusta della pagina man. Grazie mille!
Tim Abell

Ah, buona chiamata ... ho aggiornato. Prego.
Warner

4
Hmm ... oggi ho imparato (il segnale USR per ottenere quell'output da fsck). Grazie per la conoscenza, @Warner.
Bart Silverstrim,

1
Il flag -USR1 è inestimabile. Ho creato un account qui solo per poter votare.
Rajesh J Advani,

17

dalla pagina man per la versione 1.41

   -C fd  This option causes e2fsck to write completion information to the specified file descriptor so that the progress of the
          filesystem  check  can be monitored.  This option is typically used by programs which are running e2fsck.  If the file
          descriptor number is negative, then absolute value of the file descriptor will be used, and the  progress  information
          will  be  suppressed  initially.  It can later be enabled by sending the e2fsck process a SIGUSR1 signal.  If the file
          descriptor specified is 0, e2fsck will print a completion bar as it goes  about  its  business.   This  requires  that
          e2fsck is running on a video console or terminal.

quindi immagino che la risposta sia

e2fsck -C 0 /dev/sda1

3

ps -ef | grep fsck

  5079  5007 47 00:55 pts/1    00:08:25 /sbin/fsck.ext3 -yv /dev/hda2

con l'ID del processo,

uccidere -USR1 5079


2
Questa risposta è uguale alla risposta accettata, tranne per il fatto che non fornisce informazioni contestuali per aiutare l'utente a capire perché stanno seguendo le tue istruzioni. Per il futuro, tieni presente che preferiamo risposte che spieghino sia il How sia il Why di una soluzione (il principio "insegnare a un uomo a pescare").
voretaq7,

3

Perché?

I sistemi BSD e i loro discendenti hanno il segnale SIGINFO. Rende i programmi in grado di trasmettere il loro stato corrente alla console. Molti strumenti di base BSD conoscono questo segnale e lo supportano. È possibile inviare questo segnale a un processo corrente usando Ctrl + T.

I sistemi SysV non hanno tale segnale e nemmeno Ctrl + T. Alcuni strumenti Linux supportano invece SIGUSR1. So solo di "dd" e "e2fsck" ma ce ne possono essere di più. Non c'è Ctrl +? scorciatoia per inviarlo, quindi devi farlo manualmente usando "kill -USR1" sul pid del processo.

La maggior parte degli altri programmi reagirà a SIGUSR1 nello stesso modo in cui reagisce a SIGTERM (esci) quindi non inviare questo segnale a meno che tu non sappia che è supportato.

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.