🇩🇪 Deutsch

20 Apr 2023

FreeBSD: versehentlich das Verzeichnis /var/db/pkg gelöscht

Schnell ist es passiert: man ist im falschen Verzeichnis, gibt rm -rf * ein, und merkt erst hinterher, welchen Schaden man angerichtet hat. Glücklicherweise legt FreeBSD von den installierten Paketen automatisch ein Backup an.


Man hat ansonsten keine Chance, das zurückzubekommen. Deshalb bitte nicht auch gleichzeitig /var/backup löschen. Es empfiehlt sich u. U., dieses Verzeichnis separat zu sichern. Always make Backups of your Backups!


So einfach geht das zurückholen der Datenbank


  • ins Verzeichnis /var/backups wechslen, als root
# cd /var/backup
  • schauen, ob pkg-Backups da sind
# ls
...
pkg.sql.xz
pkg.sql.xz.1
pkg.sql.xz.2
...
  • zurückholen der Paket-Datenbank
root@gliese1:/var/backups # xzcat /var/backups/pkg.sql.xz | pkg shell
  • bei mir kamen einige Fehlermeldungen, es hat aber trotzdem funktioniert…
Parse error near line 4: table packages already exists
  CREATE TABLE packages (id INTEGER PRIMARY KEY,origin TEXT NOT NULL,name TEXT N
               ^--- error here
Parse error near line 706: table pkg_script already exists
  CREATE TABLE pkg_script (package_id INTEGER REFERENCES packages(id) ON DELETE
               ^--- error here
Parse error near line 1339: table script already exists
  CREATE TABLE script (script_id INTEGER PRIMARY KEY,script TEXT NOT NULL UNIQUE
               ^--- error here
Parse error near line 1495: table option already exists
  CREATE TABLE option (option_id INTEGER PRIMARY KEY,option TEXT NOT NULL UNIQUE
               ^--- error here
Parse error near line 2796: table option_desc already exists
...
Parse error near line 296430: index packages_origin already exists
Parse error near line 296431: index packages_name already exists
Parse error near line 296436: index pkg_digest_id already exists

YeeHa!