본문 바로가기
서버/리눅스 서버

구글 드라이브 데이터 마이그레이션 (팀드라이브 이용)

by ㅋㅋ잠자 2022. 1. 25.
반응형

안녕하세요?

 

구글 드라이브 이전 관련하여, 제가 실제로 21년 4월달에 eddylab.co.kr 계정으로 이전하면서 작업했던 내용을 작성합니다. 문의는 덧글로 주시면 답변 드리겠습니다.

 

제가 잘못알고 있는 부분이 있을 수 있습니다만, 제가 이 방법으로 80TB 정도를 이전하였습니다.

 

1. 결론

새로 이전하는 eddylab.co.kr 계정에서 팀드라이브를 생성하고, 구 계정을 관리자로 등록합니다.

구 계정에서 eddylab.co.kr 계정에서 만든 팀드라이브가 보임을 체크합니다.

 

rclone 으로, 구계정의 root 와, 팀드라이브 (eddylab.co.kr) 를 등록합니다.

rclone move 를 통해 [구계정] --> 팀드라이브로 서버 파일 복사로 파일을 짤라내기 합니다.

(대략 5시간 소요 됩니다.)

--> 이때 왜 웹 드래그 하면 안되는지에 대한 부분은 내 드라이브 파일을 다른 조직의 팀드라이브로 옮기는 권한은 대부분 이전에 쓰던 조직에 권한이 없으실 것입니다. 제네럴하게 rclone 으로 복사하시는게 편리하고 안전합니다.

 

새 계정으로와서, 팀드라이브에서 내 드라이브로 드래그 복사하여 파일을 이전합니다.

--> 팀드에서 내드라이브로 옮기는 권한은 eddylab.co.kr 조직에 허용되어 있습니다.

 

웹 브라우저 상으로 모두 이전이 되었으나, 실제로 파일이 바로 보이지 않는 것들이 있습니다.

이는 파일이 많은 폴더를 다른 사람에게 공유했을 때, 파일이 바로 보이지 않는 것과 동일한 현상입니다.

--> 하루정도 지나면 파일이 모두 보입니다.

 

이때 주의하실 점이, 팀드라이브는 파일개수가 40만개 제한이 있습니다.

안전성을 위해 40만개가 넘어갈 경우, (rclone 에서 에러가 발생하면) 팀드라이브를 하나 더 생성하고 rclone move 를 사용하시길 바랍니다.

 

40만개가 넘을 경우, 동일한 방법으로 웹브라우저 드래그를 2번 하면 꼬이는 경우가 있습니다. rclone move 를 하셔야합니다.

 

2. 마이그레이션 테스트 결과 (21년 4월 당시)

https://cafe.naver.com/mk802/42006

저는 파일 갯수가 27만개였습니다. 대충 70TB 를 옮긴것 같습니다.

 

1. 구 드라이브 --> 팀드라이브 (rclone move)

대략 11시간

 

2. 팀드라이브 --> 신 드라이브 (웹 브라우저)

파일 반영까지 느긋하게 1일

 

에러 내용은 아래와 같습니다.

1. 파일 뎁스가 너무 깊음

--> 필요한 파일이 아니라서 삭제 했습니다.

 

2. 파일 소유자가 구 드라이브가 아닌 다른 사용자가 공유한 파일

--> 무제한 계정과, 제 오리지날 구글아이디 사이에 파일 관리를 제가 잘못하여 gmail.com 소유의 파일이 있었습니다.

--> 별 중요한 파일이 아니라 삭제했습니다.

 

3. 마이그레이션 1 / 팀드라이브 생성

오늘 예제로 보여드릴 마이그레이션 과정은 아래와 같습니다.

djj9404@gmail.com (일반계정) --> djjproject@eddylab.co.kr 이전입니다.

(예제라서 파일 수가 작습니다.)

 

eddylab.co.kr 계정에서 팀드라이브를 하나 만듭니다.

(마이그레이션용 팀드라이브는 계정 신청시 만들어졌고, 15기가 무료계정에 관리자 권한이 부여되었을 것입니다.)

왼쪽 상단의 새로 만들기 메뉴를 통해 팀드라이브를 하나 생성합니다.

팀드라이브가 생성되었습니다.

이전 대상 계정을 관리자로 추가합니다.

관리자로 이전 대상 계정이 등록되었음을 확인합니다.

이전 대상 계정에 팀드라이브가 보이는지 확인합니다.

 

4. 마이그레이션 2  / rclone 설치

먼저 rclone 설정을 해야합니다.

제일 쉬운 방법으로 윈도우로 설명 드립니다. (리눅스도 커맨드는 같습니다.)

리눅스 설치및 활용 방법
https://blog.djjproject.com/524

rclone 에 등록할 대상 드라이브는 2개입니다.

구 계정의 구글드라이브의 rootfs 와 3번 섹션에서 만들었던 migration_example 팀드라이브 입니다.

 

아래 사이트에서 rclone 을 다운받습니다.

https://rclone.org/downloads/

압축을 풀면 바로 바이너리가 있습니다. 일단 환경변수에 등록하기 위해 C 드라이브에 폴더를 하나 생성합니다.

bin 이라는 폴더를 생성하고 파일을 넣어줍니다.

윈도우 검색에서 환경 이라고 검색합니다.

위와 같이 처리하면 powershell 이나 cmd 에서 바로 rclone 을 불러 사용할 수 있습니다.

파워쉘을 실행하여 rclone 이 동작하는지 체크합니다.

실행이 정상입니다.

 

5. 마이그레이션 3  / 드라이브 2개 등록

등록 대상 드라이브는 아래와 같습니다.

 

1. 구계정의 구글 드라이브 전체 경로

2. 구계정에 등록된 eddylab.co.kr 팀드라이브

 

먼저 구 계정의 구글드라이브 전체 경로를 등록하겠습니다.

PS C:\Users\USER> rclone config
2022/01/25 21:21:03 NOTICE: Config file "C:\\Users\\USER\\.config\\rclone\\rclone.conf" not found - using defaults
No remotes found - make a new one

n) New remote
s) Set configuration password
q) Quit config
n/s/q> n
name> gdrive_original
Type of storage to configure.
Enter a string value. Press Enter for the default ("").
Choose a number from below, or type in your own value
 1 / 1Fichier
   \ "fichier"
 2 / Alias for an existing remote
   \ "alias"
 3 / Amazon Drive
   \ "amazon cloud drive"
 4 / Amazon S3 Compliant Storage Providers including AWS, Alibaba, Ceph, Digital Ocean, Dreamhost, IBM COS, Minio, and Tencent COS
   \ "s3"
 5 / Backblaze B2
   \ "b2"
 6 / Box
   \ "box"
 7 / Cache a remote
   \ "cache"
 8 / Citrix Sharefile
   \ "sharefile"
 9 / Compress a remote
   \ "compress"
10 / Dropbox
   \ "dropbox"
11 / Encrypt/Decrypt a remote
   \ "crypt"
12 / Enterprise File Fabric
   \ "filefabric"
13 / FTP Connection
   \ "ftp"
14 / Google Cloud Storage (this is not Google Drive)
   \ "google cloud storage"
15 / Google Drive
   \ "drive"
16 / Google Photos
   \ "google photos"
17 / Hadoop distributed file system
   \ "hdfs"
18 / Hubic
   \ "hubic"
19 / In memory object storage system.
   \ "memory"
20 / Jottacloud
   \ "jottacloud"
21 / Koofr
   \ "koofr"
22 / Local Disk
   \ "local"
23 / Mail.ru Cloud
   \ "mailru"
24 / Mega
   \ "mega"
25 / Microsoft Azure Blob Storage
   \ "azureblob"
26 / Microsoft OneDrive
   \ "onedrive"
27 / OpenDrive
   \ "opendrive"
28 / OpenStack Swift (Rackspace Cloud Files, Memset Memstore, OVH)
   \ "swift"
29 / Pcloud
   \ "pcloud"
30 / Put.io
   \ "putio"
31 / QingCloud Object Storage
   \ "qingstor"
32 / SSH/SFTP Connection
   \ "sftp"
33 / Sugarsync
   \ "sugarsync"
34 / Tardigrade Decentralized Cloud Storage
   \ "tardigrade"
35 / Transparently chunk/split large files
   \ "chunker"
36 / Union merges the contents of several upstream fs
   \ "union"
37 / Webdav
   \ "webdav"
38 / Yandex Disk
   \ "yandex"
39 / Zoho
   \ "zoho"
40 / http Connection
   \ "http"
41 / premiumize.me
   \ "premiumizeme"
42 / seafile
   \ "seafile"

Storage> 15
** See help for drive backend at: https://rclone.org/drive/ **

Google Application Client Id
Setting your own is recommended.
See https://rclone.org/drive/#making-your-own-client-id for how to create your own.
If you leave this blank, it will use an internal key which is low performance.
Enter a string value. Press Enter for the default ("").
client_id>
OAuth Client Secret
Leave blank normally.
Enter a string value. Press Enter for the default ("").
client_secret>
Scope that rclone should use when requesting access from drive.
Enter a string value. Press Enter for the default ("").
Choose a number from below, or type in your own value
 1 / Full access all files, excluding Application Data Folder.
   \ "drive"
 2 / Read-only access to file metadata and file contents.
   \ "drive.readonly"
   / Access to files created by rclone only.
 3 | These are visible in the drive website.
   | File authorization is revoked when the user deauthorizes the app.
   \ "drive.file"
   / Allows read and write access to the Application Data folder.
 4 | This is not visible in the drive website.
   \ "drive.appfolder"
   / Allows read-only access to file metadata but
 5 | does not allow any access to read or download file content.
   \ "drive.metadata.readonly"
scope> 1
ID of the root folder
Leave blank normally.

Fill in to access "Computers" folders (see docs), or for rclone to use
a non root folder as its starting point.

Enter a string value. Press Enter for the default ("").
root_folder_id>
Service Account Credentials JSON file path
Leave blank normally.
Needed only if you want use SA instead of interactive login.

Leading `~` will be expanded in the file name as will environment variables such as `${RCLONE_CONFIG_DIR}`.

Enter a string value. Press Enter for the default ("").
service_account_file>
Edit advanced config? (y/n)
y) Yes
n) No (default)
y/n> n
Remote config
Use auto config?
 * Say Y if not sure
 * Say N if you are working on a remote or headless machine
y) Yes (default)
n) No
y/n> y
If your browser doesn't open automatically go to the following link: http://127.0.0.1:53682/auth?state=LDwrXUT
Log in and authorize rclone for access
Waiting for code...

이때 브라우저가 열리면서 로그인을 하게 됩니다.

구 계정을 로그인해주시면 됩니다.

중간에 팀드라이브로 등록할것인지 물어보는 부분이 있습니다. 2번째 드라이브 설정 시에 팀드라이브 등록예정이라 지금은 N을 입력합니다.

Got code
Configure this as a Shared Drive (Team Drive)?
y) Yes
n) No (default)
y/n> n
--------------------
[gdrive_original]
type = drive
scope = drive
token = {}
--------------------
y) Yes this is OK (default)
e) Edit this remote
d) Delete this remote
y/e/d> y
Current remotes:

Name                 Type
====                 ====
gdrive_original      drive

e) Edit existing remote
n) New remote
d) Delete remote
r) Rename remote
c) Copy remote
s) Set configuration password
q) Quit config
e/n/d/r/c/s/q>

등록이 완료 되었습니다.

 

이어서 팀드라이브를 동일한 방법으로 등록합니다.

e) Edit existing remote
n) New remote
d) Delete remote
r) Rename remote
c) Copy remote
s) Set configuration password
q) Quit config
e/n/d/r/c/s/q> n
name> gdrive_team_migration
Type of storage to configure.
Enter a string value. Press Enter for the default ("").
Choose a number from below, or type in your own value
 1 / 1Fichier
   \ "fichier"
 2 / Alias for an existing remote
   \ "alias"
 3 / Amazon Drive
   \ "amazon cloud drive"
 4 / Amazon S3 Compliant Storage Providers including AWS, Alibaba, Ceph, Digital Ocean, Dreamhost, IBM COS, Minio, and Tencent COS
   \ "s3"
 5 / Backblaze B2
   \ "b2"
 6 / Box
   \ "box"
 7 / Cache a remote
   \ "cache"
 8 / Citrix Sharefile
   \ "sharefile"
 9 / Compress a remote
   \ "compress"
10 / Dropbox
   \ "dropbox"
11 / Encrypt/Decrypt a remote
   \ "crypt"
12 / Enterprise File Fabric
   \ "filefabric"
13 / FTP Connection
   \ "ftp"
14 / Google Cloud Storage (this is not Google Drive)
   \ "google cloud storage"
15 / Google Drive
   \ "drive"
16 / Google Photos
   \ "google photos"
17 / Hadoop distributed file system
   \ "hdfs"
18 / Hubic
   \ "hubic"
19 / In memory object storage system.
   \ "memory"
20 / Jottacloud
   \ "jottacloud"
21 / Koofr
   \ "koofr"
22 / Local Disk
   \ "local"
23 / Mail.ru Cloud
   \ "mailru"
24 / Mega
   \ "mega"
25 / Microsoft Azure Blob Storage
   \ "azureblob"
26 / Microsoft OneDrive
   \ "onedrive"
27 / OpenDrive
   \ "opendrive"
28 / OpenStack Swift (Rackspace Cloud Files, Memset Memstore, OVH)
   \ "swift"
29 / Pcloud
   \ "pcloud"
30 / Put.io
   \ "putio"
31 / QingCloud Object Storage
   \ "qingstor"
32 / SSH/SFTP Connection
   \ "sftp"
33 / Sugarsync
   \ "sugarsync"
34 / Tardigrade Decentralized Cloud Storage
   \ "tardigrade"
35 / Transparently chunk/split large files
   \ "chunker"
36 / Union merges the contents of several upstream fs
   \ "union"
37 / Webdav
   \ "webdav"
38 / Yandex Disk
   \ "yandex"
39 / Zoho
   \ "zoho"
40 / http Connection
   \ "http"
41 / premiumize.me
   \ "premiumizeme"
42 / seafile
   \ "seafile"
Storage> 15
** See help for drive backend at: https://rclone.org/drive/ **

Google Application Client Id
Setting your own is recommended.
See https://rclone.org/drive/#making-your-own-client-id for how to create your own.
If you leave this blank, it will use an internal key which is low performance.
Enter a string value. Press Enter for the default ("").
client_id>
OAuth Client Secret
Leave blank normally.
Enter a string value. Press Enter for the default ("").
client_secret>
Scope that rclone should use when requesting access from drive.
Enter a string value. Press Enter for the default ("").
Choose a number from below, or type in your own value
 1 / Full access all files, excluding Application Data Folder.
   \ "drive"
 2 / Read-only access to file metadata and file contents.
   \ "drive.readonly"
   / Access to files created by rclone only.
 3 | These are visible in the drive website.
   | File authorization is revoked when the user deauthorizes the app.
   \ "drive.file"
   / Allows read and write access to the Application Data folder.
 4 | This is not visible in the drive website.
   \ "drive.appfolder"
   / Allows read-only access to file metadata but
 5 | does not allow any access to read or download file content.
   \ "drive.metadata.readonly"
scope> 1
ID of the root folder
Leave blank normally.

Fill in to access "Computers" folders (see docs), or for rclone to use
a non root folder as its starting point.

Enter a string value. Press Enter for the default ("").
root_folder_id>
Service Account Credentials JSON file path
Leave blank normally.
Needed only if you want use SA instead of interactive login.

Leading `~` will be expanded in the file name as will environment variables such as `${RCLONE_CONFIG_DIR}`.

Enter a string value. Press Enter for the default ("").
service_account_file>
Edit advanced config? (y/n)
y) Yes
n) No (default)
y/n> n
Remote config
Use auto config?
 * Say Y if not sure
 * Say N if you are working on a remote or headless machine
y) Yes (default)
n) No
y/n> y
If your browser doesn't open automatically go to the following link: http://127.0.0.1:53682/auth?state=3rHMUwg
Log in and authorize rclone for access
Waiting for code...
Got code
Configure this as a Shared Drive (Team Drive)?
y) Yes
n) No (default)
y/n> y
Fetching Shared Drive list...
Choose a number from below, or type in your own value
 1 / migration_example
   \ "0ADE"
Enter a Shared Drive ID> 1
--------------------
[gdrive_team_migration]
type = drive
scope = drive
token = {}
team_drive = 0ADE
root_folder_id =
--------------------
y) Yes this is OK (default)
e) Edit this remote
d) Delete this remote
y/e/d> y
Current remotes:

Name                 Type
====                 ====
gdrive_original      drive
gdrive_team_migration drive

e) Edit existing remote
n) New remote
d) Delete remote
r) Rename remote
c) Copy remote
s) Set configuration password
q) Quit config
e/n/d/r/c/s/q> q

이렇게 gdrive_original / gdrive_team_migraion 2개를 연결하였습니다.

 

6. 마이그레이션 4  / 파일 move

먼저, move 를 하기 전에 구계정에 파일이 몇개인지 확인해야합니다.

rclone size [remote 이름]: 이 방법으로 파일 카운트와 용량 정보를 확인하실 수 있습니다.

 

40만개가 넘어가지 않아야 한번에 이동이 가능합니다.

(팀드라이브 파일 제한량이 40만개입니다.)

 

저는 예시로 /migration_test 폴더만 이동해보겠습니다.

실제로는 통째로 이전해야하기 때문에 명령은 rclone size gdrive_original: 로 체크해보셔야합니다.

PS C:\Users\USER> rclone size gdrive_original:/migration_test
Total objects: 18
Total size: 112.028 MBytes (117469902 Bytes)

파일 카운트를 체크합니다.

 

40만개 이하라면 그대로 진행하시면 됩니다.

(파일 갯수에 따라 결과 보는데까지 오래 걸릴 수 있습니다.)

 

명령어는 아래와 같습니다.

rclone move # 짤라내기
--transfers 32 # 32개 쓰레드 이동
--drive-acknowledge-abuse  # 바이러스 걸린 파일이나 이런걸 무시하고 이동
--drive-server-side-across-configs # 서버쪽 카피
-P # 로그 보여주기
--delete-empty-src-dirs # move 가 완료되고 빈 폴더 삭제
"gdrive_original:/migration_test/" "gdrive_team_migration:/"

파워쉘에서 실행합니다.

PS C:\Users\USER> rclone move --transfers 32 --drive-acknowledge-abuse --drive-server-side-across-configs -P --delete-empty-src-dirs "gdrive_original:/migration_test/" "gdrive_team_migration:/"
Transferred:             0 / 0 Bytes, -, 0 Bytes/s, ETA -
Checks:                36 / 36, 100%
Renamed:               36
Elapsed time:        14.8s
PS C:\Users\USER>

구 드라이브에서 파일이 없어졌을 것입니다.

팀드라이브로 이동이 되었습니다.

 

7. 마이그레이션 5  / 신규 드라이브에서 파일 드래그

신규 계정으로 이동하여 팀드라이브에서 내 드라이브로 파일 복사를 진행합니다.

이때 소유권도 신규 계정으로 이전됩니다.

아래의 메시지가 보일 때 까지 기다리시면 됩니다.

아래와 같이 수정한 사람은 이전계정이지만, 소유자는 신규계정입니다.

 

이런 방법으로 70TB 정도를 아래의 시간으로 이전이 가능합니다.

 

1. copy 시간 : 25만개 기준 11시간

--> 파일 용량은 크게 중요하지 않습니다. 파일 갯수가 중요합니다.

2. 드래그 후 반영되는 시간

--> 하루정도

 

총 하루 이틀 정도 생각하시면 이전 가능합니다.

 

8. 마이그레이션 번외 : 40만개가 넘을 경우

40만개가 넘을 경우는 대부분 없으실 것입니다만, 혹시 넘을 경우.. 아래와 같이 진행합니다.

 

폴더가 여러개 있으실 것입니다. 그 중에서 40만개가 안넘도록 그룹을 지정하여 미리 나눕니다.

(rclone size 명령을 통해 폴더별 갯수 조회하여 순서를 정합니다.)

 

폴더가 5개 있다고 하면, 3개 합이 40만개가 안넘고, 4개하면 넘을 경우..

3개만 먼저 옮기고 나머지 2개는 나중에 옮깁니다.

 

1) 먼저 폴더 3개의 경우 (6번섹션, 7번섹션을 진행)

팀드라이브로 폴더 3개를 지정하여, rclone 명령 3번으로 옮깁니다.

rclone move --transfers 32 --drive-acknowledge-abuse --drive-server-side-across-configs -P --delete-empty-src-dirs "gdrive_original:/migration_test/1st_folder" "gdrive_team_migration:/"
rclone move --transfers 32 --drive-acknowledge-abuse --drive-server-side-across-configs -P --delete-empty-src-dirs "gdrive_original:/migration_test/2nd_folder" "gdrive_team_migration:/"
rclone move --transfers 32 --drive-acknowledge-abuse --drive-server-side-across-configs -P --delete-empty-src-dirs "gdrive_original:/migration_test/3rd_folder" "gdrive_team_migration:/"

드래그 하여 파일을 옮깁니다.

 

2) 나중 폴더 2개의 경우 (6번 섹션만 진행)

새로 팀드라이브를 하나 파거나, 기존에 마이그레이션용으로 쓰던 팀드라이브가 비어있는지 확인하고

2개 폴더를 옮깁니다.

rclone move --transfers 32 --drive-acknowledge-abuse --drive-server-side-across-configs -P --delete-empty-src-dirs "gdrive_original:/migration_test/4th_folder" "gdrive_team_migration:/"
rclone move --transfers 32 --drive-acknowledge-abuse --drive-server-side-across-configs -P --delete-empty-src-dirs "gdrive_original:/migration_test/5th_folder" "gdrive_team_migration:/"

이때 7번 섹션처럼 드래그로 옮기면 파일이 꼬일 수 있습니다.

(파일 ID가 같거나 하면 유실되는 파일이 생김)

 

따라서 이때는 rclone config 을 통해 신규 eddylab.co.kr 의 드라이브와 팀드라이브(마이그레이션용) 2개를 추가 연결하여 진행합니다. (5번 섹션의 작업을 신규 계정에 대해 진행)

 

여기서 중요한 부분이 신규 계정으로 재등록을 하지 않고 move 하게 되면 server-side-copy 가 되지 않습니다.

동일 계정에 대해서 팀드라이브 / 내드라이브를 등록하시길 바랍니다.

 

4번 폴더와 5번 폴더가 팀드라이브에 복사되고 나서,

rclone 에 신규 계정 드라이브가 아래와 같이 등록되었다고 가정합니다.

gdrive_new_team_migration 은 구 계정의 gdrvie_team_migration 과 동일 팀드라이브 입니다.

gdrive_new
gdrive_new_team_migration

아래 명령어로 파일을 이동합니다.

rclone move --transfers 32 --drive-acknowledge-abuse --drive-server-side-across-configs -P --delete-empty-src-dirs "gdrive_new_team_migration:/" "gdrive_new:/"

 

9. 마치며

이번 공구 가격은 매우 매력적인 조건임에 틀림없고, 저는 구드를 아래 용량만큼 쓰기 때문에

하드디스크를 여러개 구매하여 RAID 구성에 2중백업 까지 그리고 전기용량 생각하면 구글드라이브의 대체제가 없습니다.

문의 사항이 있으면 편하게 덧글 달아 주세요.

 

감사합니다.

 

반응형

댓글