- Googleドライブ クライアントの仕様比較
- 検証対象
- GUIではなくコンソールから使用できるものを対象とした
- aur:google-drive-ocamlfuse 0.6.7-1
- aur:gdrivefs 0.14.8-2
- rclone 1.35-1
- 検証に用いる一時ファイルなどは以下のように用意した
dd if=/dev/urandom of=1GiB.0 count=1048576 bs=1024 for i in {0..9}; do dd if=/dev/urandom of=102.4MiB.$i count=7482 bs=14351; done for i in {0..99}; do dd if=/dev/urandom of=10.24MiB.$i count=346 bs=31033; done for i in {0..100}; do dd if=/dev/urandom of=1MiB.$i count=1024 bs=1024; done for i in {0..1000}; do dd if=/dev/urandom of=100KiB.$i count=100 bs=1024; done $ du -b 1073745920 ./1.1Gx1 1073745916 ./2.102Mx10 1073745896 ./3.10Mx100 105910272 ./4.1Mx100 102539264 ./5.100Kx1000
- 4.1Mx100 は実際には101ファイル、5.100Kx1000も同じく1001ファイル
- rsync オプションについて
rsync --times --recursive --links --human-readable --whole-file --delete --stats --inplace --verbose
- ファイルシステムとしてマウント可能なクライアントに対して使用
- コピー中の一時ファイルを作成させないため、 --inplace オプションを用いた
- rsync · astrada/google-drive-ocamlfuse Wiki
- dstat のオプションは次のようにした
dstat -t -c -m -d -n -o dstat.csv --nocolor 5
- 検証環境
- QEMU/KVM VM on Core i7-4790 (wiki:TipAndDoc/Hardware#ASUSH97M-PLUS)
- vCPU: 2cores
- Mem : 2GB
- Disk: qcow2 file backend on software RAID1 HDD x2
- ArchLinux 4.10.x (途中で何度かアップデート)
- インターネット回線について
- 比較的安定しているが、時間帯(主に深夜)によっては遅くなる
- 下り: 100Mbps~、上り: 80Mbps~ をほぼ維持できている
- 参考: http://www.speedtest.net/result/6254044691, http://beta.speedtest.net/result/6294874249
用語について
- アップロード
- ローカルストレージからGoogleドライブへの移動・コピー。もしくはマウントされているFUSEへの書き込み
- ダウンロード
- アップロードの逆で、ローカルストレージへの移動・コピー。もしくはマウントされているFUSEからの読み込み
- キャッシュ
- FUSEを使ってマウントする場合に、ローカルストレージに作成される一時ファイル
- ファイルID
- Googleドライブ上でアイテム(ファイル・ディレクトリ)を一意に指定するID
- Googleドライブではディレクトリもファイルの一種
- ブラウザ上ではURLにこれが含まれる
brief overview of comparison
- 各ツールの設定において、特にチューニング等は行っていない
- I/Oの速度計測は十分な回数実施し平均をとるべきだが、傾向が見たいだけだったので各1回しか計測していない
名前 | アクセス方法 | Up | Down | mtimeの保存 | CPU負荷 | 操作の中断 | |||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
- | - | 1.07GB x1 | 102MB x10 | 10MB x100 | 1MB x101 | 1.07GB x1 | 102MB x10 | 10MB x100 | 1MB x101 | アップロード | ダウンロード *1 | - | - |
ブラウザ | WebUI | 10MB/s~ | 未計測 | 未計測 | 未計測 | 10MB/s~ | 未計測 | 未計測 | 未計測 | 保存されない | 保存されない | 低負荷 | 可 |
google-drive-ocamlfuse | FUSE mount | 940.87KB/s | 828.39KB/s | 623.52KB/s | 158.71KB/s | 14.04MB/s | 9.72MB/s | 未計測 | 503.27KB/s | 保存されない | 保存される | 高負荷(IO wait) | 不可 |
GDriveFS | FUSE mount | 3.22MB/s *2 | 1.95MB/s | 1.11MB/s | 197.46KB/s | 計測不可 *3 | 984.82KB/s *4 | 未計測 | 816.26KB/s *4 | 場合による *5 | 保存される | 高負荷(usr) | 不可 |
rclone | CUI (rsync like) | 7.064MB/s | 9.783MB/s | 8.532MB/s | 2.397MB/s | 16.521MB/s | 19.585MB/s | 未計測 | 4.493MB/s | 保存される | 保存される | 低負荷 | 可 |
- rsyncコマンドでのみ確認
- I/Oエラーが発生したため、dstatでの計測下でない条件での参考値
- I/Oエラーが発生したため
- 一部のファイルでI/Oエラーが発生した
- cpコマンド cp -a では保存されないが、rsyncコマンドでは保存される
copy/move
- cp, mvなどによるファイルの複製・移動について
- ブラウザからの操作
- すべてサーバーサイドで処理される
- 単純な移動はmtimeが維持されるが、ファイル名変更は維持されない
- コピーは新しいファイルの作成となるため、mtimeは維持されない
- rclone
- Googleドライブはサーバーサイドでの移動・コピーをサポートしているため、rcloneでもサーバーサイドで処理される
- https://rclone.org/overview/#optional-features Googleドライブを含め、各種クラウドストレージサービスの機能比較
- 移動先はディレクトリである必要がある
- mitty@google:~$ rclone move google:/move/rclone/1MiB google:/move/rclone/1MiB.move
2017/04/23 19:35:35 ERROR : Google drive root 'move/rclone/1MiB.move': can't move files on overlapping remotes 2017/04/23 19:35:35 ERROR : Attempt 1/3 failed with 0 errors and: can't move files on overlapping remotes 2017/04/23 19:35:35 ERROR : Google drive root 'move/rclone/1MiB.move': can't move files on overlapping remotes 2017/04/23 19:35:35 ERROR : Attempt 2/3 failed with 0 errors and: can't move files on overlapping remotes 2017/04/23 19:35:35 ERROR : Google drive root 'move/rclone/1MiB.move': can't move files on overlapping remotes 2017/04/23 19:35:35 ERROR : Attempt 3/3 failed with 0 errors and: can't move files on overlapping remotes 2017/04/23 19:35:35 Failed to move: can't move files on overlapping remotes
- mitty@google:~$ rclone move google:/move/rclone/1MiB google:/move/1MiB.move
- mitty@google:~$ rclone ls google:/move/1MiB.move
1048576 1MiB
- 1MiBファイルがリネームされるのではなく、1MiB.moveというディレクトリの中に移動される
move of directory tree
- ブラウザからの操作と同様、treeディレクトリがdestディレクトリにリネームする(もしくはdestディレクトリに移動する)のと同等のコマンド操作が可能
- mitty@google:~$ time rclone -v move google:/move/rclone/tree/ google:/move/rclone/dest/
2017/04/23 22:11:26 INFO : Google drive root 'move/rclone/dest': Modify window is 1ms 2017/04/23 22:11:26 INFO : Google drive root 'move/rclone/dest': Server side directory move succeeded 2017/04/23 22:11:26 INFO : Transferred: 0 Bytes (0 Bytes/s) Errors: 0 Checks: 0 Transferred: 0 Elapsed time: 4.6s real 0m4.606s user 0m0.027s sys 0m0.000s
- mitty@google:~/mnt/google-drive-ocamlfuse/move/gdo$ date; time mv -v tree dest; date
Sun Apr 23 22:14:44 JST 2017 'tree' -> 'dest' real 0m1.874s user 0m0.000s sys 0m0.000s Sun Apr 23 22:14:46 JST 2017
- mitty@google:~/mnt/gdfs/move/gdfs$ date; time mv -v tree dest; date
Sun Apr 23 22:17:43 JST 2017 'tree' -> 'dest' real 0m1.804s user 0m0.000s sys 0m0.000s Sun Apr 23 22:17:45 JST 2017
- mitty@google:~$ time rclone -v move google:/move/rclone/tree/ google:/move/rclone/dest/
- ディレクトリのファイルIDは維持される
- ツリー以下のファイル数が多くなっても、ディレクトリ自体の移動は一瞬で完了する
google-drive-ocamlfuse
mount/umount
- mitty@google:~/mnt$ google-drive-ocamlfuse google-drive-ocamlfuse
Mar 20 16:46:10 google kernel: fuse init (API version 7.26) Mar 20 16:46:10 google systemd[1]: Mounting FUSE Control File System... Mar 20 16:46:10 google systemd[1]: Mounted FUSE Control File System.
- $ mount
google-drive-ocamlfuse on /home/mitty/mnt/google-drive-ocamlfuse type fuse.google-drive-ocamlfuse (rw,nosuid,nodev,relatime,user_id=1000,group_id=1000)
- fusermount -u /home/mitty/mnt/google-drive-ocamlfuse
features
- $HOME/.gdfuse/default/cache/ にキャッシュを作成する
- ファイルIDがファイル名になっている
- マウントしたローカルディレクトリは、Sambaからアクセスできない(見えなくなる)
- Googleドライブをローカルにマウントして、その中身をSambaでさらに別のPCからアクセスすることはできない
- マウントしたディレクトリへアクセスする場合、まずキャッシュファイルが作成される
- マウントしたディレクトリへのコピー・移動時: キャッシュファイル作成→Googleドライブへネットワーク転送
- マウントしたディレクトリからの場合: Googleドライブからキャッシュディレクトリへダウンロード→目的のパスにファイル作成
- rmコマンドによる削除はゴミ箱(.Trash/)への移動となる
mtime
- cp -a、rsyncのいずれでも、アップロード時は一部のファイルを除いて更新日時は同期時に変更されてしまう
- mtimeが保存されるファイルとそうでないファイルの違いは不明 。拡張子などによる違いではない模様
- ダウンロード時はmtimeは保存される
I/O
- for detail => dstat/google-drive-ocamlfuse
- アップロード
- ネットワーク転送に先立ってディスク上にキャッシュが作成されるが、かなり時間がかかる (10MB/s程度しか出ない)が、アップロード自体は高速(~100Mbps)
- キャッシュ作成中はCPUがIO waitで高負荷になる(100%)
- キャッシュ作成のI/Oが完了する前にGoogleドライブ上にはファイルが作成されている
- ただしサイズが表示されないので、openされただけのような状態でデータにはアクセスできない模様
- キャッシュの作成完了とともに書き込みプロセスからシェルに制御ぎゃもどるため、writeが終了したとして処理されている模様
- 実際のネットワークアップロードはその後バックグラウンド処理
- ダウンロード
- FUSEからの読み込みによってキャッシュが作成されるが、これもIO waitで高負荷になる(80%~)
- Googleドライブからのダウンロード自体は高速(~190Mbps)
- キャッシュへの書き込み終了後の読み込みは高速かつ低IO wait
- I/O waitについては、Debian User Forums • View topic - Google drive mounting client. でも言及されている
move/copy
- マウントしたディレクトリ上でのcp, mvいずれでもmtimeは保存されない
- cpはサーバーサイドで処理されず、一度キャッシュにダウンロードしたのち改めてアップロードとして処理される
- mvはサーバーサイドで処理され、ファイルIDも維持される
- for detail => dstat/google-drive-ocamlfuse
error handling
- マウント中に、Googleアカウント側でクレデンシャルを削除するなどして接続を切ると、lsのI/Oがブロックして帰ってこなくなる
- 割り込み不可のためCtrl+Cなども効かないが、google-drive-ocamlfuseプロセスをkillすることで一応回避可能
- 書き込み(アップロード)が完了したように見えても、fusermount -uせずGoogleアカウント側でクレデンシャルを削除して切断するとファイルが壊れることがある模様
- アンマウント中にGoogleアカウント側でクレデンシャルを削除し、google-drive-ocamlfuseで再マウントしてもエラー表示などは表示されない
- debug表示があるかは未確認
- ただしアクセスしようとするとI/Oエラーになる
$ google-drive-ocamlfuse ~/mnt/google-drive-ocamlfuse/ $ ls -la google-drive-ocamlfuse ls: cannot access 'google-drive-ocamlfuse': Input/output error
config
- read onlyにすることが可能
- $ vim .gdfuse/default/config
read_only=true
- $ touch google-drive-ocamlfuse/tmp
touch: cannot touch 'google-drive-ocamlfuse/tmp': Permission denied
- $ mount
google-drive-ocamlfuse on /home/mitty/mnt/google-drive-ocamlfuse type fuse.google-drive-ocamlfuse (rw,nosuid,nodev,relatime,user_id=1000,group_id=1000)
- mount上は区別できない
- $ vim .gdfuse/default/config
debug
- mitty@google:~$ google-drive-ocamlfuse -debug ~/mnt/google-drive-ocamlfuse/
Starting application setup (label=default, base_dir=/home/mitty/.gdfuse). Opening log file: /home/mitty/.gdfuse/default/gdfuse.log
- foregroud で動作する
- ただし、不安定になるためあまり使いにくそう
- mitty@google:~$ ls -l mnt/google-drive-ocamlfuse
ls: cannot access 'mnt/google-drive-ocamlfuse': Software caused connection abort
- mitty@google:~$ google-drive-ocamlfuse -debug ~/mnt/google-drive-ocamlfuse/
Illegal instruction (core dumped)
GDriveFS
mount/umount
- mitty@google:~$ gdfstool mount ~/.gdfs/cred ~/mnt/gdfs/
- sudo umount /home/mitty/mnt/gdfs
- $ gdfstool mount -o big_writes .gdfs/cred ~/mnt/gdfs/
- はっきりわかるほどの差は発生しなかった
features
- /tmpにキャッシュを作成する
- ディストリビューションによってはtmpfs(オンメモリ)になっていることが多いので、巨大なファイルにアクセスしようとすると空き容量が不足してファイルが壊れることがある
'sample/1GiB' -> 'gdfs/sample/1GiB' cp: error writing 'gdfs/sample/1GiB': Input/output error
- export TMPDIR=/var/tmp/等、キャッシュを作成するパスを変更することで回避可能
- ディストリビューションによってはtmpfs(オンメモリ)になっていることが多いので、巨大なファイルにアクセスしようとすると空き容量が不足してファイルが壊れることがある
- google-drive-ocamlfuse 同様、ファイルへのアクセスは一度tmpにキャッシュファイルが作成される
- getfattrコマンドにより、Googleドライブ上でのファイルIDや作成日時(ctime)、修正日時(mtime)などの属性を確認できる
- lnによるsymlinkは作成できない
- rmはゴミ箱ではなく即座に削除される
mtime
- google-drive-ocamlfuse 同様、cp -aでもアップロード時はmtimeは保存されない
- ダウンロードでは保存される
I/O
- for detail => dstat/gdrivefs
- キャッシュ作成時は50MB/s程度、ネットワーク転送はアップロード・ダウンロードとも~30Mbpsほどで低速
- キャッシュ作成中はCPUがIO waitで高負荷になる(~80%)が、時間はそれほどかからない
move/copy
- google-drive-ocamlfuseと同様、マウントしたディレクトリ上でのcp, mvいずれでもmtimeは保存されない
- mvはサーバーサイドで処理されるが、cpはローカルのキャッシュを経由してダウンロード→アップロードされる
- mvではファイルIDは維持される
- for detail => dstat/gdrivefs
error handling
- 転送途中にCtrl+Cで強制終了ができない
- psで見るとSTATがDになっている
- gdfstoolのプロセスをkillするなどして無理に強制終了すると、OSのシャットダウン時にI/Oがブロックされたままになることがある
debug
- https://github.com/dsoprea/GDriveFS#developingdebugging
- export GD_DEBUG=1
- mitty@google:~/.gdfuse/default$ cat curl.log
[15.400034] curl: info: Trying 172.217.25.74... [15.400053] curl: info: TCP_NODELAY set [15.436757] curl: info: Connected to www.googleapis.com (172.217.25.74) port 443 (#0) [15.436874] curl: info: ALPN, offering http/1.1 [15.436914] curl: info: Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH [15.441081] curl: info: successfully set certificate verify locations: [15.441089] curl: info: CAfile: /etc/ssl/certs/ca-certificates.crt CApath: none [15.441138] curl: info: TLSv1.2 (OUT), TLS header, Certificate Status (22):
- mitty@google:~/.gdfuse/default$ cat gdfuse.log
[0.000102] TID=0: Setting up default filesystem... [0.000116] TID=0: Loading configuration from /home/mitty/.gdfuse/default/config...done [0.000193] TID=0: BEGIN: Saving configuration in /home/mitty/.gdfuse/default/config [0.000258] TID=0: END: Saving configuration in /home/mitty/.gdfuse/default/config [0.000282] TID=0: Loading application state from /home/mitty/.gdfuse/default/state...done Current version: 0.6.7 Setting up cache db...done Setting up CURL...done Refresh token already present. [0.002030] TID=0: Starting filesystem /home/mitty/mnt/google-drive-ocamlfuse/ [0.004052] TID=1: init_filesystem [15.395620] TID=2: getattr / [15.395644] TID=2: BEGIN: Loading metadata from db [15.395883] TID=2: BEGIN: Recalculating cache size (old value=213280358) [15.396095] TID=2: END: Recalculating cache size (new value=213280358) [15.396101] TID=2: END: Getting metadata: Not valid [15.396104] TID=2: BEGIN: Refreshing metadata
rclone
- Googleドライブを含め、多数のクラウドストレージに対応している
- 認証
- google-drive-ocamlfuse と同様に、ハードコードされたクライアントIDを使うことも、自分で用意したものを設定することもできる
features
- FUSE mountする機能もあるがまだ実験的 (EXPERIMENTAL)
- シーケンシャルアクセスのみ対応
- https://rclone.org/commands/rclone_mount/
- copyコマンドなど多くのコマンドが、引数のパスをディレクトリ名として扱うことが多い点に注意が必要
- 特に移動・コピー先のパス(dest)はディレクトリして扱われるコマンドが多い
- このため、あるファイルを別のディレクトリにコピーすることはできるが、コピー先のファイル名を指定してコピーと同時にリネームするようなことはできない
- 同時並行で複数の処理が行われる。デフォルトでは4並行
- 当然だが各転送ごとの帯域はその並行数だけ分割される
- 使用するネットワーク帯域に制限をかけることができる
- パスワードを設定し透過的に暗号化することができる
- ログをファイルもしくはsyslogに出力可能
mtime
- ダウンロード・アップロードとも保存される
- move, copyコマンドにおいても維持される
- ディレクトリのmtimeは保存されない
I/O
- CPU負荷はusr, io waitとも高くなく、制限しなければネットワーク帯域をすべて使い切ることができる
move
- mitty@google:~$ rclone move google:/mtime/rclone google:/mtime/rclone.test
- 移動前と移動後で、ファイルのファイルIDは維持される
$ getfattr -d mnt/gdfs/mtime/rclone/1MiB | grep '\.id' user.original.id="0B6fZtAGUBbvtazRXTjR2T19GZzQ\012"
$ getfattr -d mnt/gdfs/mtime/rclone.test/1MiB | grep '\.id' user.original.id="0B6fZtAGUBbvtazRXTjR2T19GZzQ\012
- 移動前と移動後で、ファイルのファイルIDは維持される
- mitty@google:~$ date; time rclone move google:/rclone/1.1Gx1 google:/rclone/dest/1.1Gx1
Thu Mar 30 01:00:19 JST 2017 real 0m4.700s user 0m0.023s sys 0m0.000s
- サーバーサイドで処理されるため、ファイルサイズに関わらず数秒で完了する
- ネットワーク帯域もほぼ使用しない
$ dstat -t -c -m -d -n -o dstat.csv --nocolor 5 ----system---- --total-cpu-usage-- ------memory-usage----- -dsk/total- -net/total- time |usr sys idl wai stl| used free buff cach| read writ| recv send 30-03 01:00:13| 3 1 96 0 0| 140M 1671M 36.2M 120M| 0 819B|1357B 3805B 30-03 01:00:18| 0 0 98 2 0| 140M 1671M 36.2M 120M| 0 9011B| 281B 349B 30-03 01:00:23| 0 0 100 0 0| 146M 1665M 36.2M 120M| 0 819B|9626B 1965B 30-03 01:00:28| 0 0 99 1 0| 140M 1671M 36.3M 120M| 0 3277B|1401B 718B 30-03 01:00:33| 0 0 100 0 0| 140M 1671M 36.3M 120M| 0 819B| 524B 507B
copy
- mitty@google:~$ time rclone copy google:/mtime/rclone/1MiB google:/mtime/rclone/1MiB.copy
real 0m6.659s user 0m0.027s sys 0m0.010s
- moveと同じく、サーバーサイドで処理されるため、ファイルサイズに関わらず数秒で完了する
- 同様にネットワーク帯域もほぼ使用しない
----system---- --total-cpu-usage-- ------memory-usage----- -dsk/total- -net/total- time |usr sys idl wai stl| used free buff cach| read writ| recv send 01-04 23:05:47| 1 0 98 1 0| 147M 1720M 18.6M 104M| 0 819B| 721B 1281B 01-04 23:05:52| 1 1 97 1 0| 142M 1725M 18.6M 104M| 0 4096B|1087B 3182B 01-04 23:05:57| 0 0 99 1 0| 148M 1718M 18.6M 104M| 0 15k| 13k 1908B 01-04 23:06:02| 0 0 100 0 0| 141M 1725M 18.6M 104M| 0 0 |7335B 2294B
- コピーの場合は当然ながらファイルIDは異なったものになる
mitty@google:~$ getfattr -d mnt/gdfs/mtime/rclone/1MiB | grep '\.id' user.original.id="0B6fZtAGUBbvtSkVLTzI4YjM3Nm8\012" mitty@google:~$ getfattr -d mnt/gdfs/mtime/rclone/1MiB.copy/1MiB | grep '\.id' user.original.id="0B6fZtAGUBbvtel93REFhTUpvUkE\012"
- 10MB x100ファイル (約1GB)のコピーであっても短時間で処理できる
- mitty@google:~$ date; time rclone copy google:/rclone/3.10Mx100 google:/rclone/dest/3.10Mx100.copy
Sat Apr 1 23:13:24 JST 2017 real 0m25.053s user 0m0.083s sys 0m0.037s
- $ dstat -t -c -m -d -n -o dstat.csv --nocolor 5
----system---- --total-cpu-usage-- ------memory-usage----- -dsk/total- -net/total- time |usr sys idl wai stl| used free buff cach| read writ| recv send 01-04 23:13:17| 0 0 100 0 0| 156M 1710M 18.8M 104M| 0 0 | 627B 547B 01-04 23:13:22| 0 0 99 1 0| 157M 1710M 18.8M 104M| 0 2458B| 296B 363B 01-04 23:13:27| 0 0 100 0 0| 161M 1705M 18.8M 104M| 21k 0 | 14k 2225B 01-04 23:13:32| 0 0 99 1 0| 163M 1704M 18.8M 104M| 0 2458B| 76k 5625B 01-04 23:13:37| 0 0 100 0 0| 164M 1702M 18.8M 104M| 0 0 | 13k 4202B 01-04 23:13:42| 0 0 99 1 0| 164M 1702M 18.8M 104M| 0 2458B| 12k 4351B 01-04 23:13:47| 0 0 100 0 0| 164M 1702M 18.8M 104M| 0 819B| 13k 4506B 01-04 23:13:52| 0 0 99 1 0| 157M 1709M 18.9M 104M| 0 3277B|4994B 1486B 01-04 23:13:57| 0 0 100 0 0| 157M 1709M 18.9M 104M| 0 0 | 502B 479B
- mitty@google:~$ date; time rclone copy google:/rclone/3.10Mx100 google:/rclone/dest/3.10Mx100.copy
- 自分がオーナーではないファイルについてもサーバーサイドでコピーが可能
- mitty@google:~$ rclone -v copy google:/share/shared google:/share/copy
2017/05/19 01:13:45 INFO : Google drive root 'share/copy': Modify window is 1ms 2017/05/19 01:13:47 INFO : Google drive root 'share/copy': Waiting for checks to finish 2017/05/19 01:13:47 INFO : Google drive root 'share/copy': Waiting for transfers to finish 2017/05/19 01:13:48 INFO : 10.24MiB.5: Copied (server side copy) 2017/05/19 01:13:48 INFO : 1MiB: Copied (server side copy) 2017/05/19 01:13:49 INFO : test/10.24MiB: Copied (server side copy) 2017/05/19 01:13:49 INFO : test/1MiB.copy: Copied (server side copy) 2017/05/19 01:13:49 INFO : Transferred: 0 Bytes (0 Bytes/s) Errors: 0 Checks: 0 Transferred: 4 Elapsed time: 6.6s
- google:/share/shared 以下のファイルは別ユーザーからの共有ファイル
- mitty@google:~$ rclone -v copy google:/share/shared google:/share/copy
encrypt/decrypt
- https://rclone.org/crypt/
- ファイル名の暗号化にも対応
- nonce を用いる(24バイト、ファイルの先頭に保存される)ため、同じパスワード、同じファイルであっても暗号化後は異なるファイルになる
- このため、ファイルサイズは若干大きくなる
- パスワードと別にsaltも指定可能(password2として指定できる)
Last modified 7 years ago
Last modified on Nov 5, 2017 4:00:51 PM
Attachments (1)
- googedrive-movetree.png (50.3 KB) - added by mitty 7 years ago.
Download all attachments as: .zip