Tag: backup

  • Raspberry Pi: Setting up backup

    I have a Raspberry Pi providing household automation and productivity services – WebDav, Backups and Calendar. I always worry about a jolt of power, a failed byte and something that is unrecoverable. Time for a Backup solution.

    I plugged in a USB stick – 64GB, and immediately checked the file system is there and visible as SDA (unmounted).

    pi@raspberrypi:~# sudo su - 
    
    root@raspberrypi:~# lsblk 
     NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
     sda           8:0    1 58.2G  1 disk 
     └─sda1        8:1    1 58.2G  1 part 
     mmcblk0     179:0    0 14.9G  0 disk 
     ├─mmcblk0p1 179:1    0 43.9M  0 part /boot
     └─mmcblk0p2 179:2    0 14.8G  0 part /

    I check to see which one is assigned to the SD card slot (mmc), I really don’t want to reformat Raspbian.  I see the USB stick is on /dev/sda. All of my subsequent commands use /dev/sda as part of the command.

    root@raspberrypi:~# parted -ls
    Warning: The driver descriptor says the physical block size is 2048 bytes, but Linux says it is 512 bytes.
     Model: JetFlash Transcend 64GB (scsi)
     Disk /dev/sda: 62.5GB
     Sector size (logical/physical): 512B/512B
     Partition Table: unknown
     Disk Flags: 
    
     Model: SD SC16G (sd/mmc)
     Disk /dev/mmcblk0: 15.9GB
     Sector size (logical/physical): 512B/512B
     Partition Table: msdos
     Disk Flags: 
     Number  Start   End     Size    Type     File system  Flags
      1      4194kB  50.2MB  46.0MB  primary  fat32        lba
      2      50.3MB  15.9GB  15.9GB  primary  ext4

    If you don’t see the relevant information on your HD or run into issues formatting the hard-drive, install hdparm.  and check with hdparm -r0 /dev/sda  .

    TIP: I did run into an issue with an ISO written to a USB drive which locks the partition table and makes it unwriteable.

    root@raspberrypi:~# apt-get install hdparm
     Reading package lists… Done
     Building dependency tree       
     Reading state information… Done
     The following package was automatically installed and is no longer required:
       realpath
     Use 'apt autoremove' to remove it.
     The following additional packages will be installed:
       powermgmt-base
     Suggested packages:
       apmd
     The following NEW packages will be installed:
       hdparm powermgmt-base
     0 upgraded, 2 newly installed, 0 to remove and 148 not upgraded.
     Need to get 114 kB of archives.
     After this operation, 278 kB of additional disk space will be used.
     Do you want to continue? [Y/n] y
     Get:1 http://raspbian.mirror.constant.com/raspbian stretch/main armhf hdparm armhf 9.51+ds-1+deb9u1 [105 kB]
     Get:2 http://raspbian-us.ngc292.space/raspbian stretch/main armhf powermgmt-base all 1.31+nmu1 [9,240 B]
     Fetched 114 kB in 0s (120 kB/s)           
     Selecting previously unselected package hdparm.
     (Reading database … 135688 files and directories currently installed.)
     Preparing to unpack …/hdparm_9.51+ds-1+deb9u1_armhf.deb …
     Unpacking hdparm (9.51+ds-1+deb9u1) …
     Selecting previously unselected package powermgmt-base.
     Preparing to unpack …/powermgmt-base_1.31+nmu1_all.deb …
     Unpacking powermgmt-base (1.31+nmu1) …
     Setting up powermgmt-base (1.31+nmu1) …
     Setting up hdparm (9.51+ds-1+deb9u1) …
     Processing triggers for man-db (2.7.6.1-2) …
    Preparing to unpack …/hdparm_9.51+ds-1+deb9u1_armhf.deb …
    
    Unpacking hdparm (9.51+ds-1+deb9u1) …
    
    Selecting previously unselected package powermgmt-base.
    
    Preparing to unpack …/powermgmt-base_1.31+nmu1_all.deb …
    
    Unpacking powermgmt-base (1.31+nmu1) …
    
    Setting up powermgmt-base (1.31+nmu1) …
    
    Setting up hdparm (9.51+ds-1+deb9u1) …
    
    Processing triggers for man-db (2.7.6.1-2) …
    root@raspberrypi:~# hdparm -r0 /dev/sda
     /dev/sda:
      setting readonly to 0 (off)
      readonly      =  0 (off)

    Now that I know the drive is writeable, I need to create the partition. I used

    cfdisk

    Navigate through the menu and select the maximum size
                                                                                            Disk: /dev/sda
    Size: 58.2 GiB, 62495129600 bytes, 122060800 sectors
    Label: dos, identifier: 0x00000000

    Device Boot Start End Sectors Size Id Type
    >> /dev/sda1 2048 122060799 122058752 58.2G 83 Linux

    Once you see “Syncing disks.”, you can format the disk. I formatted the partition sda1 with ext4 (I may want to encrypt in the future). Unmount and then format.

    root@raspberrypi:~# umount /dev/sda1
    root@raspberrypi:~# mkfs.ext4 /dev/sda1
    mke2fs 1.43.4 (31-Jan-2017)
    Found a dos partition table in /dev/sda1
    Proceed anyway? (y,N) y
    Creating filesystem with 2828032 4k blocks and 707136 inodes
    Filesystem UUID: 363f1b4a-b0f5-4c7b-bf91-66f3823032d6
    Superblock backups stored on blocks:
    32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208

    Allocating group tables: done
    Writing inode tables: done
    Creating journal (16384 blocks): done
    Writing superblocks and filesystem accounting information: done

    root@raspberrypi:~#

    Make the backup directory, edit fstab and mount the directory.  Insert into fstab with your uuid “UUID=363f1b4a-b0f5-4c7b-bf91-66f3823032d6 /backups auto nosuid,nodev,nofail 0 0
    ”   The second to last avoids backup and the last one enables fsck on reboot.

    root@raspberrypi:~# blkid 
    /dev/mmcblk0p1: LABEL="boot" UUID="DDAB-3A15" TYPE="vfat" PARTUUID="b53687e8-01"
    /dev/mmcblk0p2: LABEL="rootfs" UUID="5fa1ec37-3719-4b25-be14-1f7d29135a13" TYPE="ext4" PARTUUID="b53687e8-02"
    /dev/mmcblk0: PTUUID="b53687e8" PTTYPE="dos"
    /dev/sdb: UUID="363f1b4a-b0f5-4c7b-bf91-66f3823032d6" TYPE="ext4"
    root@raspberrypi:~# mkdir /backups 
    root@raspberrypi:~# vim /etc/fstab
    root@raspberrypi:~# mount -a
    root@raspberrypi:~# mount
    UUID=363f1b4a-b0f5-4c7b-bf91-66f3823032d6 /backups auto nosuid,nodev,nofail 0 0


    You should see backups listed. (Note: I bricked my Raspberry Pi with a bad FSTAB entry, and mounted it on my Mac using Paragon and removed the bad fstab entry. )

    Update Crontab with daily backups.

    crontab -e

    Setup an editor for crontab.

    root@raspberrypi:~# crontab -e
    no crontab for root - using an empty one

    Select an editor. To change later, run 'select-editor'.
    1. /bin/ed
    2. /bin/nano <---- easiest
    3. /usr/bin/vim.basic
    4. /usr/bin/vim.tiny

    Choose 1-4 [2]: 3
    crontab: installing new crontab

    I added this line and copied it to /etc/cron.daily/

    0 1 * * * /usr/bin/rsync -r /data/ /backups/`date +%w-%A`

    crontab -l > pi-backup
    mv /root/pi-backup /etc/cron.daily
    run-parts /etc/cron.daily

    Note, I had to add #!/bin/bash after I copied and remove the timing of the job.

    Also, check to see if rsync is installed with which rsync and apt-get install rsync.

    This enables backups on a daily basis rotating every 7 days.

    Check back on the following day to see your backups

    root@raspberrypi:~# /usr/bin/rsync -r /data/ /backups/`date +%w-%A`
    root@raspberrypi:~# find /backups
    /backups
    /backups/lost+found
    /backups/0-Sunday
    /backups/0-Sunday/startup.sh

    Good luck, I hope this helps you with your Raspberry Pi.

    References