Backup

Backup OS (toàn bộ partition)

Backup toàn bộ OS partition phải cho khả năng phục hồi OS partition. Nghĩa là chạy OS trên một partition khác để phục hồi partition gốc.

Đơn giản nhất là thêm một partition trên ổ đĩa chạy OS và dùng rsync để backup.

/dev/sda1   # OS partition
/dev/sda2   # Backup partition
/dev/sda3   # Swap partition
/dev/sda4   # Data partition
...

  • Câu lệnh backup (khởi động vào /dev/sda1)
#!/bin/bash
mount /dev/sda2 /media
rsync -avx / /media
sed -i -r 's|^.+(\s+/\s+)|/dev/sda2\1|' /media/etc/fstab
umount /media
sed -i -r 's|root=[^ ]+ |root=/dev/sda2 |' /boot/cmdline.txt
echo "please reboot..."
  • Câu lệnh restore (khởi động vào /dev/sda2)
#!/bin/bash
mount /dev/sda1 /media
rsync -avx / /media
sed -i -r 's|^.+(\s+/\s+)|/dev/sda1\1|' /media/etc/fstab
umount /media
sed -i -r 's|root=[^ ]+ |root=/dev/sda1 |' /boot/cmdline.txt
echo "please reboot..."
  • Tổng hợp
#!/bin/bash
# Backup /dev/sda1 vào /dev/sda2 và ngược lại
#
part=$(mount | grep -Po '^.+(?= on / )')
[ "$part" = '/dev/sda1' ] && part='/dev/sda2' || part='/dev/sda1'
read -n 1 -t 5 -p "Backup vào $part (Y/n)? " ans
echo ''
if [ -z "$ans" ] || [ "${ans,}" = 'y' ]; then
  mount "$part" /media
  rsync -avx --delete --quiet --exclude={"/tmp/*","/var/tmp/*","/var/log/*"} / /media
  sed -i -r "s|^.+(\s+/\s+)|$part\1|" /media/etc/fstab
  umount /media
fi
read -n 1 -t 5 -p "Reboot vào $part (Y/N)? " ans
echo ''
if [ "${ans,}" = 'y' ]; then
  sed -i -r "s|root=[^ ]+ |root=$part |" /boot/cmdline.txt
  boot=$(mount | grep -Po '^.+(?= on /boot )')
  if [ "$boot" != '/dev/mmcblk0p1' ]; then
    mount /dev/mmcblk0p1 /media
    rsync -avx --delete --quiet /boot/ /media
  fi
  sudo reboot
fi

Backup thư mục

Giả sử thư mục /mnt/minidlna/picture đã sao chép backup lên Google Drive. Sau đó chúng ta không định kỳ backup các thay đổi trên thư mục picture mà cài đặt inotifywait trên thư mục này, mỗi khi có tạo/xoá thư mục/file thì chúng ta đồng bộ với Google Drive với chỉ thư mục/file đó thôi

#!/bin/bash
/usr/bin/inotifywait -mrq -e delete -e close_write -e create -e moved_to - e moved_from --format '%e %w%f' /mnt/minidlna/picture | \
while read evt file; do
  evt=${evt^^}
  filename=${file#/mnt/minidlna/}
  case "$evt" in
  'DELETE','MOVE_FROM')
    rclone delete remote:$filename
    ;;
  'CLOSE_WRITE,CLOSE','MOVE_TO')
    rclone copy "$file" remote:"$(dirname $filename)/" -u
    ;;
  'DELETE,ISDIR')
    rclone rmdir remote:"$filename"
    ;;
  'CREATE,ISDIR')
    rclone mkdir remote:"$filename"
    ;;
  esac
  wait $!
done

Backup data

Data được backup một lần. Sau đó định kỳ backup các thay đổi trên data theo kiểu version, các data cũ hơn vẫn còn lưu lại.

Comments Off on Backup

Filed under Software

Comments are closed.