Düzenli Google Takeout yedeklemeleri bulut depolamaya nasıl otomatikleştirilir


42

Düzenli Google Takeout yedekleri oluşturmak (her 3 ayda bir diyelim) ve onları DropBox veya S3 gibi başka bir bulut deposunda şifrelenmiş olarak saklamak istiyorum.

Tercih edilmesine rağmen, buluttan buluta bir çözüm olması gerekmez. % 100 otomatik olması gerekmez, ancak daha iyi.

Herhangi bir fikir için şimdiden teşekkür ederiz.

Yanıtlar:


2

Google Takeout'u yedeklemek için doğrudan API'ler yerine (ki şu anki yapmak neredeyse imkansız görünüyor), verilerinizi Google Drive üzerinden 3. taraf depolama çözümlerine yedekleyebilirsiniz. Birçok Google hizmeti Google Drive’a yedeklemeye izin verir ve aşağıdaki araçları kullanarak Google Drive’ı yedekleyebilirsiniz:

GoogleCL - GoogleCL, Google hizmetlerini komut satırına getirir.

gdatacopier - Google dokümanlar için komut satırı doküman yönetimi yardımcı programları.

SİGORTA Google Drive - C ile yazılmış, Google Drive için bir FUSE kullanıcı alanı dosya sistemi

Grive - Bir Google Drive istemcisinin bağımsız bir açık kaynaklı uygulaması. Google'daki sunucularla konuşmak için Google Doküman Listesi API'sini kullanır. Kod C ++ dilinde yazılmıştır.

gdrive-cli - GDrive için bir komut satırı arayüzü. Bu, ilginç olan GDocs API'sını değil, GDrive API'sini kullanır. Kullanmak için bir krom uygulamasını kaydetmeniz gerekir. En azından sizin tarafınızdan kurulabilir olmalıdır, ancak yayınlanmasına gerek yoktur. Depoda başlangıç ​​noktası olarak kullanabileceğiniz bir kazan uygulaması bulunmaktadır.

python-fuse example - Bazı slaytlar ve Python FUSE dosya sistemi örnekleri içerir.

Bunların çoğu Ubuntu depolarında görünmektedir. Fuse, gdrive ve GoogleCL'i kendim kullandım ve hepsi iyi çalışıyor. İstediğiniz kontrol düzeyine bağlı olarak bu gerçekten kolay veya gerçekten karmaşık olacaktır. Sana bağlı. Bir EC2 / S3 sunucusundan yapılacak doğrudan bir ilerleme olmalıdır. İhtiyacınız olan her şey için komutları tek tek anlatın ve bir cron işinde bir komut dosyasına koyun.

Çok çalışmak istemiyorsanız, sadece Spinbackup gibi bir servisi de kullanabilirsiniz . Eminim bu kadar iyi diğerleri vardır ama ben hiç denemedim.


20
Google paket servisi , bunun için en iyi araçtır, çünkü diğer araçlardan daha fazla hizmeti desteklemektedir. Soru geçerli.
18

6
@krowe: Cevabınız gerçekten yararlı, bununla birlikte sadece google drive ile ilgili. Google paket servisi, tüm verilerinizi yalnızca Google sürücüsünden değil 25 farklı Google hizmetinden indirmenize izin verir.
Bjarke Freund-Hansen

@ BjarkeFreund-Hansen 1) Bu 25 hizmetin birçoğu GDrive'a kaydedilebilir ve otomatik bir GDrive yedeklemesinin parçası olarak otomatik olarak yedeklenebilir. 2) Geri kalan hizmetlerin çoğu, yedekleme (+ 1'ler, Çevreler, vb.) Veya geçersiz (anlamsız) (Google Code) anlamsızdır. 3) Bunu daha iyi bir cevabı olmayan insanlara açıklamaktan yoruldum. Tasfiyeyi otomatikleştirmenin bir yolu olmadığından (müşteri tarafı makroları kullanmanın dışında; ki zaten çok güvenilir olmayan) oldukça eminim. 4) Eğer beni yanlış ispat edersen daha iyi bir çözüm yolla ve konuşalım. Değilse, o zaman bu aynı konuda önceki yorumuma bakın.
krowe

6
@krowe: Gmail, Takvim, Rehber, Fotoğraflar, Hangout geçmişi ve Konum geçmişi, yoğun olarak kullandığım ve Google'da veri kaybına karşı güvence altına almak istediğim hizmetler. Bu hizmetlerin hiçbiri Google sürücüsüne dahil edilmedi. Sırf daha iyi bir çözüm bilmediğimden ya da hiç biri olmadığından, daha doğru cevap vermeni sağlamaz. Yine, cevabın kötü olduğunu söylemiyorum, sadece asıl soruya cevap vermiyor.
Bjarke Freund-Hansen

@ BjarkeFreund-Hansen Hayal kırıklığınızı anlıyorum ve bu hizmetlerden bazıları GDrive'ınızla senkronize edilebiliyor (bu yüzden bununla birlikte yedekleme yapacaklar). Örneğin, Google Foto şunları yapabilir: Yedekleme Fotoğrafları . Takvim ve Rehber’in aynı şekilde senkronize edilebileceğini düşünüyorum. GMail de yedeklenebilir: Yedek GMail . Bahsettiğiniz diğer şeyler bilmiyorum ama bunun nedeni ben şahsen onları desteklemeye zahmet etmememden kaynaklanıyor.
krowe

2

Bu, kısmi otomasyona sahip kısmi bir cevaptır. Google, Google Takeout’a otomatik erişimi engellemeyi seçerse gelecekte çalışmaya devam edebilir. Şu anda bu yanıtta desteklenen özellikler:

+ --------------------------------------------- + --- --------- + --------------------- +
| Otomasyon Özelliği | Otomatik? | Desteklenen Platformlar |
+ --------------------------------------------- + --- --------- + --------------------- +
| Google Hesabı giriş | Hayır | |
| Mozilla Firefox’tan çerezleri alın | Evet | Linux |
| Google Chrome'dan çerez al | Evet | Linux, macOS |
| Arşiv oluşturma iste | Hayır | |
| Zamanlama arşiv oluşturma | Tür | Paket servisi web sitesi |
| Arşivin oluşturulduğunu kontrol edin | Hayır | |
| Arşiv listesini al | Evet | Çapraz platform |
| Tüm arşiv dosyalarını indir | Evet | Linux, macOS |
| İndirilen arşiv dosyalarını şifrele | Hayır | |
| İndirilen arşiv dosyalarını Dropbox'a yükleyin | Hayır | |
| İndirilen arşiv dosyalarını AWS S3'e yükleyin | Hayır | |
+ --------------------------------------------- + --- --------- + --------------------- +

İlk olarak, bir buluttan buluta çözümü gerçekten işe yaramaz çünkü Google Takeout ile bilinen herhangi bir nesne depolama sağlayıcısı arasında bir arayüz yoktur. Yedekleme dosyalarını kendi makinenizde (isterseniz genel bulutta barındırılabilir), nesne depolama sağlayıcınıza göndermeden önce işlemelisiniz.

İkincisi, bir Google Takeout API'si olmadığından, bir otomasyon betiğinin Google Takeout arşiv oluşturma ve indirme akışında gezinmek için tarayıcıya sahip bir kullanıcı gibi davranması gerekir.


Otomasyon Özellikleri

Google Hesabı girişi

Bu henüz otomatik değil. Betiğin bir tarayıcı gibi davranması ve iki faktörlü kimlik doğrulaması, CAPTCHA'lar ve diğer artırılmış güvenlik taraması gibi olası engellerde gezinmesi gerekir.

Mozilla Firefox’tan çerezleri al

Linux kullanıcılarının Mozilla Firefox’tan Google Paket Servis çerezlerini alması ve ortam değişkenleri olarak dışa aktarması için bir senaryom var. Bunun çalışması için yalnızca bir Firefox profili olmalı ve giriş yaparken https://takeout.google.com adresini ziyaret etmiş olmalıdır .

Tek astar olarak:

cookie_jar_path=$(mktemp) ; source_path=$(mktemp) ; cp ~/.mozilla/firefox/*.default/cookies.sqlite "$cookie_jar_path" ; sqlite3 "$cookie_jar_path" "SELECT name,value FROM moz_cookies WHERE baseDomain LIKE 'google.com' AND (name LIKE 'SID' OR name LIKE 'HSID' OR name LIKE 'SSID' OR (name LIKE 'OSID' AND host LIKE 'takeout.google.com')) AND originAttributes LIKE '^userContextId=1' ORDER BY creationTime ASC;" | sed -e 's/|/=/' -e 's/^/export /' | tee "$source_path" ; source "$source_path" ; rm -f "$source_path" ; rm -f "$cookie_jar_path"

Daha güzel bir Bash senaryosu olarak:

#!/bin/bash
# Extract Google Takeout cookies from Mozilla Firefox and export them as envvars
#
# The browser must have visited https://takeout.google.com as an authenticated user.

# Warn the user if they didn't run the script with `source`
[[ "${BASH_SOURCE[0]}" == "${0}" ]] && \
       echo 'WARNING: You should source this script to ensure the resulting environment variables get set.'

cookie_jar_path=$(mktemp)
source_path=$(mktemp)

# In case the cookie database is locked, copy the database to a temporary file.
# Only supports one Firefox profile.
# Edit the asterisk below to select a specific profile.
cp ~/.mozilla/firefox/*.default/cookies.sqlite "$cookie_jar_path"

# Get the cookies from the database
sqlite3 "$cookie_jar_path" \
       "SELECT name,value
        FROM moz_cookies
        WHERE baseDomain LIKE 'google.com'
        AND (
                name LIKE 'SID' OR
                name LIKE 'HSID' OR
                name LIKE 'SSID' OR
                (name LIKE 'OSID' AND host LIKE 'takeout.google.com')
        ) AND
        originAttributes LIKE '^userContextId=1'
        ORDER BY creationTime ASC;" | \
                # Reformat the output into Bash exports
                sed -e 's/|/=/' -e 's/^/export /' | \
                # Save the output into a temporary file
                tee "$source_path"

# Load the cookie values into environment variables
source "$source_path"

# Clean up
rm -f "$source_path"
rm -f "$cookie_jar_path"

Google Chrome'dan çerez al

Linux ve muhtemelen macOS kullanıcılarının Google Chrome'dan Google Paket Servis çerezlerini alıp çevre değişkenleri olarak dışa aktarmaları için bir komut dosyası var. Betik Python 3'ün venvkullanılabilir olduğu varsayımına dayanıyor ve DefaultChrome profili giriş yaparken https://takeout.google.com adresini ziyaret ediyor .

Tek astar olarak:

if [ ! -d "$venv_path" ] ; then venv_path=$(mktemp -d) ; fi ; if [ ! -f "${venv_path}/bin/activate" ] ; then python3 -m venv "$venv_path" ; fi ; source "${venv_path}/bin/activate" ; python3 -c 'import pycookiecheat, dbus' ; if [ $? -ne 0 ] ; then pip3 install git+https://github.com/n8henrie/pycookiecheat@dev dbus-python ; fi ; source_path=$(mktemp) ; python3 -c 'import pycookiecheat, json; cookies = pycookiecheat.chrome_cookies("https://takeout.google.com") ; [print("export %s=%s;" % (key, cookies[key])) for key in ["SID", "HSID", "SSID", "OSID"]]' | tee "$source_path" ; source "$source_path" ; rm -f "$source_path" ; deactivate

Daha güzel bir Bash senaryosu olarak:

#!/bin/bash
# Extract Google Takeout cookies from Google Chrome and export them as envvars
#
# The browser must have visited https://takeout.google.com as an authenticated user.

# Warn the user if they didn't run the script with `source`
[[ "${BASH_SOURCE[0]}" == "${0}" ]] && \
       echo 'WARNING: You should source this script to ensure the resulting environment variables get set.'

# Create a path for the Chrome cookie extraction library
if [ ! -d "$venv_path" ]
then
       venv_path=$(mktemp -d)
fi

# Create a Python 3 venv, if it doesn't already exist
if [ ! -f "${venv_path}/bin/activate" ]
then
        python3 -m venv "$venv_path"

fi

# Enter the Python virtual environment
source "${venv_path}/bin/activate"

# Install dependencies, if they are not already installed
python3 -c 'import pycookiecheat, dbus'
if [ $? -ne 0 ]
then
        pip3 install git+https://github.com/n8henrie/pycookiecheat@dev dbus-python
fi

# Get the cookies from the database
source_path=$(mktemp)
read -r -d '' code << EOL
import pycookiecheat, json
cookies = pycookiecheat.chrome_cookies("https://takeout.google.com")
for key in ["SID", "HSID", "SSID", "OSID"]:
        print("export %s=%s" % (key, cookies[key]))
EOL
python3 -c "$code" | tee "$source_path"

# Clean up
source "$source_path"
rm -f "$source_path"
deactivate
[[ "${BASH_SOURCE[0]}" == "${0}" ]] && rm -rf "$venv_path"

İndirilen dosyaları temizle:

rm -rf "$venv_path"

Arşiv oluşturma isteğinde bulun

Bu henüz otomatik değil. Komut dosyasının Google Takeout formunu doldurması ve sonra göndermesi gerekir.

Arşiv oluşturmayı zamanla

Bunu yapmak için henüz tam otomatik bir yol yoktur, ancak Mayıs 2019’da Google Takeout, 1 yıl boyunca her 2 ayda bir 1 yedek oluşturmayı otomatikleştiren bir özellik (toplam 6 yedek) sunar. Bu, arşiv istek formunu doldururken tarayıcıda https://takeout.google.com adresinde yapılmalıdır :

Google Tasfiye: Arşiv biçimini özelleştirin

Arşivin oluşturulduğunu kontrol edin

Bu henüz otomatik değil. Bir arşiv oluşturulduysa, Google bazen kullanıcının Gmail gelen kutusuna bir e-posta gönderir, ancak testimde bu her zaman bilinmeyen nedenlerle olmaz.

Bir arşivin oluşturulduğunu kontrol etmenin tek yolu, düzenli aralıklarla Google Takeout’u sorgulamaktır.

Arşiv listesini al

Çerezlerin yukarıdaki "Çerezleri al" bölümünde ortam değişkenleri olarak ayarlandığını varsayarak bunu yapmak için bir komutum var:

curl -sL -H "Cookie: SID=${SID}; HSID=${HSID}; SSID=${SSID}; OSID=${OSID};" \
'https://takeout.google.com/settings/takeout/downloads' | \
grep -Po '(?<=")https://storage\.cloud\.google\.com/[^"]+(?=")' | \
awk '!x[$0]++'

Çıktı, mevcut tüm arşivlerin indirilmesine yol açan satırlarla ayrılmış bir URL listesidir.
O oluyor regex HTML çözümlenir .

Tüm arşiv dosyalarını indir

Tanımlama bilgilerinin yukarıdaki "Tanımlama bilgileri al" bölümünde ortam değişkenleri olarak ayarlandığı varsayılarak, arşiv dosyalarının URL'lerini almak ve hepsini indirmek için Bash kodudur:

curl -sL -H "Cookie: SID=${SID}; HSID=${HSID}; SSID=${SSID}; OSID=${OSID};" \
'https://takeout.google.com/settings/takeout/downloads' | \
grep -Po '(?<=")https://storage\.cloud\.google\.com/[^"]+(?=")' | \
awk '!x[$0]++' | \
xargs -n1 -P1 -I{} curl -LOJ -C - -H "Cookie: SID=${SID}; HSID=${HSID}; SSID=${SSID}; OSID=${OSID};" {}

Linux'ta test ettim, ancak sözdizimi macOS ile de uyumlu olmalı.

Her bölümün açıklaması:

  1. curl kimlik doğrulama çerezleri ile komut:

    curl -sL -H "Cookie: SID=${SID}; HSID=${HSID}; SSID=${SSID}; OSID=${OSID};" \
  2. İndirme bağlantılarına sahip sayfanın URL’si

    'https://takeout.google.com/settings/takeout/downloads' | \
  3. Filtre yalnızca indirme bağlantılarıyla eşleşiyor

    grep -Po '(?<=")https://storage\.cloud\.google\.com/[^"]+(?=")' | \
  4. Çift bağlantıları filtrele

    awk '!x[$0]++' \ |
  5. Listedeki her dosyayı tek tek indirin:

    xargs -n1 -P1 -I{} curl -LOJ -C - -H "Cookie: SID=${SID}; HSID=${HSID}; SSID=${SSID}; OSID=${OSID};" {}

    Not: İndirmeleri paralel hale getirmek ( -P1daha yüksek bir numaraya değiştirmek ) mümkündür, ancak Google, bağlantılardan birini dışındakileri kısmaya çalışıyor.

    Not: -C - Önceden varolan dosyaları atlar, ancak mevcut dosyalar için indirmeleri başarıyla devam ettiremeyebilir.

İndirilen arşiv dosyalarını şifrele

Bu otomatik değil. Uygulama, dosyalarınızı nasıl şifrelemek istediğinize bağlıdır ve şifrelemekte olduğunuz her dosya için yerel disk alanı tüketimi iki katına çıkarılmalıdır.

İndirilen arşiv dosyalarını Dropbox'a yükleyin

Bu henüz otomatik değil.

İndirilen arşiv dosyalarını AWS S3'e yükleyin

Bu henüz otomatik değildir, ancak indirilen dosyalar listesinde yineleme ve aşağıdaki gibi bir komutu çalıştırma meselesi olmalıdır:

aws s3 cp TAKEOUT_FILE "s3://MYBUCKET/Google Takeout/"

0

Google fotoğraflarımın google diskte düzgün görünmemesini (zaten otomatik olarak yedeklemeliyim!) Düzeltmeyi ararken bu soruyu buldum.

Bu nedenle, fotoğraflarınızın google sürücüde görünmesini sağlamak için https://photos.google.com adresine gidin , ayarları yapın ve fotoğrafları sürücüdeki bir klasörde gösterecek şekilde ayarlayın.

Ardından , google sürücünüzü (artık fotoğrafları 'normal' bir dizin olarak içeren) yerel depolama alanınıza kopyalamak için https://github.com/ncw/rclone adresini kullanın.


rclone harika görünüyor, olgun bir proje gibi görünüyor. Sadece aradığım çözüm.
steampowered

Gerçekten gerçekten güzel. Binlerce fotoğrafımla birlikte, artık içinden geçmeleri biraz zaman alıyor. Dupes'i kontrol etmekten çok, her şeyi kör bir şekilde indirmesini sağlayabilir miyim acaba?
djsmiley2k - CoW
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.