Ho appena eliminato "/ bin". Qual è il modo migliore per recuperare?


10

Ho appena corso (non di proposito!) rm -rf /bin.

Ho avviato il computer e sto usando Finnix per provare a recuperare da esso. Sono riuscito a montare l'unità e ho confermato che, sì, l'intera /bincartella è stata eliminata.

È possibile recuperare da questo senza reinstallare il sistema operativo?

Sto pensando di poter installare una VM con lo stesso sistema operativo e la stessa architettura (versione di Ubuntu Server 11.10 alpha, x86) e installare tutti i pacchetti che avevo installato sul server, quindi semplicemente copiare la /bincartella.

Funzionerà? Sto meglio ricominciando da capo?

Risposte:


15

In generale, mi spingerei verso una reinstallazione (dai backup che dovresti assolutamente avere). Ma mi sento hacker, quindi ecco un altro modo (supponendo che il tuo sistema sia montato sotto /target):

  1. Ottieni un elenco di tutti i pacchetti installati che contengono file in /bin:

    grep ^/bin/ /target/var/lib/dpkg/info/*.list | sed 's%^.*/\([^/\.]*\).list%\1%' >/tmp/pkglist
    

    (Sul mio sistema Debian Squeeze sono presenti in totale 34 pacchetti, praticamente tutti core)

  2. Scarica ciascuno di quei pacchetti (non potrei essere disturbato a scrivere questo bit, quindi vai su pacchetti.ubuntu.com e scaricalo da qualche parte sotto /target). Se sei fortunato, alcuni dei pacchetti potrebbero ancora fluttuare in giro /target/var/cache/apt/archives.

  3. Per ogni pacchetto, eseguire /target/usr/bin/dpkg -x <package> /target. Sono abbastanza sicuro che dpkgsia tutto autonomo in questi giorni e non dovrei chiamare nulla in /binsé.

Una volta riavviato il sistema, dovresti assicurarti di eseguire un apt-get --reinstall install <all the packages from step 1>, perché (poiché stai eseguendo una pre-release, che Sysadmin Cat dice che è un no-no sui sistemi di produzione) le versioni dei pacchetti che hai appena estratto sono probabilmente diversi da quelli che erano sul sistema prima e vorrai assicurarti che il sistema sappia esattamente cosa.


Bella risposta, ma mi sto perdendo qualcosa? Non dpkg-query -S /binfarebbe lo stesso della tua grep .. | sedstrofa? Se l'elenco deve essere ripulito per elencare un nome di pacchetto per riga, dpkg-query -S /bin | sed 's/\,\ /\n/g'funziona (sebbene abbia un extra: / bin sull'ultima riga).
Janne Pikkarainen,

1
Sì, avrei cercato di ridurre al minimo la quantità di roba eseguita nel sistema di destinazione nel caso in cui qualsiasi esecuzione avesse bisogno di qualcosa /bine non volevo fare affidamento su qualcosa di specifico di Debian nel sistema di salvataggio per farlo come il più generale possibile per i futuri cercatori.
womble

Sembra che questo sia un elenco delle sole utilità di sistema essenziali: non ci sono anche altri pacchetti che contengono file /bin? Devo reinstallare tutti i pacchetti sul mio sistema o solo quelli generati come risultato dell'elenco? (Inoltre: grazie, ti amo!)
Tom Marthenal,

1
In genere, solo i pacchetti essenziali avranno file in /bin- la maggior parte dei pacchetti dovrebbe mettere tutti i loro dati sotto /usr. Sul mio sistema, solo un paio di pacchetti non essenziali (ad es. zsh) Sono nella /binlista "contiene cose in ". I voti positivi sono un ottimo modo per mostrare amore, a proposito ...
womble

1
Ho seguito le tue istruzioni e hanno funzionato perfettamente: il mio server è di nuovo attivo e funzionante. Grazie mille per l'aiuto!
Tom Marthenal,

5

Mentre la tua strategia potrebbe funzionare (ci sono buone possibilità per questo, più se una volta copiato indietro la directory bin, fai una reinstallazione apt-get di tutti i pacchetti nel tuo sistema), può causare problemi in futuro perché potresti ottenere un server instabile.

Se ciò fosse accaduto a me, avrei reinstallato e ripristinato dal backup giornaliero. Hai un backup giornaliero - un piano di ripristino di emergenza - vero?

Nel caso in cui non avessi un piano di ripristino di emergenza, ti suggerirei di eseguire il backup di tutti i file di configurazione e dei dati che desideri conservare e procedere con una reinstallazione. In questo modo sarai sicuro di finire di nuovo con un server stabile.


1
indovinando da quando ha pubblicato qui come recuperare la cartella / bin non ha un backup.
Goez,

Sfortunatamente, non ho backup giornalieri. Lo script bash che stavo scrivendo all'epoca era, ironicamente, uno script di backup giornaliero. Sembra che dovrò reinstallare, grazie per il consiglio.
Tom Marthenal,

Non è necessario reinstallare; vedi la mia risposta.
Womble

Le istantanee del file system sono estremamente utili per il recupero da cose come questa. Sfortunatamente i file system ext2 / 3/4 non li implementano e farlo con LVM ha un grosso dispendio di prestazioni. Se elimino / bin accidentalmente sulla mia casella FreeBSD, monto solo un'istantanea precedente e copio i file nella versione live del file system. Presumibilmente anche OS X ha questo (qui si chiama "macchina del tempo").
scatta il

3

Vorrei provare a creare una macchina virtuale, quindi a copiarne il contenuto /binsulla macchina danneggiata. Questo dovrebbe farti funzionare. Quindi corri

dpkg --get-selections  | awk '{print $1}' | xargs -l1 aptitude reinstall

che dovrebbe reinstallare tutti i pacchetti che erano sul tuo sistema.


1

Il modo più semplice, se hai accesso alla macchina, è montare il filesystem, fare un backup di tutti i tuoi dati (solo per precauzione).

Quindi puoi reinstallare Ubuntu come una normale installazione; in linea di principio tutti i tuoi dati (home directory, ecc. e var) dovrebbero essere ancora lì.

C'è un modo per reinstallare tutti i pacchetti in modo che / bin sia ripopolato, ma è abbastanza complicato.


0

I file sono spariti. Mentre puoi tentare di "ripristinare" i file, non lo consiglierei.

Nota: non eseguo Ubuntu (e non ho usato le distribuzioni Debian per un po '). Tuttavia, in passato ho fatto vari recuperi di distro tutti seguendo uno scenario simile.

Il miglior modo di agire:

  • avvio da liveCD
  • usando liveCD montare il tuo sistema da qualche parte (diciamo, /mnt/mint)
  • usando la query dpkg tutti i pacchetti installati:
# dpkg --admindir = / mnt / mint / var / lib / dpkg -l
  • installa tutti quei pacchetti nella tua destinazione / mnt / mint usando apt-get usando:
# apt-get -o RootDir = / mnt / mint .... 
  • (alternativa n. 1) Potrebbe essere necessario deboostrap /mnt/mint- non sono sicuro
  • (alternativa n. 2) È possibile copiare i /bincontenuti di liveCD su /mnt/mint/binma non so se liveCD per mint utilizzi busybox che potrebbe complicare le cose - l'alternativa n. 1 in quel caso sembra più sicura.

in genere questo dovrebbe restituire i tuoi file "reinstalla brutalmente" di tutto ciò che hai. Puoi fare trucchi e query "intelligenti" per tutti i pacchetti che hanno lasciato cadere i binari in / bin

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.