Gmail.comでは、次のように表示されます。
15 GBの0.38 GB(2%)を使用
Ubuntuでいっぱいの30 GBパーティションに20 GBありますが、重要なドキュメントはおそらく1 GBだけなので、この無料のクラウドストレージをバックアップに使用してみませんか?
これを行うプログラムは既にありますか?とにかく書きますが、始める前に聞いてみたいと思います。
一部のシステムには10 MBの添付ファイルの制限があるため(ファイルの圧縮とセグメンテーションも必要です(作業中のものなど))。
ありがとう:)
答えの元の部分は、試行錯誤を歴史的に参照するために次のセクションにそのまま残されています
これは現在のバックアップスクリプトです。
#!/bin/bash
# NAME: daily-backup.sh
# PATH: /mnt/e/bin
# DESC: Backup scripts, documents and configuration files to .tar
# DATE: July 11, 2017. Modified July 7, 2019.
HomeDir="/home/USER_NAME" # Required for cron compatibility
EmailAddr="[email protected]"
# PARM: 1=backup file name. Extension .tar.gz automatically appended.
# NOTE: To include MBR (Master Boot Record) in backup create an image using:
# Sudo dd if=/dev/sda of="$HOME/.mbr.sav" bs=512 count=1
# NOTE: CLONE CURRENT INSTALLATION TO NEW MACHINE
# =========================================
# To restore use Live USB to install Ubuntu alongside Windows 10
# Connect to network with password xxxxxxxxx
# Install Google Chrome
# (https://askubuntu.com/questions/510056/how-to-install-google-chrome):
# wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub
# | Sudo apt-key add
# echo 'deb [Arch=AMD64] http://dl.google.com/linux/chrome/deb/
# stable main' | Sudo tee /etc/apt/sources.list.d/google-chrome.list
# Sudo apt update
# Sudo apt install google-chrome-stable
# Open gmail.com and download attachment `$1` which is usually called
# Backup-yymmdd-DayOfWeekName.tar
# Make missing home/bin directory which tar doesn't create automatically:
# mkdir ~/bin
# Restore the daily backup using:
# Sudo tar -xvf Backup-yymmdd-DayFfWeekName.tar -C /
# yar -xvf Backup-yymmdd-DayFfWeekName.tar -C /
# Patch /etc/default/grub with new machine parameters, ie for nvme use:
# acpiphp.disable=1
# Use `Sudo apt install aptitude-common`
# Clone packages using `aptitude-create-state-bundle` on Source
# Copy state-bundle.tar file from Source to Target machine
# Restore packages using `aptitude-run-state-bundle` on Target
# Manually copy ~/Pictures, ~/Videos, etc. not in daily backup.
# Sudo update-grub # NVMe suspend/resume acpiphp.disable=1
# Sudo update-initramfs # to get plymouth sunrise splash screen
if [[ $# -ne 1 ]]; then
echo 'One argument required for file name, e.g. "Backup-2017-10-21-Saturday"'
echo '.tar will automatically be added as a file extension'
exit 1
fi
Filename="$1.tar"
cd $HomeDir ||
exit 1
dpkg --get-selections > .packages # List of installed applications
tar -cvpf "$Filename" bin # create .tar & add user scripts
tar -rvpf "$Filename" .config/autostart # autostart programs configuration
tar -rvpf "$Filename" /usr/local/bin # add global root-based scripts
tar -rvpf "$Filename" /etc/cron* # crontab, cron.d, cron.daily, etc
tar -rvpf "$Filename" /etc/system* # systemd files: login.conf, etc.
tar -rvpf "$Filename" /lib/systemd/system-sleep
tar -rvpf "$Filename" /etc/rc.local # Startup script: calls zaprestore.
tar -rvpf "$Filename" /etc/sudoers # 120 minute Sudo, stars in password
tar -rvpf "$Filename" /etc/environment # PATH backup
tar -rvpf "$Filename" /etc/default/grub # bootstrap loader
#July 20, 2018 - /boot/grub takes 5MB+
#tar -rvpf "$Filename" /boot/grub # Custom grub fonts and splash...
tar -rvpf "$Filename" /usr/share/plymouth # ... screen (plymouth)
#included above tar -rvpf "$Filename" /usr/share/plymouth/themes/earth-sunrise/
tar -rvpf "$Filename" /usr/share/grub/themes/Tuxkiller2/
tar -rvpf "$Filename" /etc/grub.d # 00_header, etc. changes
tar -rvpf "$Filename" Desktop # files and links on desktop
tar -rvpf "$Filename" Documents/*.od* # Libre Office: *.ods, *.odt, etc.
# Trusted keys to install from third party PPAs
tar -rvpf "$Filename" /etc/apt/trusted.gpg
tar -rvpf "$Filename" /etc/apt/trusted.gpg.d
# Sources for repositories - 1) Main single file - 2) directory of files
tar -rvpf "$Filename" /etc/apt/sources.list
tar -rvpf "$Filename" /etc/apt/sources.list.d
# find all $HOME/.config files and add to .tar
find .* -maxdepth 0 -type f -exec tar -rvf "$Filename" {} +
# Nautilus custom scripts
tar -rvpf "$Filename" .local/share/nautilus/scripts
# /etc/udev rules
tar -rvpf "$Filename" /etc/udev/rules.d
# /etc/rc.local
tar -rvpf "$Filename" /etc/rc.local
# /etc/X11/xorg.conf.d
tar -rvpf "$Filename" /etc/X11/xorg.conf.d
# /mnt/e - shared WSL + Linux
tar -rvpf "$Filename" /mnt/e/bin
tar -rvpf "$Filename" /mnt/e/Documents
# ~/eyesome - Development version
tar -rvpf "$Filename" eyesome
# ~/gmail - Python and Bash scripts but NOT huge data files
tar -rvpf "$Filename" gmail/*.py
tar -rvpf "$Filename" gmail/*.sh
tar -rvpf "$Filename" gmail/go
tar -rvpf "$Filename" gmail/BackupSets
tar -rvpf "$Filename" gmail/BackupDays
echo "Complete file list with sizes..."
tar -tvf "$Filename" > BackupLog # list filenames and sizes
chmod a+w BackupLog # give user delete access
echo "Compressing with gzip..."
gzip "$Filename"
Filename="$Filename.gz"
echo "Emailing: $EmailAddr"
# From: https://internetlifeforum.com/gmail/2251-gmail-some-file-types-blocked-fix-how-go-around/
# cat archive.tar.gz | base64 > file
# then i sent the file via email:
# echo "Base64 encoded file" | mutt -a file -s subject -- [email protected]
# then mail was delivered properly! Then when one need to get readable archive
# again, he need to decode it by base64. In my case i do it via linux command line:
# cat file | base64 -d > decodedarchive.tar.gz
Filename64="$Filename.64"
cat "$Filename" | base64 > "$Filename64"
mail -a "$Filename64" -s "$Filename64" "$EmailAddr" < BackupLog
ls -la "$Filename" "$Filename64"
rm "$Filename" "$Filename64"
exit 0
上記のUSER_NAME
をユーザー名に置き換えます。 [email protected]
を実際のGmailアドレスに置き換えます。ディレクトリ/mnt/e/bin
を、bashスクリプトを保存するディレクトリに変更します。ファイルを保存して終了します。次に使用します:
chmod a+x /mnt/e/bin/backup
これにより、スクリプトが実行可能になります。
MBR(マスターブートレコード)がバックアップに保存される方法に注意してください。スクリプトコメントで説明されているように、~/.mbr.sav
を使用してSudo dd ...
を作成するための別の初期ステップが必要です。
dpkg --get-selections
行に注意してください。これにより、インストールされているすべてのアプリケーション名のリストが作成されます。
ssmtpを使用して電子メールアラートを送信 から、端末またはスクリプトから自動化された電子メールを送信する最も簡単な方法を見つけます。インストール手順は簡単です。
Sudo apt install ssmtp
Sudo nano /etc/ssmtp/ssmtp.conf
# Change "MyEmailAddress" and "MyPassword" to your own.
言及されていないステップが1つあります。 Googleは、「安全性の低い」アプリケーションがアカウントでメールを送信できるようにすることを確認するメールを送信します。
.tarバックアップファイルを電子メールメッセージに添付するには、ssmpt
をインストールして構成した後、さらに1つのパッケージが必要です。
Sudo apt install sharutils
このパッケージには、送信のためにバイナリファイルを変換する必要があるプログラムuuencode
が含まれています。
cron
を毎日セットアップする次を含むファイル/etc/cron.daily/daily-backup
を作成します。
#!/bin/sh
#
# NAME: daily-backup
# DESC: A .tar backup file is created, emailed and removed.
# DATE: Nov 25, 2017.
# CALL: WSL or Ubuntu calls from /etc/cron.daily/daily-backup
# PARM: No parameters but /etc/ssmtp/ssmtp.conf must be setup
# NOTE: Backup file name contains machine name + Distro
# Same script for user with multiple dual boot laptops
# Single machine should remove $HOSTNAME from name
# Single distribution should remove $Distro
sleep 30 # Wait 30 seconds after boot
# Running under WSL (Windows Subsystem for Ubuntu)?
if cat /proc/version | grep Microsoft; then
Distro="WSL"
else
Distro="Ubuntu"
fi
today=$( date +%Y-%m-%d-%A )
/mnt/e/bin/daily-backup.sh Daily-$(hostname)-$Distro-backup-$today
ファイルを保存し、終了して使用します:
chmod a+x /etc/cron.daily/daily-backup
これにより、スクリプトが実行可能になります。
/etc/cron.daily/daily-backup
の実行後、毎朝cron
から2通のメールが送信されます。 1つはバックアップBackup-YYYY-MM-DD.tar
ファイルで、この場合は5.2 MBであり、表示できません。もう1つは、tar
コマンドがcron
に報告したバックアップ内のすべてのファイルのリストです。
Anacron <[email protected]>
6:58 AM (1 hour ago)
to root, bcc: me
/etc/cron.daily/daily-backup:
bin/
bin/.websync.new
bin/log-gsu-del
bin/now
(... SNIP ...)
.xscreensaver
.xsession-errors
.xsession-errors.old
回答を待つのに1か月、次に回答を書くのに1か月かかりましたが、プロジェクトは終了しました。今後は、バックアップスクリプトにディレクトリを追加するだけです。
次のプロジェクトは完全バックアップですが、Gmailは25 MBに制限されているため、6 GBのサイズでgdrive(Googleドライブ)にコピーされます。このスクリプトは/usr/local/bin/full-backup
と呼ばれ、興味がある場合はここに含まれています。
#!/bin/bash
# NAME: full-backup
# PATH: $HOME/bin
# DESC: Full system backup - must call with Sudo
# DATE: July 16, 2017. Modified July 26, 2017.
apt autoclean # reduces size of /var/cache/apt/archives
cd /tmp # tar must be created in directory not backed up.
time tar -cvpzf backup.tar.gz \
--exclude=/backup.tar.gz \
--exclude=/proc \
--exclude=/tmp \
--exclude=/mnt \
--exclude=/dev \
--exclude=/sys \
--exclude=/media \
--exclude=/usr/src/linux-headers* \
--exclude=/home/Me/.cache \
--exclude=/var/log \
--exclude=/var/run/ \
--exclude=/run \
--exclude=/var/cache/apt/archives /
利用可能なオプションが検討されているため、これは答えよりも「旅」になります。
2016年8月以降、ほとんどの時間を投資してきた2つのディレクトリがあります。
/home/rick/bin
/usr/local/bin
これら2つのディレクトリを使用して最初にtar
ファイル(テープアーカイブ)を作成し、自分にメールを送信しようとしたときに、次のエラーが表示されました。
10か月にわたって記述されたスクリプトの2つのディレクトリを25 MBより大きくする方法よく調べてみると、190 MBを超えています。なに?
テスト目的で作成された単一のファイルであることが判明しました。
-rw-rw-r-- 1 rick rick 191143744 Dec 23 17:27 log-gsu-gedit.tst
したがって、このテストファイルを削除し、コマンドを再実行します。
tar -cvf scripts-2017-06-05.tar /home/rick/bin
tar -rvf scripts-2017-06-05.tar /usr/local/bin
最初のコマンドはスクリプトファイルの1つのディレクトリを使用して.tar
ファイルを作成し、2番目のコマンドはスクリプトファイルの2番目のディレクトリを使用して.tar
ファイルに追加します。
.tar
ファイルのサイズは1.3 MBになりました。
-rw-rw-r-- 1 rick rick 1341440 Jun 5 17:27 scripts-2017-06-05.tar
.tar
ファイルが作成されたので、gmail.com
に移動して、ファイルを添付ファイルとして自分にメールで送信します。次のステップでは、毎日ファイルを作成し、cron
(Mail Transport Agent)を使用して自動的に電子メールで送信するMTA
ジョブが必要になります。 30日より古いこれらのメールをすべて削除するには、gmail.comでオプションを設定する必要があります。これにより、合計スクリプトバックアップのうち400 MB程度しか保存されません。
今夜、私は このスレッド に出くわすまで、バックアップが難しい設定ファイルをいくつか発見しました。問題のファイルは私のホームディレクトリにあります。
.bashrc
.conkyrc
.websync # one of my own databases
.bafman* # Another one of my own databases
上記のリンクを使用して、~/bin/backup
というスクリプトを作成しました。
#!/bin/bash
if [[ $1 == "" ]] ; then
echo 'Parameter required for file name, ie "Backup-2017-06-26"'
echo ".tar will automatically be added as a file extension"
exit
fi
tar -cvf $1.tar /home/rick/bin
tar -rvf $1.tar /usr/local/bin
find .* -maxdepth 0 -type f -exec tar -rvf $1.tar {} +
.tar
アーカイブの内容を表示するには、次のコマンドを使用します。
tar -tvf Backup-2017-06-26.tar
「Backup-2017-06-26」は、バックアップの作成時に使用したパラメーターに置き換えてください。
同様のQ&Aは2014年11月に投稿されました。 crontabを使用してメールでバックアップを送信 。受け入れられる回答は以下のとおりです。
この次のコマンドは、マシンでテストしたときに機能しました。
echo "This is the message body" | mutt -a "/path/to/file.to.attach" -s "subject of message" -- [email protected]
したがって、おそらく従うべきアプローチは次のようなものになります。
tar -zcf /home/blah/backup.tgz /home/blah/
echo "Please find attached the backup file" | mutt -a "/home/blah/backup.tgz" -s "File attached" -- [email protected]
上記のスクリプトをbackup_email.sh
として保存し、cronジョブを次のようにスケジュールします。
0 1 * * * /path/to/backup_email.sh
参考文献