News for hackers. Stuff that matters.
Re:Recovering a PostgreSQL database after a hard drive failure by frogger8 on Thursday December 30, 2021 @11:26PM (#29744903)
Re:Recovering a PostgreSQL database after a hard drive failure by stevenicr on Saturday January 01, 2022 @09:11PM (#29765052)
I'm needing to do something like this from one server to another.. the hard drive is 100% full and I can't bring myself to pay $310 to DO for a 900GB server just to dump the DB which needs to be thinned down. which come to find out even if I remove table entries for hours, postgres can't do the vacuum to return GB apparently unless it has another 360GB or so to do what it needs doing I guess.

So looking to pg-dump to a different server in a cheaper datacenter. Think I have something bookmarked talking about running rsync or something. Will be going into those options this week.

Re:Recovering a PostgreSQL database after a hard drive failure by smbv on Friday December 31, 2021 @06:32PM (#29753641)
I put together a quick-n-dirty backup script. It's tested.

  #!/bin/bash
  
  set -e
  
  BACKUPDIR=/srv/backup/$(/usr/bin/date -I)
  umask 137
  
  cd /tmp
  
  backup_init() {
    echo 'Initializing backup...'
    mkdir "$BACKUPDIR"
    chown root:root "$BACKUPDIR"
    chmod 751 "$BACKUPDIR"
  }
  
  backup_postgres() {
    # Postgres
    echo 'Backing up PostgreSQL...'
    sudo -u postgres /usr/bin/pg_dumpall > $BACKUPDIR/postgres.sql
  }
  
  backup_podman_volumes_for_user() {
    if id "$1" &> /dev/null; then
      echo "Podman user $1 found. Creating backups of volumes..."
      mkdir "$BACKUPDIR/$1"
      chmod 751 "$BACKUPDIR/$1"
      for volume in $(sudo -u $1 /usr/bin/podman volume ls --format {{.Name}}); do
        echo "Backing up volume $volume for user $1"
        touch "$BACKUPDIR/$1/$volume.tar"
        chown $1:$1 "$BACKUPDIR/$1/$volume.tar"
        chmod 660 "$BACKUPDIR/$1/$volume.tar"
        sudo -u $1 /usr/bin/podman volume export "$volume" --output "$BACKUPDIR/$1/$volume.tar"
        chown root:root "$BACKUPDIR/$1/$volume.tar"
        chmod 640 "$BACKUPDIR/$1/$volume.tar"
      done
    else
      echo "User $1 not found. Skipping."
    fi
  }
  
  backup_bitwarden() {
    backup_podman_volumes_for_user bitwarden
    cp /home/bitwarden/vaultwarden.conf $BACKUPDIR/bitwarden/
  }
  
  backup_etc() {
    echo 'Backing up /etc...'
    rsync -a /etc/ $BACKUPDIR/etc
  }
  
  backup_jellyfin_metadata() {
    echo 'Backing up Jellyfin metadata...'
    mkdir $BACKUPDIR/jellyfin
    rsync -a /var/lib/jellyfin/ $BACKUPDIR/jellyfin
  }
  
  backup_postprocess() {
    cd /srv/backup
    echo 'Compressing...'
    tar -czv --atime-preserve='system' -f $BACKUPDIR.tgz $BACKUPDIR
    echo 'Removing...'
    rm -rf $BACKUPDIR
  }
  
  backup_init
  
  backup_etc
  
  backup_postgres
  
  backup_bitwarden
  
  backup_jellyfin_metadata
  
  backup_postprocess
Re:Recovering a PostgreSQL database after a hard drive failure by smbv on Friday December 31, 2021 @12:51PM (#29750503)
Thank you very much! I'm planning on using this for my backups (in conjunction with rsync -a, and podman volume export).