정기적 인 Google 테이크 아웃 백업을 클라우드 저장소로 자동화하는 방법


42

정기적 인 Google 테이크 아웃 백업 을 만들고 (3 개월마다 말하겠습니다) DropBox 또는 S3와 같은 다른 클라우드 저장소에 암호화하여 저장하고 싶습니다.

선호되는 클라우드 간 솔루션 일 필요는 없습니다. 100 % 자동화 할 필요는 없지만 더 좋습니다.

어떤 아이디어라도 미리 감사드립니다.

답변:


2

현재로서는 거의 불가능한 것으로 보이는 Google 테이크 아웃 백업을위한 직접 API 대신 Google 드라이브를 통해 데이터를 타사 스토리지 솔루션에 백업 할 수 있습니다. 많은 Google 서비스는 Google 드라이브에 백업을 허용하며 다음 도구를 사용하여 Google 드라이브를 백업 할 수 있습니다.

GoogleCL -GoogleCL은 Google 서비스를 명령 줄에 제공합니다.

gdatacopier -Google 문서 용 명령 행 문서 관리 유틸리티

FUSE Google 드라이브 -C로 작성된 Google 드라이브 용 FUSE 사용자 공간 파일 시스템

Grive -Google 드라이브 클라이언트의 독립적 인 오픈 소스 구현입니다. Google 문서 목록 API를 사용하여 Google 서버와 통신합니다. 코드는 C ++로 작성되었습니다.

gdrive-cli -GDrive 용 명령 줄 인터페이스입니다. 이것은 흥미로운 GDocs API가 아닌 GDrive API를 사용합니다. 사용하려면 크롬 애플리케이션을 등록해야합니다. 최소한 설치 가능해야하지만 게시 할 필요는 없습니다. repo에는 시작점으로 사용할 수있는 상용구 앱이 있습니다.

python-fuse 예제 -파이썬 FUSE 파일 시스템의 슬라이드와 예제가 들어 있습니다.

이것들 대부분은 우분투 저장소에있는 것 같습니다. 나는 퓨즈, gdrive 및 GoogleCL을 직접 사용했으며 모두 잘 작동합니다. 원하는 제어 수준에 따라이 작업은 매우 쉽고 복잡합니다. 그것은 당신에게 달려 있습니다. EC2 / S3 서버에서 직접 수행해야합니다. 필요한 모든 것에 대해 명령을 하나씩 알아내어 크론 작업의 스크립트에 넣으십시오.

열심히 일하고 싶지 않다면 Spinbackup 과 같은 서비스를 사용할 수도 있습니다 . 나는 다른 사람들처럼 좋은 것이 확실하지만 나는 시도하지 않았다.


20
Google 테이크 아웃 다른 도구보다 더 많은 서비스를 지원하기 때문에 가장 적합한 도구입니다. 질문이 유효합니다.
jl6

6
@ krowe : 귀하의 답변은 Google 드라이브에만 관련이 있지만 실제로는 유용합니다. Google 테이크 아웃을 사용하면 Google 드라이브뿐만 아니라 25 개의 다른 Google 서비스에서 모든 데이터를 다운로드 할 수 있습니다.
Bjarke Freund-Hansen

@ BjarkeFreund-Hansen 1) 이러한 25 개 서비스 중 많은 서비스를 GDrive에 저장하고 자동 GDrive 백업의 일부로 자동 백업 할 수 있습니다. 2) 나머지 서비스는 대부분 백업 (+1, 서클 등) 또는 기능 상실 (Google 코드)에 무의미합니다. 3) 더 나은 답변이없는 사람들에게 이것을 설명하는 데 지쳤습니다. 테이크 아웃을 자동화 할 수있는 방법이 없다고 확신합니다 (클라이언트 측 매크로 사용 제외). 4) 당신이 나를 잘못 증명할 수 있다면 더 나은 솔루션을 게시하고 우리는 이야기 할 수 있습니다. 그렇지 않은 경우 동일한 문제에 대한 이전 의견을 참조하십시오.
krowe

6
@krowe : Gmail, 캘린더, 연락처, 사진, 행 아웃 기록 및 위치 기록은 광범위하게 사용하는 서비스이며 Google의 데이터 손실을 막고 자합니다. 해당 서비스 데이터는 Google 드라이브에 포함되어 있지 않습니다. 더 나은 해결책을 모르거나 전혀 존재하지 않기 때문에 더 정확하게 대답하지 못합니다. 다시 말하지만, 당신이 대답하는 것이 나쁘지 않다는 것이 아니라 실제 질문에 대답하지 않습니다.
Bjarke Freund-Hansen

@ BjarkeFreund-Hansen 귀하의 불만과 일부 서비스가 GDrive와 동기화 될 수 있음을 이해합니다. 예를 들어 Google 포토는 백업 사진을 수행 할 수 있습니다 . 캘린더와 연락처를 같은 방식으로 동기화 할 수 있다고 생각합니다. Gmail도 백업 할 수 있습니다 : Backup GMail . 당신이 언급하지 않은 다른 것들은 대부분 개인적으로 백업을 방해하지 않기 때문입니다.
krowe December

2

이것은 부분 자동화의 부분 답변입니다. Google이 Google 테이크 아웃에 대한 자동 액세스를 단속하기로 선택하면 향후 작동이 중지 될 수 있습니다. 이 답변에서 현재 지원되는 기능 :

+ --------------------------------------------- + --- --------- + --------------------- +
| 자동화 기능 | 자동화 되었습니까? | 지원되는 플랫폼 |
+ --------------------------------------------- + --- --------- + --------------------- +
| Google 계정 로그인 | 아니요 | |
| Mozilla Firefox에서 쿠키 가져 오기 | 예 | 리눅스 |
| Chrome에서 쿠키 가져 오기 | 예 | 리눅스, macOS |
| 아카이브 생성 요청 | 아니요 | |
| 아카이브 생성 일정 | 킨다 | 테이크 아웃 웹 사이트 |
| 아카이브가 작성되었는지 확인 | 아니요 | |
| 보관 목록 가져 오기 | 예 | 크로스 플랫폼 |
| 모든 아카이브 파일 다운로드 | 예 | 리눅스, macOS |
| 다운로드 한 아카이브 파일 암호화 | 아니요 | |
| 다운로드 한 아카이브 파일을 Dropbox | 아니요 | |
| 다운로드 한 아카이브 파일을 AWS S3에 업로드 | 아니요 | |
+ --------------------------------------------- + --- --------- + --------------------- +

첫째, Google 테이크 아웃과 알려진 객체 저장소 공급자간에 인터페이스가 없기 때문에 클라우드 간 솔루션이 실제로 작동하지 않습니다. 백업 파일을 오브젝트 스토리지 제공자로 전송하기 전에 자신의 머신 (원하는 경우 퍼블릭 클라우드에서 호스팅 가능)에서 백업 파일을 처리해야합니다.

둘째, Google 테이크 아웃 API가 없으므로 자동화 스크립트는 브라우저를 사용하여 사용자가 Google 테이크 아웃 아카이브 생성 및 다운로드 흐름을 안내하는 척해야합니다.


자동화 기능

Google 계정 로그인

아직 자동화되지 않았습니다. 스크립트는 브라우저 인 척하고 2 단계 인증, 보안 문자 및 기타 보안 강화 검사와 같은 가능한 장애물을 탐색해야합니다.

Mozilla Firefox에서 쿠키 가져 오기

Linux 사용자가 Mozilla Firefox에서 Google 테이크 아웃 쿠키를 가져 와서 환경 변수로 내보내는 스크립트가 있습니다. 이 기능을 사용하려면 Firefox 프로필이 하나만 있어야 하며 로그인하는 동안 프로필은 https://takeout.google.com 을 방문해야합니다 .

원 라이너로 :

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"

더 예쁜 Bash 스크립트로 :

#!/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"

Chrome에서 쿠키 가져 오기

Linux 및 macOS 사용자가 Chrome에서 Google 테이크 아웃 쿠키를 가져 와서 환경 변수로 내보내는 스크립트가 있습니다. 이 스크립트는 Python 3 venv을 사용할 수 있고 로그인하는 동안 DefaultChrome 프로필이 https://takeout.google.com 을 방문한 것으로 가정합니다 .

원 라이너로 :

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

더 예쁜 Bash 스크립트로 :

#!/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"

다운로드 한 파일 정리 :

rm -rf "$venv_path"

아카이브 생성 요청

아직 자동화되지 않았습니다. 스크립트는 Google 테이크 아웃 양식을 작성한 다음 제출해야합니다.

아카이브 생성 일정

아직 완전히 자동화 된 방법은 없지만 2019 년 5 월 Google 테이크 아웃은 1 년 동안 2 개월마다 1 개의 백업 생성을 자동화하는 기능을 도입했습니다 (총 6 개의 백업). 보관 요청 양식을 작성하는 동안 https://takeout.google.com 브라우저에서 수행해야합니다 .

Google 테이크 아웃 : 보관 형식 맞춤 설정

아카이브가 생성되었는지 확인

아직 자동화되지 않았습니다. 보관 파일이 생성 된 경우 Google은 때때로 사용자의 Gmail받은 편지함으로 이메일을 보내지 만 필자의 테스트에서 항상 알 수없는 이유로 발생하는 것은 아닙니다.

아카이브가 생성되었는지 확인하는 유일한 다른 방법은 Google 테이크 아웃을 주기적으로 폴링하는 것입니다.

보관 목록 가져 오기

쿠키가 위의 "쿠키 가져 오기"섹션에서 환경 변수로 설정되었다고 가정하면 다음과 같은 명령이 있습니다.

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]++'

출력은 사용 가능한 모든 아카이브를 다운로드하는 줄로 구분 된 URL 목록입니다. regex를 사용하여 HTML
에서 구문 분석되었습니다 .

모든 아카이브 파일 다운로드

쿠키가 위의 "쿠키 가져 오기"섹션에서 환경 변수로 설정되었다고 가정하면 Bash의 아카이브 파일 URL을 가져 와서 모두 다운로드하는 코드는 다음과 같습니다.

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에서 테스트했지만 구문은 macOS와 호환되어야합니다.

각 부분에 대한 설명 :

  1. curl 인증 쿠키가 포함 된 명령 :

    curl -sL -H "Cookie: SID=${SID}; HSID=${HSID}; SSID=${SSID}; OSID=${OSID};" \
  2. 다운로드 링크가있는 페이지의 URL

    'https://takeout.google.com/settings/takeout/downloads' | \
  3. 다운로드 링크 만 일치하는 필터

    grep -Po '(?<=")https://storage\.cloud\.google\.com/[^"]+(?=")' | \
  4. 중복 링크 필터링

    awk '!x[$0]++' \ |
  5. 목록에서 각 파일을 하나씩 다운로드하십시오.

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

    참고 : 다운로드 병렬화 ( -P1높은 수로 변경 )가 가능하지만 Google은 연결 중 하나를 제외한 모든 것을 제한하는 것으로 보입니다.

    참고 : -C - 이미 존재하는 파일은 건너 뛰지 만 기존 파일의 다운로드를 다시 시작하지 못할 수 있습니다.

다운로드 한 아카이브 파일 암호화

이것은 자동화되지 않습니다. 구현 방법은 파일을 암호화하는 방법에 따라 다르며 암호화하는 각 파일에 대해 로컬 디스크 공간 소비를 두 배로 늘려야합니다.

다운로드 한 보관 파일을 Dropbox에 업로드

아직 자동화되지 않았습니다.

다운로드 한 아카이브 파일을 AWS S3에 업로드

이것은 아직 자동화되지는 않았지만 단순히 다운로드 된 파일 목록을 반복하고 다음과 같은 명령을 실행하면됩니다.

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

0

Google 드라이브에서 Google 사진이 올바르게 표시되지 않는 문제를 해결하는 방법을 검색하는 동안이 질문을 발견했습니다 (이미 자동 백업 중입니다).

따라서 Google 드라이브에 사진을 표시하려면 https://photos.google.com 설정으로 이동하여 드라이브의 폴더에 사진을 표시하도록 설정하십시오.

그런 다음 https://github.com/ncw/rclone 을 사용 하여 전체 Google 드라이브 (이제 사진을 '일반'디렉토리로 포함)를 로컬 저장소에 복제하십시오.


rclone은 좋아 보인다, 성숙한 프로젝트처럼 보인다. 내가 찾던 해결책 만.
steampowered

정말 좋습니다. 수천 장의 사진으로 사진을 찍는 데 시간이 걸립니다. 듀피를 확인하는 대신 모든 것을 맹목적으로 다운로드 할 수 있는지 궁금합니다.
djsmiley2k-CoW
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.